Struts2系列:(3)Action的访问路径和缺省后缀

在第(1)节“入门”的时候,做了一个简单的案例。

在第(2)节“Struts配置文件”,对struts.xml文件中的package、action和result进行了简单介绍。

在本节中,则对struts.xml中的配置和uri之间的映射做一个介绍。

1、Action访问路径

struts2中,调用action的URL路径= 包的命名空间+"/"+action的名称

例如: 访问StudentAction的URL路径为: /test/studentAction.action

 <package name="test" namespace=“/test“   extends="struts-default">
      <action name="studentAction" class="cn.rupeng.StudentAction">
           <result name="success" >/success.jsp</result>
      </action>
 </package>

2、Action访问路径的匹配顺序

根据uri的namespace从长到短的顺序去匹配package

举例:如url:  http://ip/strutsapp/path1/path2/path3/myAction.action

1.获取请求路径uri

strutsapp/path1/path2/path3/myAction.action

2.寻找namespace为/path1/path2/path3的package,

如存在该package,则从该package中寻找名为myAction的action,如不存在继续寻找;

3.寻找namespace为/path1/path2的package,

如存在该package,则从该package中寻找名为myAction的action,如不存在继续寻找;

4.寻找namespace为/path1的package,

如存在该package,则从该package中寻找名为myAction的action;如不存在,就去默认的namaspace的package下面去找名为myAction的action(默认命名空间为“/” )。

如果最后还找不到,则提示找不到action。

3、Action请求处理的缺省后缀

StrutsPrepareAndExecuteFilter是Struts 2框架核心控制器,负责拦截由<url-pattern>/*</url-pattern>指定所有用户请求。

默认情况下,如用户请求路径不带后缀或者后缀以.action结尾,请求将被转入Struts 2框架处理,否则Struts 2框架将略过该请求。

配置文件:struts2-core-2.x.x.x.jar包下的org.apache.struts2/default.properties文件定义的常量决定struts.action.extension=action

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

修改默认处理后缀,可以在struts.xml中添加常量”struts.action.extension“进行修改的,如:

<struts>

<constant name="struts.action.extension" value="do,go"/>

</struts>

4、Struts2常量

4.1、配置Struts2常量的位置

常量可以在struts.xml或struts.properties中配置,推荐在struts.xml中配置:

在struts.xml文件中配置常量

<struts>

<constant name="struts.action.extension" value="go"/>

</struts>

在struts.properties中配置常量 (struts.properties文件放置在src下)

struts.action.extension=do

4.2、Struts2加载常量的顺序

因常量可在多个配置文件中进行定义,Struts2加载常量的顺序:

1 struts-default.xml

2 struts-plugin.xml

3 struts.xml

4 struts.properties

5 web.xml

如在多个文件中配置同一个常量,则后一个文件中配置的常量值会覆盖前一个文件配置的常量值.

4.3、一些经常使用的常量

(1)指定默认编码集,作用于HttpServletRequest的setCharacterEncoding方法和freemarker 、velocity输出

<constant name="struts.i18n.encoding" value="UTF-8"/>

(2)指定需要Struts 2处理的请求后缀,默认是action,如用户需指定多个请求后缀,则多个后缀之间以英文逗号(,)隔开

<constant name="struts.action.extension" value="do"/>

(3)设置浏览器是否缓存静态内容,默认值为true(生产环境下使用),开发阶段最好关闭

<constant name="struts.serve.static.browserCache" value="false"/>

(4)系统是否自动重新加载修改后的struts配置文件,默认值为false(生产环境下使用),开发阶段最好打开。

<constant name="struts.configuration.xml.reload" value="true"/>

(5)打印出更详细的错误信息(开发模式下使用)

<constant name="struts.devMode" value="true" />

(6)默认视图主题

<constant name="struts.ui.theme" value="simple" />

(7)与spring集成时,指定由spring负责action对象的创建

<constant name="struts.objectFactory" value="spring" />

(8)该属性设置Struts 2是否支持动态方法调用(默认值是true)

<constant name="struts.enable.DynamicMethodInvocation" value="false"/>

(9)上传文件大小限制

<constant name="struts.multipart.maxSize" value=“10701096"/>

4.4、default.properties

struts2-core-2.x.x.x.jar包下的org.apache.struts2/default.properties文件中定义的常量还有如下:

default.properties文件的部分内容

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

### 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-stream
struts.multipart.parser=jakarta
# uses javax.servlet.context.tempdir by default
struts.multipart.saveDir=
struts.multipart.maxSize=2097152

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

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

### 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
### Change this to use a different token to indicate template theme expansion
struts.ui.theme.expansion.token=~~~
#sets the default template type. Either ftl, vm, or jsp
struts.ui.templateSuffix=ftl

完整的default.properties文件

#
# $Id$
#
# 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)
###

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

### By default SpringObjectFactory doesn‘t support AOP
### This flag was added just temporally to check if nothing is broken
### See https://issues.apache.org/jira/browse/WW-4110
struts.objectFactory.spring.enableAopSupport = 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-stream
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
### Change this to use a different token to indicate template theme expansion
struts.ui.theme.expansion.token=~~~
#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
时间: 2024-08-09 02:20:31

Struts2系列:(3)Action的访问路径和缺省后缀的相关文章

Struts2 Action的访问路径

1.     Action的访问路径 扩展名 缺省以.action结尾,请参考:default.properties文件,可以通过配置改变这一点: <constant name="struts.action.extension" value="action,do,webwork" /> 上述配置,将使得可以通过.action或.do或.webwork访问Action对象 访问路径的容错能力 比如:我们配置某个package的namespace="

Struts2:在 Action 中访问 WEB 资源

1.什么是 WEB 资源? HttpServletRequest.HttpSession.ServletContext 等原生的 Servlet API. 2.为什么访问 WEB 资源? B/S 的应用的 Controller 中必然需要访问 WEB 资源(向域对象中读写属性.读写Cookie.获取 realPath 等) 3.如何访问? 1).和Servlet API 解耦的方式:只能访问有限的 Servlet API 对象,且只能访问有限的方法.(使用 ActionContext .实现 X

【SSH框架】之Struts2系列(一)

微信公众号:compassblog 欢迎关注.转发,互相学习,共同进步! 有任何问题,请后台留言联系 1.Struts2框架概述 (1).什么是Struts2 Struts2是一种基于MVC模式的轻量级web框架,本质上相当于一个servlet.在MVC设计模式中,Struts2作为控制器来建立模型与视图的数据交互,以WebWork为核心,采用拦截器机制来处理用户的请求,使得业务逻辑控制器能够与ServletAPI完全脱离,是致力于组件化和代码重用的J2EE Web框架. (2).Struts2

Struts2——namespace、action、以及path问题

简单的介绍下Struts2中的几个简单的问题(namespace.action.以及path问题) namespace(命名空间) Namespace决定了action的访问路径,默认为"",意味着可以访问所有目录下的/ass/sss/ss/index;囊括了所有package处理不了的action: namespace可以写成/,或是/xx./xx/yy,对应action访问路径为/index.action,/xx/index.action或是/xx/yy/index.action

Struts2的常见配置&amp;Action的访问

struts2的概要 什么是Struts2? struts2是一个基于mvc的web层框架,本质上相当于一个servlet.Struts 2以WebWork为核心,采用拦截器的机制来处理用户的请求,这样的设计也使得业务逻辑控制器能够与ServletAPI完全脱离开,所以Struts 2可以理解为WebWork的更新产品. Spring MVC也是一个web层的框架 web层框架基于前端控制器的设计 struts2的入门例子 创建web项目,导入需要的jar包, 1 创建一个jsp界面 <%@ p

struts2之day01——06Struts2的action方法访问

struts2之day01--06Struts2的action方法访问                           (重点) 一.Action的方法访问介绍 1.有三种方法实现 第一种  使用action标签的method属性,在这个属性里面写执行的action的方法: 第二种  使用通配符方式实现: 第三种  动态访问实现(基本不用) 2.演示错误 (1)如果action方法有返回值,在配置文件中没有配置,出现错误 (2)在action里面的方法有返回值,如果有返回值时候类型必须是St

验证struts2中action的查找路径

以前看网上struts2的视频讲解时,其中讲解到action的查找路径时,该讲师说action的查找是依次向上一级查找的,例如有一个请求为/a/b/UerAction.action时,首先会到/a/b的命名空间里查找UserAction的Action,如果找不到就到/a的命名空间里查找UserAction的Action,如果还没有找到,以此类推,直到找到默认的命名空间,如果还没有找到,程序就会抛异常.可是近来我看见一本书中却是这样讲解的,还是这个请求/a/b/UerAction.action,首

Struts2注解指定Action扫描路径

使用spring和struts2集成全注解时 struts2默认扫描包名 action,actions,struts,struts2 的包 如果action不存在以上包时 就不会扫描到 此时需要在struts.xml中增加注释 <constant name="struts.convention.package.locators" value="action,actions,struts,struts2,admin"/> admin为增加的包名 Strut

【SSH框架】之Struts2系列(二)

微信公众号:compassblog 欢迎关注.转发,互相学习,共同进步! 有任何问题,请后台留言联 1.Struts2常量配置 (1).Struts2默认常量配置文件路径,如下图: (2).Struts2常量配置方式:以配置国际化字节编码UTF-8为例 方式1:在struts.xml文件中配置 <constant name="struts.i18n.encoding" value="UTF-8"></constant> 方式2:在src下创建