转自: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. POJ 1286

    Burnside定理. 可以用Euler函数优化. #include <iostream> #include <cstdio> #include <cstring> ...

  2. lua简单类的实现

    原文地址:http://blog.csdn.net/qqmcy/article/details/37725177 类实现: MyClass = class("MyClass") - ...

  3. ubuntu 交叉编译qt 5.7 程序到 arm 开发板

    ubuntu 交叉编译qt 5.7 程序到 arm 开发板平台1 ubuntu 12.042 arm-linux-gcc 4.5.13 QT 5.74 开发板210 armcortex-A8 一 概述 ...

  4. php+mysql时报错:Unknown column '' in 'field list'解决方案

    答案来源:http://jingyan.baidu.com/article/9f7e7ec05c5ad76f281554ab.html 很多人在用php+MySQL做网站往数据库插入数据时发现如下错误 ...

  5. nyoj--301--递推求值(经典矩阵运算)

    递推求值 时间限制:1000 ms  |  内存限制:65535 KB 难度:4 描述 给你一个递推公式: f(x)=a*f(x-2)+b*f(x-1)+c 并给你f(1),f(2)的值,请求出f(n ...

  6. Java 定制工具库 —— Print(import static)

    创建自己的工具库以减少或消除重复的程序代码.例如,我们在Print类中,对常常用到的System.out.println()封装调用以减少输入负担.这样,我们在使用该类时,可以用一个更具可读性的 im ...

  7. C#各个版本中的新增特性详解【转】

    序言 自从2000年初期发布以来,c#编程语言不断的得到改进,使我们能够更加清晰的编写代码,也更加容易维护我们的代码,增强的功能已经从1.0搞到啦7.0甚至7.1,每一次改过都伴随着.NET Fram ...

  8. Android 实现下拉刷新和上拉加载更多的RECYCLERVIEW和SCROLLVIEW

    PullRefreshRecyclerView.java /** * 类说明:下拉刷新上拉加载更多的RecyclerView * Author: gaobaiq * Date: 2016/5/9 18 ...

  9. HDU 1394 Minimum Inversion Number【 树状数组 】

    题意:给出n个数,每次可以把第一个数挪到最后一个位置去,问这n种排列里面的最小逆序对数 先把最开始的逆序对数求出来 然后对于一个数a[i],比它小的数有a[i] - 1个,比它大的数有n - a[i] ...

  10. 优动漫PAINT-牵牛花画法教程

    喇叭型对画者自身的塑形功力会有较高的要求,作者很靠谱的把他的塑形方式详细呈现了出来~ 对于这样的一个仿真效果的牵牛花完全可以使用优动漫PAINT完成,简单又快捷,软件下载:http://www.don ...