Struts2中的 配置文件

来源:互联网 发布:剪铃声软件 编辑:程序博客网 时间:2024/06/08 01:04
struts2中涉及到的配置文件有:
web.xml、struts.xml、struts.properties、default.properties、struts-default.xml


web.xml


Struts2与Web应用的整合需要借助于web.xml,通常,所有的MVC框架都需要Web应用加载一个核心控制器。struts2的核心控制器设计成一个Filter,为了让Web应用加载该Filter,需要在web.xml中配置该Filter。


<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" 
    xmlns="http://java.sun.com/xml/ns/javaee" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
    http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
    
  <filter>
      <filter-name>struts2</filter-name>
      <filter-class>org.apache.struts2.dispatcher.ng.filter
                        .StrutsPrepareAndExecuteFilter
        </filter-class>
      <init-param>
          .....
      </init-param>
  </filter>    
  <filter-mapping>
      <filter-name>struts2</filter-name>
      <url-pattern>/*</url-pattern>
  </filter-mapping>
  <welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
  </welcome-file-list>
</web-app>
通常该Filter拦截所有的用户请求,如果Web应用使用Servlet2.4以前的规范,不会自动加载Struts2框架的标签文件(struts-tags.tld),必须手动加载。该标签文件位于struts2-core-x.x.x.jar下的META-INF下




struts.xml(接触最多)


该文件是struts2的核心配置文件,主要用于自定义配置其业务控制器Action、Interceptor、Result等。该文件是用DTD来验证的,可以通过其DTD验证文件(struts2-core-x.x.x.jar/struts-2.3.dtd)查看struts.xml中可以填写哪些标签。默认情况下struts2框架自动加载放在WEB-INF/classes路径下的struts.xml文件。在应用规模增大的时候,为了避免struts.xml文件过于臃肿,可以将其按模块分为多个配置文件,然后在struts.xml文件中包含这多个文件。该文件通常要extends于struts-default.xml使其具有struts2默认定义的一些行为。


<?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>
    <!--引入其它配置文件-->
    <include file="struts.xml" />
    
    <package name="default" namespace="/card" extends="struts-default">
        ...
    </package>
</struts>
除此之外,Struts2还提供了一种插件式的方式来管理配置文件。 


struts.properties


该文件是struts2框架的全局属性文件,标准的properties文件,包含系列的key-value对。该文件通常存放于WEB-INF/classes路径下。 


Struts2提供了三种方式来管理Struts2的属性: 
1、通过struts.properties 
2、在struts.xml中配置constant元素。 
3、在web.xml中struts2 filter的<init-param>元素 


例如: 
struts.properties中的如下配置 


struts.i18n.encoding=UTF-8
相当于struts.xml中的如下配置 


<constant name="struts.i18n.encoding" value="true" />
相当于web.xml中的如下配置 


<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>true</param-value>
    </init-param>
  </filter>


default.properties 


该文件位于struts2-core-x.x.x.jar包下的org.apache.struts2包中。这个文件提供了一种更改框架默认行为方式的机制。一般情况下,不是打算让调试更加方便,根本无须修改这个文件。在struts.properties文件中定义的属性都可以在web.xml文件的init-param标签中定义,或者通过struts.xml文件中的constant标签修改,
还可以在类路径下直接定义一个struts.properties修改原文件中属性。该文件是一个只读文件,无法直接修改。 


默认的default.properties 
#
# $Id: default.properties 1384108 2012-09-12 20:18:45Z lukaszlenart $
#
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements.  See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership.  The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License.  You may obtain a copy of the License at
#
#  http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied.  See the License for the
# specific language governing permissions and limitations
# under the License.
#
### START SNIPPET: complete_file


### Struts default properties
###(can be overridden by a struts.properties file in the root of the classpath)
###


### Specifies the Configuration used to configure Struts
### one could extend org.apache.struts2.config.Configuration
### to build one's customize way of getting the configurations parameters into Struts
# struts.configuration=org.apache.struts2.config.DefaultConfiguration


### This can be used to set your default locale and encoding scheme
# struts.locale=en_US
struts.i18n.encoding=UTF-8


### if specified, the default object factory can be overridden here
### Note: short-hand notation is supported in some cases, such as "spring"
###       Alternatively, you can provide a com.opensymphony.xwork2.ObjectFactory subclass name here
# struts.objectFactory = spring


### specifies the autoWiring logic when using the SpringObjectFactory.
### valid values are: name, type, auto, and constructor (name is the default)
struts.objectFactory.spring.autoWire = name


### indicates to the struts-spring integration if Class instances should be cached
### this should, until a future Spring release makes it possible, be left as true
### unless you know exactly what you are doing!
### valid values are: true, false (true is the default)
struts.objectFactory.spring.useClassCache = true


### ensures the autowire strategy is always respected.
### valid values are: true, false (false is the default)
struts.objectFactory.spring.autoWire.alwaysRespect = false


### if specified, the default object type determiner can be overridden here
### Note: short-hand notation is supported in some cases, such as "tiger" or "notiger"
###       Alternatively, you can provide a com.opensymphony.xwork2.util.ObjectTypeDeterminer implementation name here
### Note: By default, com.opensymphony.xwork2.util.DefaultObjectTypeDeterminer is used which handles type detection
###       using generics. com.opensymphony.xwork2.util.GenericsObjectTypeDeterminer was deprecated since XWork 2, it's
###       functions are integrated in DefaultObjectTypeDeterminer now.
###       To disable tiger support use the "notiger" property value here.
#struts.objectTypeDeterminer = tiger
#struts.objectTypeDeterminer = notiger


### Parser to handle HTTP POST requests, encoded using the MIME-type multipart/form-data
# struts.multipart.parser=cos
# struts.multipart.parser=pell
struts.multipart.parser=jakarta
# uses javax.servlet.context.tempdir by default
struts.multipart.saveDir=
struts.multipart.maxSize=2097152


### Load custom property files (does not override struts.properties!)
# struts.custom.properties=application,org/apache/struts2/extension/custom


### How request URLs are mapped to and from actions
#struts.mapper.class=org.apache.struts2.dispatcher.mapper.DefaultActionMapper


### Used by the DefaultActionMapper
### You may provide a comma separated list, e.g. struts.action.extension=action,jnlp,do
### The blank extension allows you to match directory listings as well as pure action names
### without interfering with static resources, which can be specified as an empty string
### prior to a comma e.g. struts.action.extension=, or struts.action.extension=x,y,z,,
struts.action.extension=action,,


### Used by FilterDispatcher
### If true then Struts serves static content from inside its jar.
### If false then the static content must be available at <context_path>/struts
struts.serve.static=true


### Used by FilterDispatcher
### This is good for development where one wants changes to the static content be
### fetch on each request.
### NOTE: This will only have effect if struts.serve.static=true
### If true -> Struts will write out header for static contents such that they will
###             be cached by web browsers (using Date, Cache-Content, Pragma, Expires)
###             headers).
### If false -> Struts will write out header for static contents such that they are
###            NOT to be cached by web browser (using Cache-Content, Pragma, Expires
###            headers)
struts.serve.static.browserCache=true


### Set this to false if you wish to disable implicit dynamic method invocation
### via the URL request. This includes URLs like foo!bar.action, as well as params
### like method:bar (but not action:foo).
### An alternative to implicit dynamic method invocation is to use wildcard
### mappings, such as <action name="*/*" method="{2}" class="actions.{1}">
struts.enable.DynamicMethodInvocation = true


### Set this to true if you wish to allow slashes in your action names.  If false,
### Actions names cannot have slashes, and will be accessible via any directory
### prefix.  This is the traditional behavior expected of WebWork applications.
### Setting to true is useful when you want to use wildcards and store values
### in the URL, to be extracted by wildcard patterns, such as
### <action name="*/*" method="{2}" class="actions.{1}"> to match "/foo/edit" or
### "/foo/save".
struts.enable.SlashesInActionNames = false


### use alternative syntax that requires %{} in most places
### to evaluate expressions for String attributes for tags
struts.tag.altSyntax=true


### when set to true, Struts will act much more friendly for developers. This
### includes:
### - struts.i18n.reload = true
### - struts.configuration.xml.reload = true
### - raising various debug or ignorable problems to errors
###   For example: normally a request to foo.action?someUnknownField=true should
###                be ignored (given that any value can come from the web and it
###                should not be trusted). However, during development, it may be
###                useful to know when these errors are happening and be told of
###                them right away.
struts.devMode = false


### when set to true, resource bundles will be reloaded on _every_ request.
### this is good during development, but should never be used in production
struts.i18n.reload=false


### Standard UI theme
### Change this to reflect which path should be used for JSP control tag templates by default
struts.ui.theme=xhtml
struts.ui.templateDir=template
#sets the default template type. Either ftl, vm, or jsp
struts.ui.templateSuffix=ftl


### Configuration reloading
### This will cause the configuration to reload struts.xml when it is changed
struts.configuration.xml.reload=false


### Location of velocity.properties file.  defaults to velocity.properties
struts.velocity.configfile = velocity.properties


### Comma separated list of VelocityContext classnames to chain to the StrutsVelocityContext
struts.velocity.contexts =


### Location of the velocity toolbox
struts.velocity.toolboxlocation=


### used to build URLs, such as the UrlTag
struts.url.http.port = 80
struts.url.https.port = 443
### possible values are: none, get or all
struts.url.includeParams = none


### Load custom default resource bundles
# struts.custom.i18n.resources=testmessages,testmessages2


### workaround for some app servers that don't handle HttpServletRequest.getParameterMap()
### often used for WebLogic, Orion, and OC4J
struts.dispatcher.parametersWorkaround = false


### configure the Freemarker Manager class to be used
### Allows user to plug-in customised Freemarker Manager if necessary
### MUST extends off org.apache.struts2.views.freemarker.FreemarkerManager
#struts.freemarker.manager.classname=org.apache.struts2.views.freemarker.FreemarkerManager


### Enables caching of FreeMarker templates
### Has the same effect as copying the templates under WEB_APP/templates
struts.freemarker.templatesCache=false


### Enables caching of models on the BeanWrapper
struts.freemarker.beanwrapperCache=false


### See the StrutsBeanWrapper javadocs for more information
struts.freemarker.wrapper.altMap=true


### maxStrongSize for MruCacheStorage for freemarker
struts.freemarker.mru.max.strong.size=100


### configure the XSLTResult class to use stylesheet caching.
### Set to true for developers and false for production.
struts.xslt.nocache=false


### Whether to always select the namespace to be everything before the last slash or not
struts.mapper.alwaysSelectFullNamespace=false


### Whether to allow static method access in OGNL expressions or not
struts.ognl.allowStaticMethodAccess=false


### Whether to throw a RuntimeException when a property is not found
### in an expression, or when the expression evaluation fails
struts.el.throwExceptionOnFailure=false


### Logs as Warnings properties that are not found (very verbose)
struts.ognl.logMissingProperties=false


### Caches parsed OGNL expressions, but can lead to memory leaks
### if the application generates a lot of different expressions
struts.ognl.enableExpressionCache=true


### Indicates if Dispatcher should handle unexpected exceptions by calling sendError()
### or simply rethrow it as a ServletException to allow future processing by other frameworks like Spring Security
struts.handle.exception=true
### END SNIPPET: complete_file


struts-default.xml 


该文件位于struts2-core-x.x.x.jar文件下。是struts2框架默认加载的配置文件。它定义struts2一些核心的bean和拦截器。我们自己定义的struts.xml通过继承struts-default.xml使其具有默认的一些行为。 
<package name="default" namespace="/" extends="struts-default">
源文件: 
<?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>


    <!--一系列的bean-->
    <bean class="com.opensymphony.xwork2.ObjectFactory" name="xwork" />


    ...............


        <!--可用的结果类型-->
        <package name="struts-default" abstract="true">
        <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-types>


        <interceptors>


            <!--一系列默认的拦截器-->
             ...........
            <!--一系列默认的拦截器栈-->
             ............ 
             <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="multiselect"/>
                <interceptor-ref name="staticParams"/>
                <interceptor-ref name="actionMappingParams"/>
                <interceptor-ref name="params">
                    <param name="excludeParams">dojo\..*,^struts\..*,
                        ^session\..*,^request\..*,^application\..*,
                        ^servlet(Request|Response)\..*,parameters\...*</param>
                </interceptor-ref>
                <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-stack>
            ...............
         </interceptors>
         <!--指定defalutStack拦截器栈为默认的拦截器栈-->
        <default-interceptor-ref name="defaultStack"/>


        <default-class-ref class="com.opensymphony.xwork2.ActionSupport" />
    </package>
</struts>




Struts2配置文件加载顺序:


1.struts-default.xml
2.struts-plugin.xml
3.struts.xml
4.struts.properties
5.web.xml
越往后,级别越高。后面配置文件会覆盖前面配置文件中相同的配置。


服务器启动时的读取信息:


信息: Parsing configuration file [struts-default.xml]
2013-1-11 14:29:31 com.opensymphony.xwork2.util.logging.jdk.JdkLogger info
信息: Unable to locate configuration files of the name struts-plugin.xml, skipping
2013-1-11 14:29:31 com.opensymphony.xwork2.util.logging.jdk.JdkLogger info
信息: Parsing configuration file [struts-plugin.xml]
2013-1-11 14:29:31 com.opensymphony.xwork2.util.logging.jdk.JdkLogger info
信息: Parsing configuration file [struts.xml]
0 0