struts.xml配置文件详解

Struts2框架的核心配置文件是struts.xml文件,该文件主要用来配置Action和请求间的对应关系。

一、<package>的配置

Struts2框架的核心组件是Action和拦截器,它使用包来管理Action和拦截器。每个包就是多个Action、多个拦截器、多个拦截器引用的集合。在struts.xml文件中,package元素用于定义包配置,package元素常用的属性如下:

name:必填属性,它是指定该包的名字,此名字是该包被其他包引用的Key;

namespace:可选属性,该属性定义了该包的命名空间;namespace属性与action标签的name属性共同决定了访问路径。namespace一般有三种配置:

(1)默认的名称空间:namespace=“”

(2)根名称空间:namespace="/"

(3)带名称的名称空间:namespace="/demo1"

extends:可选属性,指定该包继承的包。继承其中的Action定义、拦截器定义等;通常该属性值设置为struts-default,这样该包中的Action就具有了Struts2框架默认的拦截器功能。

abstract:可选属性,它指定该包是否是一个抽象包,抽象包中不能含有Action的定义。

示例:

<package name="deviceManagement" extends="struts-default, json-default" namespace="/deviceManagement">

二、<Action>的配置

Action映射是框架中的“基本工作单元”。Action映射就是将一个请求的URL映射到一个Action类,当一个请求匹配某个Action名称时,框架就使用这个映射来确定如何处理请求。在struts.xml文件中,通过<action>元素对请求的Action和Action类进行配置。<Action>元素中共有四个属性,详解如下:

name:必填属性,标识Action,指定了Action所处理的请求的URI;

class:可选属性,指定Action对应的Action类的全路径;

method:可选属性,指定请求Action时调用的方法,默认的是execute()方法;

converter:可选属性,指定类型转换器的类。

示例:

<action name="getLog" class="logAction" method="getLog">

三、结果页面的配置

使用<result>元素来配置Result逻辑视图与物理视图之间的映射,<result>元素有name和type属性,但是这两种属性都不是必选的。

name属性:指定逻辑视图的名称,默认值为success

type属性:指定返回的视图资源的类型,默认值为dispatcher

<struts>
	<!-- 配置一个包:package -->
	<package name="demo1" extends="struts-default" namespace="/">
		<!-- 配置Action -->
		<action name="strutsDemo1" class="com.zju.action.StrutsDemo1">
			<!-- 配置result结果页面跳转 -->
			<result name="success">/demo2.jsp</result>
		</action>
	</package>    
</struts>

在结果页面的配置中,Struts2有两种配置方式,一种称为全局结果页面,另外一种称为局部结果页面。全局结果是指在这个包下的所有返回相同字符串的值,都可以跳转到这个页面。局部结果是指在某个Action中返回的字符串的值,会向这个页面进行跳转。

全局结果页面示例:

<global-results>
    <result name="success">/success.jsp</result>
</global-results>

局部结果页面示例:

<action name="strutsDemo1" class="com.zju.action.StrutsDemo1">
	<!-- 配置result结果页面跳转 -->
	<result name="success" type="diapatcher">success.jsp</result>
</action>

在Struts2中,当框架调用Action对请求进行处理后,就要向用户呈现一个结果视图。在Struts2中,预定义了ResultType,其实就是定义了多种展示结果的技术。Struts2把内置的<result-type>都放在struts-default包中,struts-default包就是配置包的父包。

四、Struts2常量的配置

Struts2常量大多在默认的配置文件中已经配置好了,但根据用户的需求不同,开发的要求也不同,可能需要修改这些常量值,修改的方法就是在配置文件中对常量进行重新配置。Struts2常量配置共有三种方式:

(1)在struts.xml文件中使用<constant>元素配置常量;---最常用的

(2)在struts.properties文件中配置常量;

(3)在web.xml文件中通过<init-param>元素进行常量的配置。

在此只讲解常用的用struts.xml中配置常量的方式:

<constant>元素中包含两个属性:name和value。

<!-- 设置struts2默认的ObjectFactory为spring -->
<constant name="struts.objectFactory" value="spring" />
<!-- struts2中解决前台传到后台中文乱码问题,注意:前台尽量用post提交 -->
<constant name="struts.i18n.encoding" value="UTF-8" />
<!-- 开发模式下,struts.xml配置文件修改无需重启服务器 -->
<constant name="struts.devMode" value="true" />
<!-- 设置上传文件大小的限制为20M,默认为2M -->
<constant name="struts.multipart.maxSize" value="209715200" />
<constant name="struts.multipart.saveDir" value="/temp"></constant>

Struts2所支持的常量数量非常多,在struts-core-***.jar核心包的压缩文件的org\apache\struts2路径下有一个default.properties文件,该文件里为Struts2的所有常量都指定了默认值。

default.properties的具体内容如下:

#
# $Id: default.properties 1532467 2013-10-15 18:20:43Z 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 = false

### 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

### Disables support for action: prefix
struts.mapper.action.prefix.enabled = false

### Blocks access to actions in other namespace than current with action: prefix
struts.mapper.action.prefix.crossNamespaces = 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, when set to 0 SoftCacheStorage which performs better in heavy loaded application
### check WW-3766 for more details
struts.freemarker.mru.max.strong.size=0

### 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

五、分模块开发的配置

<include>元素用来在一个struts.xml配置文件中包含其他的配置文件,包含配置体现的是软件工程中的“分而治之”原则。Struts2允许将一个配置文件拆分为多个配置文件,从而提高文件的可读性。在配置<include>元素时,需要指定一个必须的file属性,该属性指定了被包含配置文件的文件名。Struts2的所有配置文件都放在WEB项目的WEB-INF/classes路径下。

下面通过一段代码来说明<include>的用法:

<struts>
    <!-- 包含了4个配置文件 -->
    <!-- 不指定路径,默认是在src下时的方式 -->
    <include file="struts-student.xml">
    <include file="struts-teacher.xml">
    <include file="struts-school.xml">
    <!-- 配置文件再具体包中的加载方式 -->
    <include file="zju/action/struts-staff.xml">
</struts>

所以通过加载struts.xml文件,也就将所有的配置文件都加载了。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值