Struts2配置文件详解

来源:互联网 发布:学网络渗透 编辑:程序博客网 时间:2024/05/21 19:42
一、struts-default默认配置文件 

Struts2框架中使用包来管理action,避免了Servlet在web.xml中难以管理的与维护的局面.包的作用和java中的类包是非常类似的,它主要用于管理一组业务功能相关的action,在实际应用中,我们应该把一组业务功能相关的action 放在同一个包下. 

配置包时必须指定name属性,该name属性值可以任意取名,但必须唯一,如果其他包要继承该包,必须通过该属性进行引用,包的namespace属性用于定义该包的命名空间,命名空间作用为访问该包下的action路径的一部分,见示例.namespace属性可以不配置,如果不指定该属性,默认的命名空间为”” 

通常每个包都应该继承struts-default包,因为struts2很多核心功能都是拦截来实现的,如,从请求中把请求参数封闭到action,文件上传和数据验证等都是通过拦截器实现的,struts-default定义了这些拦截器和Result类型,可以这么说,当包继承了struts-default才能使用struts2提供的核心功能,struts-default包是在struts2-core-2.xx.jar文件中的struts-defalut.xml中定义,struts-default.xml也是struts2默认配置文件,struts2每次都会自动加载struts-default.xml文件. 

package还有一个abstract=”true”属性,指定此包为抽象包,和抽象类的概念差不多,说明此包只能被其他包继承,则它里面不允许包含action元素. 


下面贴上struts-default.xml文件的源代码: 
Java代码  收藏代码
  1. <?xml version="1.0" encoding="UTF-8" ?>  
  2. <!--  
  3. /* 
  4.  * $Id: struts-default.xml 694960 2008-09-13 15:01:00Z rgielen $ 
  5.  * 
  6.  * Licensed to the Apache Software Foundation (ASF) under one 
  7.  * or more contributor license agreements.  See the NOTICE file 
  8.  * distributed with this work for additional information 
  9.  * regarding copyright ownership.  The ASF licenses this file 
  10.  * to you under the Apache License, Version 2.0 (the 
  11.  * "License"); you may not use this file except in compliance 
  12.  * with the License.  You may obtain a copy of the License at 
  13.  * 
  14.  *  http://www.apache.org/licenses/LICENSE-2.0 
  15.  * 
  16.  * Unless required by applicable law or agreed to in writing, 
  17.  * software distributed under the License is distributed on an 
  18.  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 
  19.  * KIND, either express or implied.  See the License for the 
  20.  * specific language governing permissions and limitations 
  21.  * under the License. 
  22.  */  
  23. -->  
  24.   
  25. <!DOCTYPE struts PUBLIC  
  26.     "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"  
  27.     "http://struts.apache.org/dtds/struts-2.0.dtd">  
  28.   
  29. <struts>  
  30.     <bean class="com.opensymphony.xwork2.ObjectFactory" name="xwork" />  
  31.     <bean type="com.opensymphony.xwork2.ObjectFactory" name="struts" class="org.apache.struts2.impl.StrutsObjectFactory" />  
  32.   
  33.     <bean type="com.opensymphony.xwork2.ActionProxyFactory" name="xwork" class="com.opensymphony.xwork2.DefaultActionProxyFactory"/>  
  34.     <bean type="com.opensymphony.xwork2.ActionProxyFactory" name="struts" class="org.apache.struts2.impl.StrutsActionProxyFactory"/>  
  35.   
  36.     <bean type="com.opensymphony.xwork2.util.ObjectTypeDeterminer" name="tiger" class="com.opensymphony.xwork2.util.GenericsObjectTypeDeterminer"/>  
  37.     <bean type="com.opensymphony.xwork2.util.ObjectTypeDeterminer" name="notiger" class="com.opensymphony.xwork2.util.DefaultObjectTypeDeterminer"/>  
  38.     <bean type="com.opensymphony.xwork2.util.ObjectTypeDeterminer" name="struts" class="com.opensymphony.xwork2.util.DefaultObjectTypeDeterminer"/>  
  39.   
  40.     <bean type="org.apache.struts2.dispatcher.mapper.ActionMapper" name="struts" class="org.apache.struts2.dispatcher.mapper.DefaultActionMapper" />  
  41.     <bean type="org.apache.struts2.dispatcher.mapper.ActionMapper" name="composite" class="org.apache.struts2.dispatcher.mapper.CompositeActionMapper" />  
  42.     <bean type="org.apache.struts2.dispatcher.mapper.ActionMapper" name="restful" class="org.apache.struts2.dispatcher.mapper.RestfulActionMapper" />  
  43.     <bean type="org.apache.struts2.dispatcher.mapper.ActionMapper" name="restful2" class="org.apache.struts2.dispatcher.mapper.Restful2ActionMapper" />  
  44.   
  45.     <bean type="org.apache.struts2.dispatcher.multipart.MultiPartRequest" name="struts" class="org.apache.struts2.dispatcher.multipart.JakartaMultiPartRequest" scope="default" optional="true"/>  
  46.     <bean type="org.apache.struts2.dispatcher.multipart.MultiPartRequest" name="jakarta" class="org.apache.struts2.dispatcher.multipart.JakartaMultiPartRequest" scope="default" optional="true" />  
  47.   
  48.     <bean type="org.apache.struts2.views.TagLibrary" name="s" class="org.apache.struts2.views.DefaultTagLibrary" />  
  49.   
  50.     <bean class="org.apache.struts2.views.freemarker.FreemarkerManager" name="struts" optional="true"/>  
  51.     <bean class="org.apache.struts2.views.velocity.VelocityManager" name="struts" optional="true" />  
  52.   
  53.     <bean class="org.apache.struts2.components.template.TemplateEngineManager" />  
  54.     <bean type="org.apache.struts2.components.template.TemplateEngine" name="ftl" class="org.apache.struts2.components.template.FreemarkerTemplateEngine" />  
  55.     <bean type="org.apache.struts2.components.template.TemplateEngine" name="vm" class="org.apache.struts2.components.template.VelocityTemplateEngine" />  
  56.     <bean type="org.apache.struts2.components.template.TemplateEngine" name="jsp" class="org.apache.struts2.components.template.JspTemplateEngine" />  
  57.   
  58.     <bean type="com.opensymphony.xwork2.util.XWorkConverter" name="xwork1" class="com.opensymphony.xwork2.util.XWorkConverter" />  
  59.     <bean type="com.opensymphony.xwork2.util.XWorkConverter" name="struts" class="com.opensymphony.xwork2.util.AnnotationXWorkConverter" />  
  60.     <bean type="com.opensymphony.xwork2.TextProvider" name="xwork1" class="com.opensymphony.xwork2.TextProviderSupport" />  
  61.     <bean type="com.opensymphony.xwork2.TextProvider" name="struts" class="com.opensymphony.xwork2.TextProviderSupport" />  
  62.   
  63.     <!--  Only have static injections -->  
  64.     <bean class="com.opensymphony.xwork2.ObjectFactory" static="true" />  
  65.     <bean class="com.opensymphony.xwork2.util.XWorkConverter" static="true" />  
  66.     <bean class="com.opensymphony.xwork2.util.OgnlValueStack" static="true" />  
  67.     <bean class="com.opensymphony.xwork2.validator.ValidatorFileParser" static="true" />  
  68.     <bean class="org.apache.struts2.dispatcher.Dispatcher" static="true" />  
  69.     <bean class="org.apache.struts2.components.Include" static="true" />  
  70.     <bean class="org.apache.struts2.dispatcher.FilterDispatcher" static="true" />  
  71.     <bean class="org.apache.struts2.views.util.ContextUtil" static="true" />  
  72.     <bean class="org.apache.struts2.views.util.UrlHelper" static="true" />  
  73.   
  74.     <package name="struts-default" abstract="true">  
  75.         <result-types>  
  76.             <result-type name="chain" class="com.opensymphony.xwork2.ActionChainResult"/>  
  77.             <result-type name="dispatcher" class="org.apache.struts2.dispatcher.ServletDispatcherResult" default="true"/>  
  78.             <result-type name="freemarker" class="org.apache.struts2.views.freemarker.FreemarkerResult"/>  
  79.             <result-type name="httpheader" class="org.apache.struts2.dispatcher.HttpHeaderResult"/>  
  80.             <result-type name="redirect" class="org.apache.struts2.dispatcher.ServletRedirectResult"/>  
  81.             <result-type name="redirectAction" class="org.apache.struts2.dispatcher.ServletActionRedirectResult"/>  
  82.             <result-type name="stream" class="org.apache.struts2.dispatcher.StreamResult"/>  
  83.             <result-type name="velocity" class="org.apache.struts2.dispatcher.VelocityResult"/>  
  84.             <result-type name="xslt" class="org.apache.struts2.views.xslt.XSLTResult"/>  
  85.             <result-type name="plainText" class="org.apache.struts2.dispatcher.PlainTextResult" />  
  86.             <!-- Deprecated name form scheduled for removal in Struts 2.1.0. The camelCase versions are preferred. See ww-1707 -->  
  87.             <result-type name="redirect-action" class="org.apache.struts2.dispatcher.ServletActionRedirectResult"/>  
  88.             <result-type name="plaintext" class="org.apache.struts2.dispatcher.PlainTextResult" />  
  89.         </result-types>  
  90.   
  91.   
  92.         <interceptors>  
  93.             <interceptor name="alias" class="com.opensymphony.xwork2.interceptor.AliasInterceptor"/>  
  94.             <interceptor name="autowiring" class="com.opensymphony.xwork2.spring.interceptor.ActionAutowiringInterceptor"/>  
  95.             <interceptor name="chain" class="com.opensymphony.xwork2.interceptor.ChainingInterceptor"/>  
  96.             <interceptor name="conversionError" class="org.apache.struts2.interceptor.StrutsConversionErrorInterceptor"/>  
  97.             <interceptor name="cookie" class="org.apache.struts2.interceptor.CookieInterceptor"/>  
  98.             <interceptor name="createSession" class="org.apache.struts2.interceptor.CreateSessionInterceptor" />  
  99.             <interceptor name="debugging" class="org.apache.struts2.interceptor.debugging.DebuggingInterceptor" />  
  100.             <interceptor name="externalRef" class="com.opensymphony.xwork2.interceptor.ExternalReferencesInterceptor"/>  
  101.             <interceptor name="execAndWait" class="org.apache.struts2.interceptor.ExecuteAndWaitInterceptor"/>  
  102.             <interceptor name="exception" class="com.opensymphony.xwork2.interceptor.ExceptionMappingInterceptor"/>  
  103.             <interceptor name="fileUpload" class="org.apache.struts2.interceptor.FileUploadInterceptor"/>  
  104.             <interceptor name="i18n" class="com.opensymphony.xwork2.interceptor.I18nInterceptor"/>  
  105.             <interceptor name="logger" class="com.opensymphony.xwork2.interceptor.LoggingInterceptor"/>  
  106.             <interceptor name="modelDriven" class="com.opensymphony.xwork2.interceptor.ModelDrivenInterceptor"/>  
  107.             <interceptor name="scopedModelDriven" class="com.opensymphony.xwork2.interceptor.ScopedModelDrivenInterceptor"/>  
  108.             <interceptor name="params" class="com.opensymphony.xwork2.interceptor.ParametersInterceptor"/>  
  109.             <interceptor name="prepare" class="com.opensymphony.xwork2.interceptor.PrepareInterceptor"/>  
  110.             <interceptor name="staticParams" class="com.opensymphony.xwork2.interceptor.StaticParametersInterceptor"/>  
  111.             <interceptor name="scope" class="org.apache.struts2.interceptor.ScopeInterceptor"/>  
  112.             <interceptor name="servletConfig" class="org.apache.struts2.interceptor.ServletConfigInterceptor"/>  
  113.             <interceptor name="sessionAutowiring" class="org.apache.struts2.spring.interceptor.SessionContextAutowiringInterceptor"/>  
  114.             <interceptor name="timer" class="com.opensymphony.xwork2.interceptor.TimerInterceptor"/>  
  115.             <interceptor name="token" class="org.apache.struts2.interceptor.TokenInterceptor"/>  
  116.             <interceptor name="tokenSession" class="org.apache.struts2.interceptor.TokenSessionStoreInterceptor"/>  
  117.             <interceptor name="validation" class="org.apache.struts2.interceptor.validation.AnnotationValidationInterceptor"/>  
  118.             <interceptor name="workflow" class="com.opensymphony.xwork2.interceptor.DefaultWorkflowInterceptor"/>  
  119.             <interceptor name="store" class="org.apache.struts2.interceptor.MessageStoreInterceptor" />  
  120.             <interceptor name="checkbox" class="org.apache.struts2.interceptor.CheckboxInterceptor" />  
  121.             <interceptor name="profiling" class="org.apache.struts2.interceptor.ProfilingActivationInterceptor" />  
  122.             <interceptor name="roles" class="org.apache.struts2.interceptor.RolesInterceptor" />  
  123.   
  124.             <!-- Basic stack -->  
  125.             <interceptor-stack name="basicStack">  
  126.                 <interceptor-ref name="exception"/>  
  127.                 <interceptor-ref name="servletConfig"/>  
  128.                 <interceptor-ref name="prepare"/>  
  129.                 <interceptor-ref name="checkbox"/>  
  130.                 <interceptor-ref name="params"/>  
  131.                 <interceptor-ref name="conversionError"/>  
  132.             </interceptor-stack>  
  133.   
  134.             <!-- Sample validation and workflow stack -->  
  135.             <interceptor-stack name="validationWorkflowStack">  
  136.                 <interceptor-ref name="basicStack"/>  
  137.                 <interceptor-ref name="validation"/>  
  138.                 <interceptor-ref name="workflow"/>  
  139.             </interceptor-stack>  
  140.   
  141.             <!-- Sample file upload stack -->  
  142.             <interceptor-stack name="fileUploadStack">  
  143.                 <interceptor-ref name="fileUpload"/>  
  144.                 <interceptor-ref name="basicStack"/>  
  145.             </interceptor-stack>  
  146.   
  147.             <!-- Sample model-driven stack  -->  
  148.             <interceptor-stack name="modelDrivenStack">  
  149.                 <interceptor-ref name="modelDriven"/>  
  150.                 <interceptor-ref name="basicStack"/>  
  151.             </interceptor-stack>  
  152.   
  153.             <!-- Sample action chaining stack -->  
  154.             <interceptor-stack name="chainStack">  
  155.                 <interceptor-ref name="chain"/>  
  156.                 <interceptor-ref name="basicStack"/>  
  157.             </interceptor-stack>  
  158.   
  159.             <!-- Sample i18n stack -->  
  160.             <interceptor-stack name="i18nStack">  
  161.                 <interceptor-ref name="i18n"/>  
  162.                 <interceptor-ref name="basicStack"/>  
  163.             </interceptor-stack>  
  164.   
  165.             <!-- An example of the params-prepare-params trick. This stack  
  166.                  is exactly the same as the defaultStack, except that it  
  167.                  includes one extra interceptor before the prepare interceptor:  
  168.                  the params interceptor.  
  169.   
  170.                  This is useful for when you wish to apply parameters directly  
  171.                  to an object that you wish to load externally (such as a DAO  
  172.                  or database or service layer), but can't load that object  
  173.                  until at least the ID parameter has been loaded. By loading  
  174.                  the parameters twice, you can retrieve the object in the  
  175.                  prepare() method, allowing the second params interceptor to  
  176.                  apply the values on the object. -->  
  177.             <interceptor-stack name="paramsPrepareParamsStack">  
  178.                 <interceptor-ref name="exception"/>  
  179.                 <interceptor-ref name="alias"/>  
  180.                 <interceptor-ref name="params"/>  
  181.                 <interceptor-ref name="servletConfig"/>  
  182.                 <interceptor-ref name="prepare"/>  
  183.                 <interceptor-ref name="i18n"/>  
  184.                 <interceptor-ref name="chain"/>  
  185.                 <interceptor-ref name="modelDriven"/>  
  186.                 <interceptor-ref name="fileUpload"/>  
  187.                 <interceptor-ref name="checkbox"/>  
  188.                 <interceptor-ref name="staticParams"/>  
  189.                 <interceptor-ref name="params"/>  
  190.                 <interceptor-ref name="conversionError"/>  
  191.                 <interceptor-ref name="validation">  
  192.                     <param name="excludeMethods">input,back,cancel</param>  
  193.                 </interceptor-ref>  
  194.                 <interceptor-ref name="workflow">  
  195.                     <param name="excludeMethods">input,back,cancel</param>  
  196.                 </interceptor-ref>  
  197.             </interceptor-stack>  
  198.   
  199.             <!-- A complete stack with all the common interceptors in place.  
  200.                  Generally, this stack should be the one you use, though it  
  201.                  may do more than you need. Also, the ordering can be  
  202.                  switched around (ex: if you wish to have your servlet-related  
  203.                  objects applied before prepare() is called, you'd need to move  
  204.                  servlet-config interceptor up.  
  205.   
  206.                  This stack also excludes from the normal validation and workflow  
  207.                  the method names input, back, and cancel. These typically are  
  208.                  associated with requests that should not be validated.  
  209.                  -->  
  210.             <interceptor-stack name="defaultStack">  
  211.                 <interceptor-ref name="exception"/>  
  212.                 <interceptor-ref name="alias"/>  
  213.                 <interceptor-ref name="servletConfig"/>  
  214.                 <interceptor-ref name="prepare"/>  
  215.                 <interceptor-ref name="i18n"/>  
  216.                 <interceptor-ref name="chain"/>  
  217.                 <interceptor-ref name="debugging"/>  
  218.                 <interceptor-ref name="profiling"/>  
  219.                 <interceptor-ref name="scopedModelDriven"/>  
  220.                 <interceptor-ref name="modelDriven"/>  
  221.                 <interceptor-ref name="fileUpload"/>  
  222.                 <interceptor-ref name="checkbox"/>  
  223.                 <interceptor-ref name="staticParams"/>  
  224.                 <interceptor-ref name="params">  
  225.                   <param name="excludeParams">dojo\..*</param>  
  226.                 </interceptor-ref>  
  227.                 <interceptor-ref name="conversionError"/>  
  228.                 <interceptor-ref name="validation">  
  229.                     <param name="excludeMethods">input,back,cancel,browse</param>  
  230.                 </interceptor-ref>  
  231.                 <interceptor-ref name="workflow">  
  232.                     <param name="excludeMethods">input,back,cancel,browse</param>  
  233.                 </interceptor-ref>  
  234.             </interceptor-stack>  
  235.   
  236.             <!-- The completeStack is here for backwards compatibility for  
  237.                  applications that still refer to the defaultStack by the  
  238.                  old name -->  
  239.             <interceptor-stack name="completeStack">  
  240.                 <interceptor-ref name="defaultStack"/>  
  241.             </interceptor-stack>  
  242.   
  243.             <!-- Sample execute and wait stack.  
  244.                  Note: execAndWait should always be the *last* interceptor. -->  
  245.             <interceptor-stack name="executeAndWaitStack">  
  246.                 <interceptor-ref name="execAndWait">  
  247.                     <param name="excludeMethods">input,back,cancel</param>  
  248.                 </interceptor-ref>  
  249.                 <interceptor-ref name="defaultStack"/>  
  250.                 <interceptor-ref name="execAndWait">  
  251.                     <param name="excludeMethods">input,back,cancel</param>  
  252.                 </interceptor-ref>  
  253.             </interceptor-stack>  
  254.   
  255.             <!-- Deprecated name forms scheduled for removal in Struts 2.1.0. The camelCase versions are preferred. See ww-1707 -->  
  256.             <interceptor name="external-ref" class="com.opensymphony.xwork2.interceptor.ExternalReferencesInterceptor"/>  
  257.             <interceptor name="model-driven" class="com.opensymphony.xwork2.interceptor.ModelDrivenInterceptor"/>  
  258.             <interceptor name="static-params" class="com.opensymphony.xwork2.interceptor.StaticParametersInterceptor"/>  
  259.             <interceptor name="scoped-model-driven" class="com.opensymphony.xwork2.interceptor.ScopedModelDrivenInterceptor"/>  
  260.             <interceptor name="servlet-config" class="org.apache.struts2.interceptor.ServletConfigInterceptor"/>  
  261.             <interceptor name="token-session" class="org.apache.struts2.interceptor.TokenSessionStoreInterceptor"/>  
  262.   
  263.        </interceptors>  
  264.   
  265.         <default-interceptor-ref name="defaultStack"/>  
  266.     </package>  
  267.   
  268. </struts>  


二、struts2配置文件中常用常量配置列表: 
<constant name="struts.i18n.encoding" value="UTF-8" /> 
指定Web应用的默认编码集,相当于调用HttpServletRequest的setCharacterEncoding方法 

<constant name="struts.action.extension" value="do" /> 
该属性指定需要Struts 2处理的请求后缀,该属性的默认值是action,即所有匹配*.action的请求都由Struts 2处理。    如果用户需要指定多个请求后缀,则多个后缀之间以英文逗号(,)隔开。   

<constant name="struts.serve.static.browserCache " value="false" /> 
设置浏览器是否缓存静态内容,默认值为true,开发阶段最好false 

<constant name="struts.configuration.xml.reload" value="true" /> 
当struts的配置文件修改后,系统是否自动重新加载该文件,默认值为false,开发阶段最好true 

<constant name="struts.devMode" value="true" /> 
开发模式下设为true,这样可以打印出更详细的错误信息 

<constant name="struts.enable.DynamicMethodInvocation" value="false" /> 
动态方法调用,可以解决多个请求对应一个Servlet的问题,后面详细讲解,默认为true,关闭则设为false. 

这里只是列举了一些常用的开关,当然还有许多其他的开关,后面的学习中会逐渐介绍,大家在这里先了解一下. 

以下是从网上摘得的,比较全的一个资料 
struts.serve.static.browserCache 该属性设置浏览器是否缓存静态内容。当应用处于开发阶段时,我们希望每次请求都获得服务器的最新响应,则可设置该属性为false。 

struts.enable.DynamicMethodInvocation 该属性设置Struts 2是否支持动态方法调用,该属性的默认值是true。如果需要关闭动态方法调用,则可设置该属性为false。 

struts.enable.SlashesInActionNames 该属性设置Struts 2是否允许在Action名中使用斜线,该属性的默认值是false。如果开发者希望允许在Action名中使用斜线,则可设置该属性为true。 

struts.tag.altSyntax 该属性指定是否允许在Struts 2标签中使用表达式语法,因为通常都需要在标签中使用表达式语法,故此属性应该设置为true,该属性的默认值是true。 

struts.devMode该属性设置Struts 2应用是否使用开发模式。如果设置该属性为true,则可以在应用出错时显示更多、更友好的出错提示。该属性只接受true和flase两个值,该属性的默认值是false。通常,应用在开发阶段,将该属性设置为true,当进入产品发布阶段后,则该属性设置为false。 

struts.i18n.reload该属性设置是否每次HTTP请求到达时,系统都重新加载资源文件。该属性默认值是false。在开发阶段将该属性设置为true会更有利于开发,但在产品发布阶段应将该属性设置为false。 

提示 开发阶段将该属性设置了true,将可以在每次请求时都重新加载国际化资源文件,从而可以让开发者看到实时开发效果;产品发布阶段应该将该属性设置为false,是为了提供响应性能,每次请求都需要重新加载资源文件会大大降低应用的性能。 

struts.ui.theme该属性指定视图标签默认的视图主题,该属性的默认值是xhtml。 

struts.ui.templateDir该属性指定视图主题所需要模板文件的位置,该属性的默认值是template,即默认加载template路径下的模板文件。 

struts.ui.templateSuffix该属性指定模板文件的后缀,该属性的默认属性值是ftl。该属性还允许使用ftl、vm或jsp,分别对应FreeMarker、Velocity和JSP模板。 

struts.configuration.xml.reload该属性设置当struts.xml文件改变后,系统是否自动重新加载该文件。该属性的默认值是false。 

struts.velocity.configfile该属性指定Velocity框架所需的velocity.properties文件的位置。该属性的默认值为velocity.properties。 

struts.velocity.contexts该属性指定Velocity框架的Context位置,如果该框架有多个Context,则多个Context之间以英文逗号(,)隔开。 

struts.velocity.toolboxlocation该属性指定Velocity框架的toolbox的位置。 

struts.url.http.port该属性指定Web应用所在的监听端口。该属性通常没有太大的用户,只是当Struts 2需要生成URL时(例如Url标签),该属性才提供Web应用的默认端口。 

struts.url.https.port该属性类似于struts.url.http.port属性的作用,区别是该属性指定的是Web应用的加密服务端口。 

struts.url.includeParams该属性指定Struts 2生成URL时是否包含请求参数。该属性接受none、get和all三个属性值,分别对应于不包含、仅包含GET类型请求参数和包含全部请求参数。 


struts.custom.i18n.resources该属性指定Struts 2应用所需要的国际化资源文件,如果有多份国际化资源文件,则多个资源文件的文件名以英文逗号(,)隔开。 


struts.dispatcher.parametersWorkaround 对于某些Java EE服务器,不支持HttpServlet Request调用getParameterMap()方法,此时可以设置该属性值为true来解决该问题。该属性的默认值是false。对于WebLogic、Orion和OC4J服务器,通常应该设置该属性为true。 

struts.freemarker.manager.classname 该属性指定Struts 2使用的FreeMarker管理器。该属性的默认值是org.apache.struts2.views.freemarker.FreemarkerManager,这是Struts 2内建的FreeMarker管理器。 

struts.freemarker.wrapper.altMap该属性只支持true和false两个属性值,默认值是true。通常无需修改该属性值。 

struts.xslt.nocache 该属性指定XSLT Result是否使用样式表缓存。当应用处于开发阶段时,该属性通常被设置为true;当应用处于产品使用阶段时,该属性通常被设置为false。 

struts.configuration.files 该属性指定Struts 2框架默认加载的配置文件,如果需要指定默认加载多个配置文件,则多个配置文件的文件名之间以英文逗号(,)隔开。该属性的默认值为struts-default.xml,struts-plugin.xml,struts.xml,看到该属性值,读者应该明白为什么Struts 2框架默认加载struts.xml文件了。 

三、struts2框架中的常识介绍 
1、在请求时,路径后的后缀action可要可不要,即下面的两种请求都是可以的 
http://localhost:8080/Struts2/chapter1/HelloWorld 
http://localhost:8080/Struts2/chapter1/HelloWorld.action 
2、 
<action name="Login"> 
  <result>/WEB-INF/JspPage/chapter1/Login.jsp</result> 
</action> 
我们发现,当我们请求的路径为http://localhost:8080/Struts2/chapter1/Login时,同样可以实现页面的跳转,这是怎么回事呢? 
如果没有为action指定class,默认是ActionSupport类<action name="Login"> 
相当于 
<action name="Login" class="com.opensymphony.xwork2.ActionSupport"> 
如果没有为action指定method,默认执行action中的execute()方法 
<action name="Login">相当于 
<action name="Login" class="com.opensymphony.xwork2.ActionSupport" 
method="execute"> 
如果没有指定result的name属性,默认值为success. 
<result>相当于<result name="success"> 

四、ActionSupport这个类到底是个什么类,为什么自己写的action都要默认继承它? 
struts2不要求我们自己设计的action类继承任何的struts基类或struts接口,但是我们为了方便实现我们自己的action,大多数情况下都会继承com.opensymphony.xwork2.ActionSupport类,并重写此类里的public String execute() throws Exception方法。因为此类中实现了很多的实用借口,提供了很多默认方法,这些默认方法包括国际化信息的方法、默认的处理用户请求的方法等,这样可以大大的简化Acion的开发。 

下面贴上ActionSupport.action的源代码 
Java代码  收藏代码
  1. // Decompiled by Jad v1.5.8e2. Copyright 2001 Pavel Kouznetsov.  
  2. // Jad home page: http://kpdus.tripod.com/jad.html  
  3. // Decompiler options: packimports(3) fieldsfirst ansi space   
  4. // Source File Name:   ActionSupport.java  
  5.   
  6. package com.opensymphony.xwork2;  
  7.   
  8. import com.opensymphony.xwork2.util.ValueStack;  
  9. import java.io.Serializable;  
  10. import java.util.*;  
  11. import org.apache.commons.logging.Log;  
  12. import org.apache.commons.logging.LogFactory;  
  13.   
  14. // Referenced classes of package com.opensymphony.xwork2:  
  15. //          TextProviderFactory, ValidationAwareSupport, Action, Validateable,   
  16. //          ValidationAware, TextProvider, LocaleProvider, ActionContext  
  17.   
  18. public class ActionSupport  
  19.     implements Action, Validateable, ValidationAware, TextProvider, LocaleProvider, Serializable  
  20. {  
  21.   
  22.     protected static Log LOG = LogFactory.getLog(com/opensymphony/xwork2/ActionSupport);  
  23.     private final transient TextProvider textProvider = (new TextProviderFactory()).createInstance(getClass(), this);  
  24.     private final ValidationAwareSupport validationAware = new ValidationAwareSupport();  
  25.   
  26.     public ActionSupport()  
  27.     {  
  28.     }  
  29.   
  30.     public void setActionErrors(Collection errorMessages)  
  31.     {  
  32.         validationAware.setActionErrors(errorMessages);  
  33.     }  
  34.   
  35.     public Collection getActionErrors()  
  36.     {  
  37.         return validationAware.getActionErrors();  
  38.     }  
  39.   
  40.     public void setActionMessages(Collection messages)  
  41.     {  
  42.         validationAware.setActionMessages(messages);  
  43.     }  
  44.   
  45.     public Collection getActionMessages()  
  46.     {  
  47.         return validationAware.getActionMessages();  
  48.     }  
  49.   
  50.     /** 
  51.      * @deprecated Method getErrorMessages is deprecated 
  52.      */  
  53.   
  54.     public Collection getErrorMessages()  
  55.     {  
  56.         return getActionErrors();  
  57.     }  
  58.   
  59.     /** 
  60.      * @deprecated Method getErrors is deprecated 
  61.      */  
  62.   
  63.     public Map getErrors()  
  64.     {  
  65.         return getFieldErrors();  
  66.     }  
  67.   
  68.     public void setFieldErrors(Map errorMap)  
  69.     {  
  70.         validationAware.setFieldErrors(errorMap);  
  71.     }  
  72.   
  73.     public Map getFieldErrors()  
  74.     {  
  75.         return validationAware.getFieldErrors();  
  76.     }  
  77.   
  78.     public Locale getLocale()  
  79.     {  
  80.         return ActionContext.getContext().getLocale();  
  81.     }  
  82.   
  83.     public String getText(String aTextName)  
  84.     {  
  85.         return textProvider.getText(aTextName);  
  86.     }  
  87.   
  88.     public String getText(String aTextName, String defaultValue)  
  89.     {  
  90.         return textProvider.getText(aTextName, defaultValue);  
  91.     }  
  92.   
  93.     public String getText(String aTextName, String defaultValue, String obj)  
  94.     {  
  95.         return textProvider.getText(aTextName, defaultValue, obj);  
  96.     }  
  97.   
  98.     public String getText(String aTextName, List args)  
  99.     {  
  100.         return textProvider.getText(aTextName, args);  
  101.     }  
  102.   
  103.     public String getText(String key, String args[])  
  104.     {  
  105.         return textProvider.getText(key, args);  
  106.     }  
  107.   
  108.     public String getText(String aTextName, String defaultValue, List args)  
  109.     {  
  110.         return textProvider.getText(aTextName, defaultValue, args);  
  111.     }  
  112.   
  113.     public String getText(String key, String defaultValue, String args[])  
  114.     {  
  115.         return textProvider.getText(key, defaultValue, args);  
  116.     }  
  117.   
  118.     public String getText(String key, String defaultValue, List args, ValueStack stack)  
  119.     {  
  120.         return textProvider.getText(key, defaultValue, args, stack);  
  121.     }  
  122.   
  123.     public String getText(String key, String defaultValue, String args[], ValueStack stack)  
  124.     {  
  125.         return textProvider.getText(key, defaultValue, args, stack);  
  126.     }  
  127.   
  128.     public ResourceBundle getTexts()  
  129.     {  
  130.         return textProvider.getTexts();  
  131.     }  
  132.   
  133.     public ResourceBundle getTexts(String aBundleName)  
  134.     {  
  135.         return textProvider.getTexts(aBundleName);  
  136.     }  
  137.   
  138.     public void addActionError(String anErrorMessage)  
  139.     {  
  140.         validationAware.addActionError(anErrorMessage);  
  141.     }  
  142.   
  143.     public void addActionMessage(String aMessage)  
  144.     {  
  145.         validationAware.addActionMessage(aMessage);  
  146.     }  
  147.   
  148.     public void addFieldError(String fieldName, String errorMessage)  
  149.     {  
  150.         validationAware.addFieldError(fieldName, errorMessage);  
  151.     }  
  152.   
  153.     public String input()  
  154.         throws Exception  
  155.     {  
  156.         return "input";  
  157.     }  
  158.   
  159.     public String doDefault()  
  160.         throws Exception  
  161.     {  
  162.         return "success";  
  163.     }  
  164.   
  165.     public String execute()  
  166.         throws Exception  
  167.     {  
  168.         return "success";  
  169.     }  
  170.   
  171.     public boolean hasActionErrors()  
  172.     {  
  173.         return validationAware.hasActionErrors();  
  174.     }  
  175.   
  176.     public boolean hasActionMessages()  
  177.     {  
  178.         return validationAware.hasActionMessages();  
  179.     }  
  180.   
  181.     public boolean hasErrors()  
  182.     {  
  183.         return validationAware.hasErrors();  
  184.     }  
  185.   
  186.     public boolean hasFieldErrors()  
  187.     {  
  188.         return validationAware.hasFieldErrors();  
  189.     }  
  190.   
  191.     public void clearErrorsAndMessages()  
  192.     {  
  193.         validationAware.clearErrorsAndMessages();  
  194.     }  
  195.   
  196.     public void validate()  
  197.     {  
  198.     }  
  199.   
  200.     public Object clone()  
  201.         throws CloneNotSupportedException  
  202.     {  
  203.         return super.clone();  
  204.     }  
  205.   
  206.     public void pause(String s)  
  207.     {  
  208.     }  
  209.   
  210. }