zoukankan      html  css  js  c++  java
  • Struts2 | struts.xml文件中使用method属性和通配符简化action标签和Action处理类的编写

    转自: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
    來源:简书
    著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
  • 相关阅读:
    5M1E,软件质量管理最佳解决方案
    Laravel 刚创建的项目 API 无法使用 Session,是没有在Api的请求内开启Session
    python添加默认模块搜索路径
    [传纸条]
    [miller_rabin]
    国内rog游戏手机2与国际版本的 差别
    windows下依端口查进程
    gor phone 2 优缺点
    IDA pro 6.8 导入cpu解析模块报错 ImportError: No module named ida_ bytes
    JEB 4.5 新增 RISC-V 反编译器支持
  • 原文地址:https://www.cnblogs.com/sharpest/p/7820529.html
Copyright © 2011-2022 走看看