开发者突击的配套Struts2SpringHibernate集成项目学习笔记1
学习开发者突击的配套Struts2SpringHibernate集成项目,写下自己的心得和值得注意的地方
一、首先我们查看login.jsp中的代码
(一)对于
我们自然按照步骤去找国际化文件,这里是找全局国际化文件,而我们查找struts.xml发现没有struts.custom.i18n.resources这个属性,而我们注意到还有一个struts.properties,为什么要有struts.properties,这个是以键值的形式存储数据,它相对于struts.xml更加直观,而加载这两个的顺序为先加载 struts.xml,再加载 struts.properties。也就是说 struts.properties 是可以覆盖 struts.xml里面的 配置的,而struts.properties中的属性详见
http://blog.163.com/anly_liu/blog/static/42832314200792672853251/
(二)
并且注意其中mappingResources属性配置其映射文件。
3.配置事物管理器
(五)注册类所使用的验证方法。
这里我们注意几个正则表达式
1.邮箱三、注册完毕,回到login.jsp页面
(一)发现刚刚注册的用户名显示在了用户名这一栏中,查找源代码,发现并没有直接设置
value,这里就要注意name和value的关系:默认struts2的标签会将属性name对应变量的值设为value,也就是说在提交表单时,将name属性所在的标签的value属性值设置为对应javabean的相应属性值。关于name和value的关系见http://struts.apache.org/2.3.4.1/docs/form-tags.html
(二)点击登录按钮,调用LoginAction的execute方法,我们查看源代码,发现了ActionContext这个类,这个ActionContext类时struts2为访问ServletAPI提供的工具类,同时也是struts2中的默认Action类,其静态方法getContext得到ActionContext实例,我们可以理解它类似于ServletContext的引用。进而实现对HttpServletRequest及HttpSession对象的访问。
四、该项目的web.xml中配置的过滤器和其他配置
(一)CharacterEncodingFilter
这个过滤器主要解决前台JSP页面和JAVA代码中使用了不同的字符集进行编码的时候就会出现表单提交的数据或者上传/下载中文名称文件出现乱码的问题。详见 http://blog.csdn.net/heidan2006/article/details/3075730
(二)com.opensymphony.module.sitemesh.filter.PageFilter
1.什么是sitemesh?它是由一个基于web页面布局、装饰以及与现存web应用整合的框架。它能帮助我们在由大量页面构成的项目中创建一致的页面布局和外观,使用sitemesh给我们带来的是不仅仅是页面结构问题,它的出现让我们有更多的时间去关注底层业务逻辑,而不是整个页面的风格和结构。它让我们摆脱了大量用include方式复用页面尴尬局面。
2.如何使用sitemesh,首先我们要引入相应的包,第二,在web.xml中配置这个过滤器
第四,根据配置文件中指定的目录名,建立相应的目录,放置我们的装饰器。第五、在装饰器中编写代码
2./struts-tags 是struts2标签库描述符默认的URI,建议使用这个名称,而我们为什么没有在web.xml中写下对应的<taglib>呢?原因为struts2的taglib已经写在jar里面了。只要在页头加上就可以使用它的taglib了。
3.为什么要使用这种方式引用标签库描述符,直接在页面中通过<%@taglib uri ="标签库描述符的绝对路径"%>引用标签库不就可以了嘛? 这主要是因为耦合度,如果标签库需要更改,那么我们就要更改所有引入该标签库的页面,如果我们使用web.xml配置方式,那么只需要更改配置文件这一处即可,详见http://zhidao.baidu.com/question/308209512.html
4.为什么需要标签库描述符? JSP标签库需要一个标签库描述符(TLD)文件来自定义标签的命名,它们的属性,以及操作该标签的Java类,详见 http://blog.sina.com.cn/s/blog_4f847d0801008lcb.html
5.标签库描述符和标签库的区别是什么,我的理解是这样的,标签库是一个宽泛的概念,或者我们理解它为一种通过JavaBean生成基于XML的脚本的方法。在这个方法中,我们要定义一个javabean,创建标签处理器,创建标签描述符,用于描述自定义标签以让系统知道如何处理。更新web xml文件。从而使用新的标签。
(六)
这里我们要理解一下单独使用struts时其action的实例化过程。我们发现,其是使用com.opensymphony.xwork2.ObjectFactory中的方法buildAction(),而如果spring和struts相结合,就使用com.opensymphony.xwork2.spring.SpringObjectFactory。具体
可参考http://blog.csdn.net/wmj2003/article/details/5018927
在application.xml中配置完成后就在struts.xml中配置,如
1.我们知道spring提供了几种很实用的通知,前置通知,后置通知,环绕通知,异常通知,都是方法级别的,对于这些advice的实现,spring提供了基于xml,基于annotation的实现,此外,我们还应该知道有基于接口的实现,这里就是使用基于接口的实现。
(四)拦截器代理org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator的使用,这个是spring为我们提供的根据beanName匹配后进行自动代理的解决方法,<bean name="loggingAutoProxy"class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator"><property name="beanNames"><list><value>/login</value><value>/register</value></list></property><property name="interceptorNames"><list><value>logger</value></list></property></bean>
这个配置意味着/login和/register的beanName,都被spring自动代理,并执行logger的切面通知。这个logger就是我们自己的拦截器。