转自:https://www.jianshu.com/p/310e89ee762d

在Struts2框架中,我们知道基本的Action标签只能实现一个url请求对应一个Action处理类。那么我们如果有三个action请求,我们就需要在struts.xml中写三个action标签,同时还需要写三个对应的Action处理类。

例如:

1、我有三个url请求,分别对应增加用户,删除用户和修改用户的三个功能:

<a href = "/addUser.action">增加用户</a>
<a href = "/deleteUser.action">增加用户</a>
<a href = "/modifyUser.action">增加用户</a>

2、那么我就需要对应编写三个Action处理类,同时在struts.xml中配置三个action标签,如下:

<package name = "demo" extends="struts-default" namespace="/">
<action name= "addUser" class = "com.demo.AddUserAction"></action>
<action name= "deleteUser" class = "com.demo.DeleteUserAction"></action>
<action name= "modifyUser" class = "com.demo.ModifyUserAction"></action>
</package>

这样做功能上虽然没有什么问题,但是如果我项目功能较多,那么就需要编写大量的Action类,并在struts.xml中配置大量action标签,这样会造成大量冗余代码。

那么有没有办法可以让一个Action类处理多个url请求呢?当然有!那就是:


  • 使用action标签中的method属性使一个Action类处理多个不同的Url请求

代码示例:

1、还是上面三个url请求,代码就不重复写了
2、在同一个Action中编写这三个功能的逻辑

public class UserAction extends ActionSupport{

     public String addUser(){
Sysotem.out.println("增加用户方法被执行了");
return NONE;
} public String deleteUser(){
Sysotem.out.println("删除用户方法被执行了");
return NONE;
} public String modifyUser(){
System.out.println("修改用户的方法执行了");
return NONE;
}
}

3、然后在action标签中使用method属性即可以将这三个url请求都引导到UserAction中执行对应的方法

<action name="addUser" class="com.demo.UserAction" method="addUser"></action>
<action name="deleteUser" class="com.demo.UserAction" method="deleteUser"></action>
<action name="modifyUser" class="com.demo.UserAction" method="modifyUser"></action>

通过这样的方式,我们就可以简化Action处理类的数量,将一些功能逻辑放在一个Action中,再通过struts.xml文件中的action标签的method属性就可以实现多个请求对应一个Action

但是struts.xml文件中的action标签还是很多,每一个url请求都要写一个action标签,那么能不能一个action标签处理所有的url请求呢?程序猿怎么能说自己不能!


  • 使用method属性配合通配符实现一个Action类、一个action标签处理多个url请求

代码示例:

1、修改请求页面的url请求地址

<a href = "/userAction_addUser.action">增加用户</a>
<a href = "/userAction_deleteUser.action">增加用户</a>
<a href = "/userAction_modifyUser.action">增加用户</a>

2、在action标签中配合使用method属性和通配符

<action **name="userAction_*"** class="com.demo.UserAction" **method="{1}"**></action>

当url请求匹配到"userAction_"字段时,通配符*会自动匹配请求过来的url后面部分,method属性"{n}",n代表前面name属性中第n个通配符,然后自动执行Action类中相对性的方法。

例如:当我请求userAction_addUser.action时,* = addUser,此时{1} = addUser,那么此时这个action标签就变成了"<action name="userAction_addUser" class="com.demo.UserAction" method="addUser"></action>",此时这个url请求就会直接分配到UserAction类中的addUser()方法执行。以此类推。

由此,使用action标签中的method属性配合通配符可以极大的简化Action类和struts.xml文件中action标签的编写工作。


作者:Asimov
链接:http://www.jianshu.com/p/310e89ee762d
來源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

Struts2 | struts.xml文件中使用method属性和通配符简化action标签和Action处理类的编写的更多相关文章

  1. struts.xml 文件中的 namespace 属性图文详解

    namespace:名称空间.默认值是""(空字符串). 名称空间+动作名称:构成了动作的访问路径

  2. struts.xml文件中配置tiles.xml

    Apache Tiles是一个JavaEE应用的页面布局框架.Tiles框架提供了一种模板机制,可以为某一类页面定义一个通用的模板,该模板定义了页面的整体布局.布局由可以复用的多个块组成,每个页面可以 ...

  3. struts.xml文件中package元素的各大属性讲解

    Struts2中的包: Struts2使用包来组织Action,将Action放在包下来定义,通过package元素配置一个包,通过package的子元素action来定义一个Action: Stru ...

  4. Struts2 学习笔记——struts.xml文件之Bean的配置

    Struts2的大部分核心组件不是以硬编码的形式写在代码中,而是通过自身的IoC容器来管理的. Struts2以可配置的形式来管理核心组件,所以开发者可以很容易的扩展框架的核心组件.当开发者需要扩展或 ...

  5. struts2——配置struts.xml文件

    在struts2框架中struts.xml是应当放到src的根目录,程序编译后会将struts.xml放到WEB-INF/classes目录下. Struts2在web.xml中的一般配置如下: &l ...

  6. Struts2.0 xml文件的配置(package,namespace,action)

    struts.xml配置 struts.xml文件是整个Struts2框架的核心. struts.xml文件内定义了Struts2的系列Action,定义Action时,指定该Action的实现类,并 ...

  7. struts.xml文件:

    struts.xml文件中包含的配置信息,你将修改所采取的措施的开发.这个文件可以被用来覆盖默认设置的应用程序,例如struts.devMode=false和其他设置中定义的属性文件.这个文件可以创建 ...

  8. struts2.Action中的method属性配置

    .Action中的method属性 在struts1.x中我们知道通过继承DispatchAction可以实现把多个Action进行统一操作,在struts2中实现action的统一操作也很简单.我们 ...

  9. Struts2学习-struts.xml文件配置

    学习框架过程中,一直对框架中的配置文件比较难理解,特搜集资料简要记录一下struts.xml文件遇到的问题. <?xml version="1.0" encoding=&qu ...

随机推荐

  1. 洛谷 P1617 爱与愁的一千个伤心的理由

    P1617 爱与愁的一千个伤心的理由 题目背景 (本道题目隐藏了两首歌名,找找看哪~~~) <爱与愁的故事第一弹·heartache>第二章. 经历了心痛后,爱与愁大神不行了. 题目描述 ...

  2. lucene构建restful风格的简单搜索引擎服务

    来自于本人博客: lucene构建restful风格的简单搜索引擎服务 本人的博客如今也要改成使用lucene进行全文检索的功能,因此在这里把代码贴出来与大家分享 一,文件夹结构: 二,配置文件: 总 ...

  3. 【剑指offer】Q31:连续子数组的组大和

    简短的分析见:http://blog.csdn.net/shiquxinkong/article/details/17934747 def FindGreatestSumOfSubArray(arra ...

  4. [ReactVR] Render Custom 3D Objects Using the Model Component in React VR

    React VR isn't limited to simple 3D primitives. By using the <Model/> Component we can place a ...

  5. Android application framework 分析[in process]

    application activity application service application UI system application sdk tool JVM 1 activity t ...

  6. 一步一步跟我学习hadoop(7)----hadoop连接mysql数据库运行数据读写数据库操作

        为了方便 MapReduce 直接訪问关系型数据库(Mysql,Oracle).Hadoop提供了DBInputFormat和DBOutputFormat两个类.通过DBInputFormat ...

  7. 宿主机mac os无法连接到虚拟机centos

    宿主机: Mac OS 10.9.2 虚拟机: [root@localhost ~]# cat /etc/redhat-release CentOS release 6.4 (Final) [root ...

  8. 前端project师养成记:开发环境搭建(Sublime Text必备插件推荐)

    为了让自己更像一个前端project师,决定从开发环境開始武装自己. 本文将介绍前段project师开发的一些利器的安装步骤,主要包含了: 1.Node.js的安装 2.Grunt的安装及经常使用插件 ...

  9. php设计模式适配器模式

    php设计模式适配器模式 简介 适配器模式(有时候也称包装样式或者包装)将一个类的接口适配成用户所期待的.一个适配允许通常因为接口不兼容而不能在一起工作的类工作在一起. 其实就是通过一个转换类,这个转 ...

  10. MongoDB 系列(一) C# 类似EF语法简单封装

    之前写过一篇关于MongoDB的封装 发现太过繁琐 于是打算从新写一篇简易版 1:关于MongoDB的安装请自行百度,进行权限认证的时候有一个小坑,3.0之后授权认证方式默认的SCRAM-SHA-1模 ...