…Struts2之struts.xml配置文件…
struts.xml文件是Struts2框架的核心配置文件,它主要负责管理Struts2框架的Bean配置、常量配置、包配置、Action配置、包含配置、拦截器配置等。
1、 Bean配置
Struts2框架是一个高度可扩展性的框架,在Struts2框架中大部分的核心组件都不是以硬编码的方式写在代码中的,而是以IOC(控制反转)容器来管理框架的核心组件。
一般在我们开发中都是将bean的配置放在applicationContext.xml中进行管理,struts.xml中只是其引用而已,这样方便管理,而且IOC容器可以进行依赖注入。
Struts2框架以可配置的方式来管理Struts2的核心组件,从而允许开发者可以很方便地扩展框架的核心组件。当开发者需要扩展或替换Struts2的核心组件时,只需要提供自己的组件实现类,并将该组件的实现类配置到Struts2的IOC容器中即可。
2、常量配置
如果在这两个文件中配置了同一个Struts2常量,那么后一个文件中配置的常量值会覆盖前面文件中配置的常量值。
通常,Struts2框架按如下搜索顺序加载Struts2常量:
struts-default.xml
struts-plugin.xml
struts.xml
struts.properties
web.xml
由此可见如果在struts.properties文件和struts.xml文件中定义相同的常量的话,则最终将使用struts.properties中定义的常量值。推荐在struts.xml文件中配置Struts2常量
3、包配置
Struts2框架中核心组件就是Action和拦截器等 ,Struts2框架使用包来管理一系列的Action和拦截器等。每个包就是由多个Action、拦截器及拦截器引用组成的集合。
配置包时,必须指定name属性,这个属性是引用该包的key。此外还可以指定extends属性,该属性是可选项,extends属性值必须是另一个包的name属性值。一旦指定extends属性就表示该包继承其他包,子包可以继承一个或多个父包中的拦截器、拦截器栈、Action等配置。
定义包时,应使用package标签,每个package标签定义了一个包配置。在定义包时可以指定如下几个属性:
name:必填属性,该属性指明该包的名字,该名字是其他包引用的key。
extends:可选属性,该属性指定该包继承其他包,继承其他包后就可以继承其他包的Action定义、拦截器定义等。
namespace:可选属性,指明该名的命名空间。
abstract:可选属性,指明该包是一个抽象包,需要注意的是抽象包中不能包含Action定义。
提示:由于Struts2的配置文件是从上到下处理的,所以父包应该放在子包前面定义。
namespace(命名空间)属性详解
有时由于Web项目的特珠性,可能出现有同名Action的情况,在Struts2中是以命名空间的方式来管理Action,同一个命名空间里不能有同名的Action,不同的命名空间里可以有同名的Action。
Struts2不支持为单独的Action设置命名空间,而是通过为包指定namespace属性来为包下面的所有Action指定共同的命名空间。
命名空间必须以/+名称的方式命名,如:
namespace=“/demoName”
命名空间不是目录,如果在指定的命名空间中未找到aciton,它不会去上一级命名空间寻找,而是直接跳到默认命名空间寻找
根命名空间下的Action只处理根命名空间下的Action的请求。
4、包含配置
Struts2允许将一个配置文件分解成多个配置文件,从而增加配置文件的可读性。
如果通过多个配置文件来配置Action,但是Struts2默认只加载WEB-INF/classes下的struts.xml文件,这样我们只能在struts.xml文件中包含其他配置文件。
<include file="struts-action.xml"/>
说明:被包含的struts-action.xml文件必须是标准的Struts2配置文件,即拥有标准的DTD信息、标准的Struts2配置文件的根元素等信息。
5、拦截器配置
Struts2中的拦截器实质就是AOP(面向切面编程)的编程思想。拦截器允许在Action处理之前或者处理结束之后,插入用户自定义的代码。
6、Action详解及配置
对于Struts2项目而言,Action才是应用的核心,用户需要提供大量的Action类,并在struts.xml文件中进行配置。
(1)Action的实现
相对于Struts1而言,Struts2采用了低侵入式的设计方式,Struts2不要求Action类继承任何的Struts2基类或者是实现任何Struts2的接口。所以在这种设计方式下,Struts2的Action类就是一个普通的POJO(通常应该包含一个无参数的execute方法,Struts2自动调用)。
Struts2通常直接使用Action来封装HTTP请求参数,因此,Action类里还应该包含与请求参数对应的属性,并且为该属性提供对应的setter和getter方法。注意:当某些属性是由spring依赖注入的,那么不要提供其getter方法!!!
Action类是通过对应的setter和getter方法来处理请参数的,而不是通过属性名来处理请求参数的也就是说包不包含对应的属性不重要,重要是必须包含这两个属性对应的setter方法。
Action接口与ActionSupport类
ActionSupport是Action接口的一个实现类。ActionSupport类是Struts2默认的Action处理类,如果用户开发的Action类继承ActionSupport类,则会大大简化Action的开发。
当用户配置的Action类没有指定class属性时,Struts2会自动使用ActionSupport类作为默认的Action处理类。
(2)在Action中间接访问Servlet API
对于Web应用而言不访问Servlet API几乎是不可能的,例如获取session中的值等,而struts2又是低侵入式的,怎么办,当然struts2作者肯定是有解决办法的!
Struts2提供了一个ActionContext类,通过该类用户在Action类中就可以访问Servlet API。
ActionContext类常用方法:
Object get(Object key):该方法相当于调用HttpServletRequest的getAttribute(String name)方法
void put(Object key,Object value):相当于调用HttpServletRequest的setAttribute(String key,Object value)方法
Map getApplication():返回一个Map对象,调用该方法相当于返回了一个Application对象
static ActionContext getContext():静态方法,获取系统的ActionContext对象
Map getParameters():获取所有的请求参数,类似于调用HttpServletRequest对象的getParameterMap()方法
Map getSession():返回一个Map对象,调用该方法相当于返回了一个session对象
Action类彻底从Servlet API中分离现来,可以脱离Web容器测试Action类
(3)在Action中直接访问Servlet API
A. 实现接口的方法:
(1)ServletContextAware接口:实现该接口的Action可以直接访问Web应用的ServletContext实例
(2)ServletRequestAware接口:实现该接口的Action可以直接访问用户请求的HttpServletRequest实例
(3)ServletResponseAware接口:实现该接口的Action可以直接访问用户请求的HttpServletResponse实例
B. 使用Struts2提供的ServletActionContext类该类提供了如下几个常用的静态方法:
static PageContext getPageContext():取得Web应用的PageContext对象
static HttpServletRequest getRequest():取得Web应用的HttpServletRequest对象
static HttpServletResponse getResponse():取得Web应用的HttpServletResponse对象
static ServletContext getServletContext():取得Web应用的ServletContext对象
提示:需要说明的是虽然用户可以在Action类中获取HttpServletResponse对象,但是在Struts2的Action中仍旧不能生成对客户端的输出。而且容易出现转码问题。(具体的原因可能是struts2实现的问题)
(4)Action配置
action的属性包括:
name:请求的Action名称。
class:Action处理类对应具体路径。
method:指定使用Action中的哪个方法名。
converter:指定Action使用的类型转换器。
当不设置method时,系统将默认指定Action中的execute方法。
Action的name属性命名规则,一般情况下name属性名中不能包含(.)或者(-)等字符。
(5)动态方法调用
Struts 1.x提供了DispatchAction,从而允许一个Action内包含多个处理方法。
在Struts2中同样提供了这种处理多个请求的Action——DIM(Dynmaic Method Invocation,动态方法)调用来处理这种请求。 actionName!methodName.do
<form action="book!delBook.do" method="post">
使用动态方法调用前必面设置Struts2允许动态方法调用,开启系统的动态方法调用是通过设置struts.enable.DynamicMethodInvocation常量完成的,设置该常量的值为true(默认值),将开启动态方法调用;否则将关闭动态方法调用。
(6)为action元素指定method属性
<action name="Login" class="com.UserManagerAction" method="login"/>
指定action的method属性,可以让Action类调用指定的方法,而不是系统自动调用Action中的execute方法来处理用户请求。
(7)使用通配符
在配置<action.../>元素时,有时需要指定name、class和method属性和<result.../>
,这3个属性都可以支持通配符,这种使用通配符的方式是另一种形式的动态方法调用。还以可使用${属性名}的方式来指定视图资源。其中${属性名}就是对应的Action类中的属性。而且,不仅允许使用这种简单表达式形式,还可以使用完全的ONGL表达式,即:${属性名.属性名.属性名....}。
例:
<action name="*Action" class="com.UserManagerAction" method="{1}">...</action>
<action name="*Action“ class="com.{1}Action" >...</action>
<action name="*_*" class="com.action.{1}"method="{2}">...</action>
<action name="*">
<result>/jsp/{1}.jsp</result>
</action>
通常将上述的<action name="*".../>作为最后一个<action.../>元素的配置,用于实现JSP页的显示,防止在项目中同时出现.jsp和.do的交叉出现。
注:除非请求的URL与Action的name属性绝对相同,否则将按先后顺序来决定由哪个Action来处理用户请求,因此在项目开发中一般将*的Action配置在最后,否则Struts2将使用该Action来处理所有希望使用模式匹配的请求。
(8)默认Action
对于只是简单的超级链接的请求,可以通过定义name为*的Action(该Action一般放在最后定义)来实现。除此之外,Struts2还允许在容器中定义一个默认的Action,当用户请求的URL在容器中找不到对应的Action时,系统将使用默认Action来处理用户请求。
配置默认Action通过<default-action-ref.../>元素来完成,每个<default-action-ref.../>元素配置一个默认Action,如:
<default-action-ref name="simpleViewResultAction"/>
<action name="simpleViewResultAction" class="com.action.SimpleViewResultAction">
<result name="success">/jsp/welcome.jsp</result>
</action>
注:name属性指向容器中另一个有效的Action,该Action将成为该容器中默认的Action。
7、处理结果-result
Action仅负责处理用户请求,它只是一个控制器,它不能也不应该直接提供对用户的响应。当Action处理完用户请求后,处理结果应该通过视图资源来实现,但控制器应该控制将哪个视图资源呈现给用户。
在Struts2中当Action处理完用户请求后,并未直接将请求转发给任何具体的视图资源,而是返回一个普通字符串,该普通字符串就是一个逻辑视图名,Struts2框架收到这个逻辑视图后,把请求转发到对应的物理视图资源(即逻辑视图名与物理视图资源之间存在映射关系),物理视图资源将处理结果呈现给用户。(个人觉得这个是非常人性的设计)
Struts2还支持多种结果映射:Struts2框架将处理结果转向实际资源时,实际资源不仅可以是JSP视图资源,也可以是JSF视图资源,甚至可以将请求转发给一下Action处理,形成Action的链式处理。
(1)配置结果
局部结果:将<result.../>作为<action.../>元素的子元素配置。
全局结果:将<result.../>作为<global-results.../>元素的子元素配置。
一个Action可以对应多个结果
完整的<result../>配置如下:
<result name="success" type="dispatcher"></sp
分享到:
相关推荐
Struts2的Struts.properties配置文件详解 Struts2是一个基于MVC模式的Web应用程序框架,它提供了一个名为Struts.properties的配置文件,该文件用于配置Struts2的各种参数和设置。下面将对Struts.properties配置文件...
在Struts2中,`struts.xml`是核心配置文件,它定义了应用的行为、动作、结果和其他组件。为了在Eclipse这样的集成开发环境中获得代码提示和自动完成,我们需要引入DTD(文档类型定义)文件,例如`struts-2.3.dtd`。 ...
同时,Struts的配置文件(struts-config.xml或struts2的struts.xml)也需要进行相应的调整,引入Spring的插件和配置信息。 `springframework-license.txt`文件则包含了Spring框架的许可协议,它规定了软件的使用、...
- Struts2 DTD 是XML文档类型定义,它规定了struts2配置文件(如struts.xml或struts-default.xml)的语法和元素。这些元素定义了Action、结果、拦截器等配置,使得开发者可以声明式地配置应用行为。 2. **struts-...
而在Struts框架中,`struts-config.xml`文件扮演着至关重要的角色,它是Struts框架的核心配置文件,用于配置应用程序的各种行为和组件。本文将对`struts-config.xml`中的关键元素进行详细解析,并结合实际示例来帮助...
struts-config.xml struts标准配置文件 struts-config
struts自动加载的一个配置文件列表 struts.configuration.xml.reload Whether to reload the XML configuration or not 是否加载xml配置(true,false) struts.continuations.package The package containing ...
### Struts2配置文件介绍 #### 一、Struts2的核心配置文件 在Struts2框架中,有多个重要的配置文件用于控制应用的行为与结构,其中最核心的是`struts.xml`文件。此外还包括`web.xml`、`struts.properties`、`...
`struts.xml` 文件是Struts2的核心配置文件之一,主要负责管理和定义应用程序中的Action映射以及相关的Result定义。具体来说,该文件包括以下几个关键部分: 1. **Action 映射**: - 指定每个Action的名称、执行的...
4. **配置文件**: `struts.xml`是Struts2的主要配置文件,定义了Action、Interceptor、结果类型等。通过这个文件,开发者可以控制Action的映射、拦截器链的设置以及结果的跳转规则。 5. **Plug-in(插件)**: ...
然后,我们创建Struts2的核心配置文件`struts2.xml`。这是一个XML文件,它定义了应用程序的行为和映射。例如: ```xml <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1//...
为了去掉这个.action,我们需要配置Struts2的配置文件,通常是struts.xml。在该文件中,我们可以定义一个全局结果类型(global result type)来处理所有请求的后缀: ```xml <constant name="struts.action....
在Struts2中,注解的引入使得开发者可以摆脱繁琐的`struts.xml`配置文件,实现“零配置”运行。 首先,让我们了解什么是注解(Annotation)。注解是Java提供的一种元数据机制,允许在源代码中嵌入信息,这些信息...
在Struts2中,`struts.xml`文件是核心配置文件,它定义了动作、结果、拦截器等关键组件。在默认情况下,`struts.xml`通常位于`src/main/resources`或在Web应用中是`WEB-INF/classes`目录下。 在描述的问题中,...
配置文件中的版本号(如`struts-2.5.2`)应与实际使用的Struts版本保持一致,以确保正确解析和执行。 在配置过程中,可能会遇到各种问题。例如,日志配置不完整可能导致Tomcat无法启动或运行错误。在这种情况下,...
3、struts2配置文件 4、cion主要内容 Namespace、自定义Action、路径问题、通配符、包含模块配置文件、默认Action、接受用户输入、服务器跳转、Action中访问web元素、简单数据校验、调用Action的自定义方法 5...
这个压缩包“struts2所有包和配置文件”包含了Struts2框架运行所需的核心组件和配置文件。 首先,让我们详细了解一下`web.xml`。这是每个Java Web应用的标准部署描述符,用于配置应用程序的基本设置,比如Servlet、...
配置文件在Struts2中起着至关重要的作用,它定义了框架的行为、动作映射、拦截器和其他关键设置。以下是Struts2配置文件的一些核心元素和属性的详细说明: 1. **配置文件结构**: Struts2的配置通常存储在一个名为...
### Struts2 配置文件详解 #### 一、引言 在Struts2框架的应用开发过程中,配置文件起到了至关重要的作用。Struts2主要依赖于两种基于XML的配置文件:`web.xml` 和 `struts-config.xml`(通常命名为 `struts.xml`)...