Struts2 学习笔记一

 

1.      Struts1 Struts2的区别

Struts2从字面上来看似乎是Struts1的升级,但实事上可以说Struts2Struts1几乎没有什么关系,除了名字相同外;说实在的,Struts2可以看作是WebWork的升级,因为无论从编程风格的相似性还是所引用到的jar包,到处可以看到WebWork的身影。下面就来比较下Struts1Struts2到底有哪些区别吧:

l         Struts1Action需要继承ActionServlet是一种侵入式的编程,而Struts2Action完全是一个普通的POJO对象;

l         Struts1Action是单例模式并且必须是线程安全的(因为只有一个Action实例来处理所有的请求),而Struts2Action会为每一个请求创建一个实例,因而没有线程安全性的问题;

l         Struts1依赖于Servlet API,如Action方法execute方式中必须有HttpServletRequestHttpServletResponse参数,而Struts2Action不再需要这两个参数;

l         Struts1使用ActionForm来封装用户请求参数,且每个form必须继承自ActionFormStruts2直接使用Action来封装用户请求的参数;

l         在表达式方面,Struts1整合了JSTL,而Struts2不仅可以使用JSTL,还可以使用OGNL

 

2Struts2的核心控制器

       Struts2的核心控制器为FilterDispatcher,它是一个Filter,负责拦截所有的用户请求。Struts2框架默认处理*.action的请求,当有请求到来时,Struts2框架将会根据*.action请求的前面部分决定调用相应的业务逻辑组件(用户实现的Action类的实例)

       Struts2用于处理用户请求的Action实例,并不是用户实现的业务控制器,而是Action代理,而用户实现的Action类仅仅是Struts2Action代理的代理目标。

 

3Struts2基本配置

 (1). 配置web.xml

       要使Struts2的核心控制器发挥作用,需在web.xml中配置FilterDispatcher

       <filter>

        <filter-name>struts2</filter-name>

        <filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>

    </filter>

 

    <filter-mapping>

        <filter-name>struts2</filter-name>

        <url-pattern>/*</url-pattern>

</filter-mapping>

配置filter时可以指定初始化参数,其中有3个具有特殊意义:

l         config:该值为一系统以英文逗号隔开的字符串,每个字符串都是一个XML配置文件的位置;Struts2框架将自动加载该属性指定的系列配置文件;

l         actionPackages:该值也为一系统以英文逗号隔开的字符串,每个字符串都是一个包空间,Struts2将扫描这些包空间下的Action类;

l         configProviders:当自己实现ConfigurationProvider类后,可以在此配置;

 

 (2). 标签的配置

       Struts2的标签库定义文件包含在struts2-core-xxx.jar文件META-INF下,文件名为struts-tag.tld

       如果Web应用使用了Servlet2.3以前的规范,则必须在web.xml文件中配置加载Struts2标签库,如下:

       <taglib>

              <taglib-uri>/s</taglib-uri>

              <taglib-location>/WEB-INF/struts-tags.tld</taglib-location>

       </taglib>

       如果Web应用使用了Servlet2.4,则会自动加载该标签文件,故不需要手动加载。

 

 (3). struts.xml配置文件

       Struts2的核心配置文件为struts.xml,它主要负责管理业务控制器ActionStruts2框架会自动加载放在WEB-INF/classes路径下的struts.xml文件;

       为了避免struts.xml文件过大,可以将其分解成多个配置文件,然后在struts.xml文件中使用<include/>包含其他的配置文件,如下:

       <struts>

              <include file=”struts-part1.xml”/>

       </struts>

       struts-default.xml文件是Struts2框架的默认配置文件,Struts2框架每次都会自动加载该文件,它其中定义了Struts2内建的Result类型、拦截器以及拦截器栈等。

 

 (4). Eclipse方式的扩展

       Struts2还提供了一种“可插拔”的方式来安装插件,如Struts2框架自带的Spring/JSF等,都提供了一个类似struts2-xxx-plugin.jar的文件,将其解压后可以看到其中包含struts-plugin.xml文件,该文件中配置了Struts2Spring/JSF框架整合必需的常量、拦截器等。只需要将strtus2-xxx-plugin.jar文件放在WEB-INF/lib路径下,Struts2框架将自动加载该框架。

       故用户自己开发属于自己的Struts2插件,只要将对应的struts-plugin.xml文件放在JAR文件中,Struts2框架将会自动加载该文件。

 

 (5). struts.properties文件

       struts.properties文件用于配置Struts2框架的一些属性值,它是一个标准的Properties文件,使用相应的key-value方式记录;该文件只要放在Web应用的CLASSPATH路径下,Struts2框架均可加载,但一般习惯将其放在WEB-INF/classes目录下。

       下面列举一些常用到的属性:

l         struts.i18n.encoding:指定web应用的默认编码集,如对于处理中文请求参数时,需要将其设置为GBKGB2312

l         struts.action.extension:指定由Struts2框架处理的请求后缀,该属性默认值是action,如需指定多个值,使用英文逗号隔开;

l         struts.enable.DynamicMethodInvocation:值为true/false,用于指定Struts2是否支持动态方法调用,其默认值为true

l         struts.tag.altSyntax:指定是否允许在Struts2标签中使用表达式语法,默认为true

l         struts.devMode:该属性设置Struts2应用是否使用开发模式,如果设置为true,则在应用出错时会显示更多的出错提示,便于查找错误,默认值为false

l         struts.i18n.reload:设置是否每次HTTP请求到达时,系统重新加载资源文件,属性默认值为false,在开发时建议将其设置为true,这样修改的资源文件后可以不用重启应用;

l         struts.configuration.xml.reload:该属性设置当struts.xml文件改变后系统是否重启加载,其默认值为false

l         struts.custom.i18n.resources:该属性指定Struts2应用所需要的国际化资源文件,如有多个资源文件,中间用英文逗号隔开;

l         struts.configuration.files:指定Struts2默认加载的配置文件,如有多个文件,中间使用英文逗号隔开,该属性默认值为struts-default.xml, struts-plugin.xml,struts.xml

除了在struts.properties文件中配置属性外,Struts2也支持在struts.xml文件中用<constant>元素来定义属性,如下:

struts.properties

struts.custom.i18n.resources = ApplicationResource

……

 

struts.xml

<struts>

    <constant name=struts.custom.i18n.resources value=ApplicationResource />

    ……

</struts>

    注意:如果在值多个配置文件中配置了相同的属性,则后一个文件中的配置常量值会覆盖前一个文件中的常量值。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章