1. 几个重要的元素

1.1 package元素

package元素用来配置包。在Struts2框架中,包是一个独立的单位,通过name属性来唯一标识包。还可以通过extends属性让一个包继承另一个包,extends属性值就是被继承包的name属性值,继承包可以从被继承包那里继承到拦截器、Action等。

在Struts2框架中是通过包来管理action、result、interceptor、interceptor-stack等配置信息的。包属性如下:

属性

说明

name 包名,作为其它包应用本包的标记
extends 可选属性,设置本包继承其它包
namespace 可选属性,设置包的命名空间
abstact 可选属性,设置为抽象包

-extends

  • 当一个包通过配置extends属性继承了另一个包的时候,该包将会继承父包中所有的配置,包括action、result、interceptor等。
  • 由于包信息的获取是按照配置文件的先后顺序进行的,所以父包必须在子包之前被定义。
  • 通常我们配置struts.xml的时候,都继承一个名为“struts-default.xml”的包,这是struts2中内置的包。

-namespace

  • 该属性可以指定包对应的命名空间。由于在一个Web应用中可能出现同名的Action并存的情况,为了避免命名冲突,只要使同名Action位于不同的namespace下就可以了。
  • Struts2中如果没有为某个包指定命名空间,该包使用默认的命名空间,默认的命名空间总是""。
  • 当设置了命名空间为“/”,即指定了包的命名空间为根命名空间时,此时所有根路径下的Action请求都会去这个包中查找对应的资源信息。
  • 根命名空间和普通命名空间中的Action的查找是一样的,即如果有请求“/stu_info.action“(或者是”/C/stu_info.action“),则先查找根命名空间下的Action(或者是/C命名空间下的Action),如果不存在对应的Action,则查找默认命名空间里的Action。此规则对于多级别的命名空间也是如此,即如果请求查找/A/A_Login/login.action时,Struts2框架先到/A/A_Login的命名空间里查找名为login的action,如果找不到,则到默认的命名空间里查询,而不会到它的上一级“/A“里面查找。

示范:

    <package name="caiwu" extends="struts-default" namespace="/caiwu">
</package>

1.2 action元素

Struts2框架通过Action对象来处理HTTP请求,该请求的URL地址对应的Action即配置在action元素中。

action元素属性

属性名称

功能描述

name 请求的Action名称
class 可选属性,Action处理类对应具体路径
method 可选属性,指定Action中的方法名
converter 可选属性,指定Action使用的类型转换器
  • 如果没有指定method则默认执行Action类中的execute方法;否则调用method属性中指定的方法。
  • 如果没有指定class则默认值为:com.opensymphony.xwork2.ActionSupport,该默认类使用默认的处理方法(啥也没做),直接返回success值。

示范:

        <action name="list" class="com.clzhang.struts2.demo3.ListAction">
</action>
<action name="listSalarySum" class="com.clzhang.struts2.demo3.ListAction" method="listSalarySum">
</action>

1.3 result元素

当调用Action方法处理结束返回后,下一步就是使用result元素来设置返回给浏览器的视图。配置result元素时常需要指定name和type两个属性。

result属性

属性名称

功能描述

name 对应Action返回逻辑视图名称,默认为success
type 返回结果类型,默认为dispatcher
  • name属性对应于Action方法返回的值,success为其默认值。
  • type属性指定结果类型,默认的类型是dispatcher。

Struts2支持的结果类型

结果类型 

说明
dispatcher 将请求转发(forward)到指定的JSP页面
redirect   将请求重定向到指定的视图资源
chain 处理Action链
freemarker 指定Freemarker模板作为视图
httpheader 控制特殊的HTTP行为
redirect-action 直接跳转到其它Action
stream 向游览器返回一个InputStream(一般用于文件下载)                    
velocity 指定使用velocity模板作为视图
xslt 用于XM/XSLT整合
plainText                                 显示某个页面的原始代码

示范:

        <action name="login" class="com.clzhang.struts2.demo1.LoginAction">
<result name="input">/struts2/demo1/login.jsp</result>
<result name="error">/struts2/demo1/wrong.jsp</result>
<result name="list" type="redirectAction">
<param name="idInList">${id}</param>
<param name="actionName">listBook</param>
</result>
</action>

需要注意dispatcher和redirect的区别,也就是转发和重定向的区别,重定向会丢失所有的请求参数,而且会丢失Action处理结果。

1.4 include元素

在Struts2中提供了一个默认的struts.xml文件,但如果package、action、interceptors等配置比较多时,都放到一个struts.xml文件不太容易维护。因此,就需要将struts.xml文件分成多个配置文件,然后在struts.xml文件中使用<include>标签引用这些配置文件。

示范:

    <include file="caiwu.xml"></include>
<include file="cangku.xml"></include>

1.5 global-results元素

有很多时候一个<result>初很多<action>使用,这时可以使用<global-results>标签来定义全局的<result>。

示范:

        <global-results>
<result name="user">/struts2/demo3/user.jsp</result>
<result name="sum">/struts2/demo3/sum.jsp</result>
<result name="default">/struts2/demo3/default.jsp</result>
</global-results>

1.6 default-action-ref元素

如果在请求一个没有定义过的Action资源时,系统就会抛出404错误。这种错误不可避免,但这样的页面并不友好。我们可以使用<default-action-ref>来指定一个默认的Action,如果系统没有找到指定的Action,就会指定来调用这个默认的Action。

示范:

    <default-action-ref name="acctionError"></default-action-ref>
<action name="acctionError">
<result>/jsp/actionError.jsp</result>
</action>

2. Action的动态调用(DMI)

Struts2提供了包含多个处理逻辑的Action处理方式,即DMI(Dynamic Method Invocation,动态方法调用)。它是通过请求对象中的一个具体的方法来实现动态的操作。具体说,在请求Action的URL地址后加上请求方法字符串,与Action对象中的方法进行匹配。其中,Action对象名称和方法之间用“!“隔开。

更多内容参考:struts2:多业务方法的处理(动态调用,DMI)

示范:

<A href="list!listUser.action" target="_blank">3.2 通过URL叹号参数</A>

3. 通配符

在实际的项目开发中,会出现多个Action定义的绝大部分都是相同的情况,这时就会产生大量冗余。对于这种情况,Struts2也给出了相应的解决方法,即使用通配符。

通配符

说明

* 匹配0个或多个字符除了“/”
** 匹配0个或多个字符包含“/”
\character                                           转义字符,“\\”匹配“\”;“\*”匹配“*”                                                         

通配符“*“通常用在<action>标签的name属性中,而在class、name属性及result元素中使用{n}的形式来代表前面第n个*所匹配的字符串,{0}来代表URL请求的整个Action字符串。

示范一:

<!-- 使用*通配符,第一个*表示调用方法,第二个*表示Action -->
<action name="*_*" class="com.clzhang.struts2.action.{2}Action"
method="{1}">
<result name="success">/{0}Suc.jsp</result>
</action>

在上面代码中,当URL请求是/update_Login.action时,会调用LoginAction类中的update()方法,处理结束返回到update_LoginSuc.jsp。

示范二:

<!-- 不管调用哪个Action,默认返回名为Action名的JSP -->
<action name="*_*">
<result>/{0}.jsp</result>
</action>

上面代码中没有指定class属性,也没指定result元素的name,这样不管访问哪个Action都会返回与该Action名字相同的JSP页面。

4. 常量配置

在之前提到struts.properties配置文件的介绍中,我们曾经提到所有在struts.properties文件中定义的属性,都可以配置在struts.xml文件中。而在struts.xml中,是通过<constant>标签来进行配置的。

示范:

    <constant name="struts.action.extension" value="action"></constant>
<constant name="struts.ognl.allowStaticMethodAccess" value="true" />
<constant name="struts.ui.theme" value="simple"></constant>
<constant name="struts.custom.i18n.resources" value="message"></constant>
<constant name="struts.i18n.encoding" value="UTF-8"></constant>

struts2:struts.xml配置文件详解的更多相关文章

  1. struts2 struts.xml配置文件详解

    <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN&quo ...

  2. struts2.0中struts.xml配置文件详解

    先来展示一个配置文件 <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration ...

  3. struts2学习笔记--struts.xml配置文件详解

    这一节主要讲解struts2里面的struts.xml的常用标签及作用: 解决乱码问题 <constant name="struts.i18n.encoding" value ...

  4. struts2中struts.xml配置文件详解【未整理】

    1.    深入Struts2的配置文件 本部分主要介绍struts.xml的常用配置. 1.1.    包配置: Struts2框架中核心组件就是Action.拦截器等,Struts2框架使用包来管 ...

  5. struts2.0 struts.xml配置文件详解

    <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN&quo ...

  6. struts2中struts.xml配置文件详解

    struts.xml的常用配置 <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE struts ...

  7. 1-1 struts2 基本配置 struts.xml配置文件详解

    详见http://www.cnblogs.com/dooor/p/5323716.html 一. struts2工作原理(网友总结,千遍一律) 1 客户端初始化一个指向Servlet容器(例如Tomc ...

  8. sqlMapConfig.xml配置文件详解

    sqlMapConfig.xml配置文件详解: Xml代码 Xml代码  <? xml version="1.0" encoding="UTF-8" ?& ...

  9. AndroidManifest.xml配置文件详解(转载)

     AndroidManifest.xml配置文件详解 2013-01-05 10:25:23 分类: Android平台 AndroidManifest.xml配置文件对于Android应用开发来说是 ...

随机推荐

  1. java知识点--重写与重载

    重载(Overload): (1)方法重载是让类以统一的方式处理不同类型数据的一种手段.多个同名函数同时存在,具有不同的参数个数/类型.重载Overloading是一个类中多态性的一种表现.      ...

  2. SQL Server 处理树结构数据的一个示例

    没多少技术含量,在简单的系统里应用问题不大: 解决的问题是: 1.树结构数据的表设计: 2.对任意一个节点,找到他所有的上级节点 3.对任意一个节点,找到他所有的下级节点 这里的部分SQL是同事给的, ...

  3. We have detected that MySQL products under the Commercial license are installed. In order to proceed with this GPL installation these Commercial

    下载了MySQL 5.6.15,在安装时,出现了下面的提示信息: 按提示信息的要求单击“是”,结果安装就无法进行下去. 从提示信息上看,意思是指电脑中原来安装有商业版的许可,现在要转换成为GPL许可. ...

  4. Windows 8.1 应用开发后台任务概述(Windows XAML)

    说到后台任务,这是在和许多 Android 开发者聊天的时候,经常被提起的话题之一, Windows 移动平台的后台任务的形式有别与 Android 的后台 service,简单的说在 Windows ...

  5. T4 模板 : 一种提升ASP.NET MVC开发速度方法

    最近由于需要在框架中提供一些自定义模板的功能,找到了一篇博客,可惜似乎是翻译工具直接翻的,读不通顺,就试着自己翻译下,我不会完全翻译原文的句子,可能会对原文进行小范围的我认为更合适的句子并添加些注释, ...

  6. [ACM_图论] Highways (变形说法的最小生成树)

    http://acm.hust.edu.cn/vjudge/contest/view.action?cid=28972#problem/C 题目给出T种情况,每种情况有n个城镇,接下来每一行是第i个城 ...

  7. 浅谈Entity Framework中的数据加载方式

    如果你还没有接触过或者根本不了解什么是Entity Framework,那么请看这里http://www.entityframeworktutorial.net/EntityFramework-Arc ...

  8. 1119 网页布局,css写下拉列表

    <style type="text/css"> *{ margin:0px; padding:0px;} #body{ width:1000px; height:200 ...

  9. C#自定义控件

    在网络上看了许多文章,终于找到了让我入门的自定义控件文章,这是链接  https://msdn.microsoft.com/zh-cn/library/cc438236(v=vs.71).aspx   ...

  10. inventor应用程序错误---解决方法

    ---恢复内容开始--- 点击 出现类似 我使用了网上的几个方法,最后是下载了2014--SP1补丁安装后就能正常打开程序了 http://pan.baidu.com/s/1pLQxp2b 这是地址3 ...