SSH框架之struts2专题2:Struts2配置文件

1 Struts2相关的六个配置文件

1.1 struts-default.xml文件(只读,不可修改)

  • Struts2的默认核心配置文件,其中主要定义了11种返回类型、35种拦截器,以及拦截器栈。其中较重要的默认拦截器栈中包含20种拦截器,是Struts2核心功能的体现。
    <struts>
            <package name="struts-default" abstract="true">
              <!-- 定义了11种返回类型  -->
                <result-types>
                        <result-type name="chain" class="com.opensymphony.xwork2.ActionChainResult"/>
                        <result-type name="dispatcher" class="org.apache.struts2.dispatcher.ServletDispatcherResult" default="true"/>
                        <result-type name="freemarker" class="org.apache.struts2.views.freemarker.FreemarkerResult"/>
                        <result-type name="httpheader" class="org.apache.struts2.dispatcher.HttpHeaderResult"/>
                        <result-type name="redirect" class="org.apache.struts2.dispatcher.ServletRedirectResult"/>
                        <result-type name="redirectAction" class="org.apache.struts2.dispatcher.ServletActionRedirectResult"/>
                        <result-type name="stream" class="org.apache.struts2.dispatcher.StreamResult"/>
                        <result-type name="velocity" class="org.apache.struts2.dispatcher.VelocityResult"/>
                        <result-type name="xslt" class="org.apache.struts2.views.xslt.XSLTResult"/>
                        <result-type name="plainText" class="org.apache.struts2.dispatcher.PlainTextResult" />
                        <result-type name="postback" class="org.apache.struts2.dispatcher.PostbackResult" />
                </result-types>
              <!-- 定义35种拦截器  -->
                <interceptors>
                        <interceptor name="alias" class="com.opensymphony.xwork2.interceptor.AliasInterceptor"/>
                        <interceptor name="autowiring" class="com.opensymphony.xwork2.spring.interceptor.ActionAutowiringInterceptor"/>
                        <interceptor name="chain" class="com.opensymphony.xwork2.interceptor.ChainingInterceptor"/>
                        <interceptor name="conversionError" class="org.apache.struts2.interceptor.StrutsConversionErrorInterceptor"/>
                        <interceptor name="cookie" class="org.apache.struts2.interceptor.CookieInterceptor"/>
                        <interceptor name="cookieProvider" class="org.apache.struts2.interceptor.CookieProviderInterceptor"/>
                        <interceptor name="clearSession" class="org.apache.struts2.interceptor.ClearSessionInterceptor" />
                        <interceptor name="createSession" class="org.apache.struts2.interceptor.CreateSessionInterceptor" />
                        <interceptor name="debugging" class="org.apache.struts2.interceptor.debugging.DebuggingInterceptor" />
                        <interceptor name="execAndWait" class="org.apache.struts2.interceptor.ExecuteAndWaitInterceptor"/>
                        <interceptor name="exception" class="com.opensymphony.xwork2.interceptor.ExceptionMappingInterceptor"/>
                        <interceptor name="fileUpload" class="org.apache.struts2.interceptor.FileUploadInterceptor"/>
                        <interceptor name="i18n" class="com.opensymphony.xwork2.interceptor.I18nInterceptor"/>
                        <interceptor name="logger" class="com.opensymphony.xwork2.interceptor.LoggingInterceptor"/>
                        <interceptor name="modelDriven" class="com.opensymphony.xwork2.interceptor.ModelDrivenInterceptor"/>
                        <interceptor name="scopedModelDriven" class="com.opensymphony.xwork2.interceptor.ScopedModelDrivenInterceptor"/>
                        <interceptor name="params" class="com.opensymphony.xwork2.interceptor.ParametersInterceptor"/>
                        <interceptor name="actionMappingParams" class="org.apache.struts2.interceptor.ActionMappingParametersInteceptor"/>
                        <interceptor name="prepare" class="com.opensymphony.xwork2.interceptor.PrepareInterceptor"/>
                        <interceptor name="staticParams" class="com.opensymphony.xwork2.interceptor.StaticParametersInterceptor"/>
                        <interceptor name="scope" class="org.apache.struts2.interceptor.ScopeInterceptor"/>
                        <interceptor name="servletConfig" class="org.apache.struts2.interceptor.ServletConfigInterceptor"/>
                        <interceptor name="timer" class="com.opensymphony.xwork2.interceptor.TimerInterceptor"/>
                        <interceptor name="token" class="org.apache.struts2.interceptor.TokenInterceptor"/>
                        <interceptor name="tokenSession" class="org.apache.struts2.interceptor.TokenSessionStoreInterceptor"/>
                        <interceptor name="validation" class="org.apache.struts2.interceptor.validation.AnnotationValidationInterceptor"/>
                        <interceptor name="workflow" class="com.opensymphony.xwork2.interceptor.DefaultWorkflowInterceptor"/>
                        <interceptor name="store" class="org.apache.struts2.interceptor.MessageStoreInterceptor" />
                        <interceptor name="checkbox" class="org.apache.struts2.interceptor.CheckboxInterceptor" />
                        <interceptor name="datetime" class="org.apache.struts2.interceptor.DateTextFieldInterceptor" />
                        <interceptor name="profiling" class="org.apache.struts2.interceptor.ProfilingActivationInterceptor" />
                        <interceptor name="roles" class="org.apache.struts2.interceptor.RolesInterceptor" />
                        <interceptor name="annotationWorkflow" class="com.opensymphony.xwork2.interceptor.annotations.AnnotationWorkflowInterceptor" />
                        <interceptor name="multiselect" class="org.apache.struts2.interceptor.MultiselectInterceptor" />
                        <interceptor name="deprecation" class="org.apache.struts2.interceptor.DeprecationInterceptor" />
                      <!-- 定义默认拦截器栈,包括20种拦截器 -->
                        <interceptor-stack name="defaultStack">
                                <interceptor-ref name="exception"/>
                                <interceptor-ref name="alias"/>
                                <interceptor-ref name="servletConfig"/>
                                <interceptor-ref name="i18n"/>
                                <interceptor-ref name="prepare"/>
                                <interceptor-ref name="chain"/>
                                <interceptor-ref name="scopedModelDriven"/>
                                <interceptor-ref name="modelDriven"/>
                                <interceptor-ref name="fileUpload"/>
                                <interceptor-ref name="checkbox"/>
                                <interceptor-ref name="datetime"/>
                                <interceptor-ref name="multiselect"/>
                                <interceptor-ref name="staticParams"/>
                                <interceptor-ref name="actionMappingParams"/>
                                <interceptor-ref name="params"/>
                                <interceptor-ref name="conversionError"/>
                                <interceptor-ref name="validation">
                                        <param name="excludeMethods">input,back,cancel,browse</param>
                                </interceptor-ref>
                                <interceptor-ref name="workflow">
                                        <param name="excludeMethods">input,back,cancel,browse</param>
                                </interceptor-ref>
                                <interceptor-ref name="debugging"/>
                                <interceptor-ref name="deprecation"/>
                        </interceptor-stack>
            </package>
    </struts>

    1.2 default.properties配置文件(只读,不可修改)

  • 定义了Struts2中用到的常量的默认值。
    # 设置Struts2中请求的字符集
    struts.i18n.encoding=UTF-8
    # SSH中使用。将Action交由Spring容器来管理
    struts.objectFactory = spring
    # SSH中使用。按名称自动装配Bean
    struts.objectFactory.spring.autoWire = name
    # 设置文件上传的最大文件大小值。单位为:字节。
    struts.multipart.maxSize=2097152
    # 设置struts2所处理请求的默认扩展名
    struts.action.extension=action,,
    # 动态方法调用的开关
    struts.enable.DynamicMethodInvocation = false
    # 开关模式开关。开关模式的开启,在控制台给出更多信息。
    struts.devMode = false

    1.3 struts-plugin.xml配置文件(只读,不可修改)

  • Struts2与第三方插件的整合配置文件。
  • 位置:Struts2框架lib目录中所有以-plugin-结束的jar包中。
    SSH框架之struts2专题2:Struts2配置文件

    1.4 struts.properties配置文件

  • 用于修改常量的值。因为常量在struts.xml中也可以进行配置,所以一般不使用该文件。
  • 该文件是程序员手工创建的,放在src目录下,即classpath下,文件内容格式为:
    struts.i18n.encoding = GBK
    struts.action.extension = action, do 
  • 注意:配置项与default.properties配置文件的关系是覆盖,而不是追加。

    1.5 web.xml配置文件

  • 可用于设置常量,扩展Struts2等,但是一般不这样使用。因为这里的常量设置在struts.xml中均可设置。但是,若这些文件中均做了某一个设置,web.xml中设置的优先级最高。
    <!-- 注册Struts2的启动项 -->
        <filter>
            <filter-name>struts2</filter-name>
            <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
            <!-- 在此可进行常量设置等 -->
            <init-param>
                <param-name>struts.i18n.encoding</param-name>
                <param-value>GBK</param-value>
            </init-param>
        </filter>
        <filter-mapping>
            <filter-name>struts2</filter-name>
            <url-pattern>/*</url-pattern>
        </filter-mapping>

    1.6 struts.xml配置文件常量设置

    <?xml version="1.0" encoding="UTF-8"?>
         <!DOCTYPE struts PUBLIC
        "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
        "http://struts.apache.org/dtds/struts-2.3.dtd">
    <struts>
        <constant name="struts.action.extension" value="do"></constant>
    </struts>
  • struts.xml文件设置常量的优先级比web.xml和struts.properties配置文件都低,优先级处于最低的位置。

    2 Struts2核心配置文件

    2.1 < package/>标签

    1、name属性:配置包时必须指定name属性,该属性值可以任意取值,但是必须唯一。其与Java的类包间无对应关系。若其他包要继承该包,则必须通过该属性进行引用。
    2、namespace属性:包的namespace属性用于定义该包下Action路径的一部分。此属性是必须的,且不能为空值。但是命名空间可以为“/”,表示为Web应用的根路径。

    <!--  正确 -->
    <package name="demo" namespace="/test" extends="struts-default">
    <!--  正确 -->
    <package name="demo" namespace="/xxx/jjj" extends="struts-default">
    <!--  正确 -->
    <package name="demo" namespace="/" extends="struts-default">
    <!--  错误 -->
    <package name="demo" namespace="" extends="struts-default">
    <!--  错误 -->
    <package name="demo" namespace="xxx" extends="struts-default">
    <!--  无namespace属性,错误 -->
    <package name="demo"  extends="struts-default">
  • name通常和namespace属性对应使用,如name = "xxx-yyy-test" ,namespace="/xxx/yyy/test"。

3、extends属性:

  • 通常情况下,包需要继承struts-default包。因为Struts2的11个返回类型、35个拦截器、默认拦截器栈等Struts2的主要功能,都定义在这个包中。继承了这个包,也就是拥有了这些功能。struts-default包定义在struts-default.xml中。

4、abstract属性:

  • 包还可以通过abstract="true"定义为抽象包。抽象包中是不能包含Action的。抽象包一般就是用于被继承的。structs-default包即为抽象包。

    2.2 < action/>标签

    1、name属性:

  • 在struts2中,访问struts2中的action的URL路径由两部分组成:包的命名空间+action的name属性值。例如访问loginDemo例子中名为login的Action的URL路径为:/test/login.action。
  • 若从浏览器地址直接访问,其访问URL地址可写为: http://127.0.0.1:8080/loginDemo/test/login.action

2、method属性:

  • Action标签由一个属性method,该属性用于指定所要执行的Action类的哪个Action方法。若没有指定该属性值,则默认值为“execute”,即执行指定Action类的execute方法。

  • 测试1:修改Action中的Action方法名不为execute,而不指定method属性值,提交请求,会看到错误提示。
  • 结论:说明默认自动查找执行的方法名为execute()。
    SSH框架之struts2专题2:Struts2配置文件

  • 测试2:在同一个Action类中创建两个Action方法,在配置文件中创建两个相对应的<action/>。可以看到这两个<action/>的class属性相同,但是name和method均不同。
  • 说明<action/>的定义粒度并非是Action类,而是Action类中的method。即<action/>定义的是“Action类 + method”。
    SSH框架之struts2专题2:Struts2配置文件
    SSH框架之struts2专题2:Struts2配置文件

3、class属性:

  • class属性用于指定该Action所要执行的Action类。其由三种写法:
    a、直接写要执行的类的全限定性类名。
    b、在SSH中,Action交由Spring容器进行管理,此时class属性要设置为一个伪类名。
    c、class属性缺省。对于class属性缺省情况是指,若用户提交某个请求后,不需要经过某个Action类的处理,而是直接要转向某个视图页面,如简单的页面间的超链接,则可以采用如下形式:
    SSH框架之struts2专题2:Struts2配置文件
    SSH框架之struts2专题2:Struts2配置文件
  • 若<action/>没有class属性,则默认执行ActionSupport类。原因是在Struts-default包中通过<default-class-ref/>指定默认执行的类。
    <default-class-ref class="com.opensymphony.xwork2.ActionSupport" />
  • ActionSupport类有一个execute()方法,其返回值为常量SUCCESS,即字符串“success”。
    SSH框架之struts2专题2:Struts2配置文件

    2.3 < result/>标签

    1、name属性:result标签用于指定Action执行完毕后所要转向的视图资源。其name属性指定该视图的名称,如果name属性缺省,默认值为字符串常量“success”。
    2、type属性:Struts2中共提供了11种视图转向类型,类型由result标签的type属性指定,type属性的值在struts-default.xml中可以查看到。需要注意的是,在dispatcher后设置的default为true。

    <result-types>
                <result-type name="dispatcher" class="org.apache.struts2.dispatcher.ServletDispatcherResult" default="true"/>
    </result-types>
  • 注意,对于请求转发的页面,可以是WEB-INF中的页面:而重定向的页面,是不能为WEB-INF中的页面的。因为重定向相对于用户而言是再发一次请求,而用户是不能直接访问WEB-INF中的资源。
    SSH框架之struts2专题2:Struts2配置文件
    dispatcher转发:
  • 该转向类型用于完成请求转发功能,即服务器内跳转。请求转发是可以将请求参数传递给所要转发的下一级页面的。dispatcher为默认转向类型。

redirect跳转:

  • redirect是无法将Action中的属性值传递给要转向的下一个页面的。但是可以通过在result值中使用${属性名}表达式携带参数的形式,实现将属性值向下传递的目的。表达式里的“属性名”对应Action类中的属性。
    SSH框架之struts2专题2:Struts2配置文件
  • 该请求在进行重定向时,会将username加入请求参数中,以GET方式提交请求。该username为LoginAction中的属性。若有多个请求参数,注意参数连接符为“& + amp;”,而非&。
    SSH框架之struts2专题2:Struts2配置文件
  • 但是对于动态参数的写法,Struts2不建议以上写法,而是提倡<param/>方式。
    SSH框架之struts2专题2:Struts2配置文件
  • 还可以通过参数charSet设置字符集。
    SSH框架之struts2专题2:Struts2配置文件
  • 注意,其输出是从param参数中进行读取。
    SSH框架之struts2专题2:Struts2配置文件

redirectAction跳转:

  • 专门用于重定向到Action。当然,Action中的属性值是无法传递到下一个Action中的。不过请注意,redirect在不使用<param/>方式时,也是可以重定向到Aciton的。
    SSH框架之struts2专题2:Struts2配置文件
  • 对于重定向到action,还可以使用<param/>来设定转向的action。注意,也不要为要跳转的action添加请求扩展名。且使用<param/>方式时,不能使用type="redirect",必须使用redirectAction。
    SSH框架之struts2专题2:Struts2配置文件
  • 也可以转向其他包中的action,通过namespace参数指定包。
    SSH框架之struts2专题2:Struts2配置文件

chain跳转:

  • 用于将请求转发到Action中。注意,此时要转向的Aciton请求不能带扩展名。例如本例,只能写为second,但是不能够写为second.action。当然,request范围的参数是可以传递到下一个Action中的。
    SSH框架之struts2专题2:Struts2配置文件

    2.4 全局视图globalResults

    1、包范围全局视图:

  • 若某视图页面可以被同一个包中的多个action所公用,则应将其定义为包范围全局视图。包范围全局视图定义于包中,在包中是可见的。
    SSH框架之struts2专题2:Struts2配置文件

2、应用范围全局视图:

  • 若要使某个视图为所有包可用,即定义其为应用范围全局视图。可定义一个基本包,在基本包中定义全局视图。然后,让其他包都继承自该基本包即可。当然,基本包要继承自struts-default。
    SSH框架之struts2专题2:Struts2配置文件

    2.5 为应用指定多个配置文件

  • 在大部分应用里,随着应用规模的增加,系统中Action数量也大量增加,导致struts.xml配置文件变得非常庞大、臃肿。为了避免这种情况的发生,提高struts.xml文件的可读性和可维护性,可以将一个struts.xml配置文件分解成多个配置文件,然后在struts.xml文件中包含入其他配置文件。
  • 为Struts2应用指定多个Struts2配置文件,可以使用<include/>。
    SSH框架之struts2专题2:Struts2配置文件
  • 一般情况下,是按照功能模块来拆分struts.xml配置文件的。需要注意的是,要保证各个子配置文件中的包名是不能重复的。
  • 当然,若各个子配置文件的命名结构相同,也可以使用通配符*来定义被包含的子配置文件。
    SSH框架之struts2专题2:Struts2配置文件

转载于:https://blog.51cto.com/12402717/2057987

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值