Struts2的Action类很有意思,你可以使用3种方式来实现具体的Action类:

  1. 让你的Action类继承自ActionSupport类(项目中最常用这种方式,因为ActionSupport类中定义了很多帮助方法)
  2. 让你的Action类实现Action接口
  3. 使用POJO的方式来实现,只要Action类中有一个返回值为String的execute方法就好了(这种方式使Action类最容易被测试)

以上三种Action的实现方式都可以被struts2框架自动识别,如果你在struts.xml里面配置了一个action块但是没有配置action类的路径,这样框架默认使用ActionSupport来处理请求。

但是在实际使用struts2的过程中我发现了一个问题,一个Action只有一个execute方法来处理一类请求,如果我开发的某块功能有100个不同的请求那我岂不是要写100个Action类,每个类实现一个execute方法,这样虽然满足了一个类一个责任的设计原则,但是会不会造成“类爆炸”?后来看了struts2的文档才知道,其实我们可以使用struts2灵活的通配符配置来达到减少action类的目的:

先来看看一个简单的时序图

请求从这个页面发起,只是简单的两个链接

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<a href="infoadd">ADD INFO</a><br>
<a href="infodel">DEL INFO</a><br>
</body>
</html>

请求的控制转发是在struts.xml里面配置的

<struts><constant name="struts.enable.DynamicMethodInvocation" value="true" /><package name="mypack" extends="struts-default"><action name="info*" class="com.stone.struts2.action.MyFirstAction" method="{1}"><result>/{1}info.jsp</result><allowed-methods>add,del</allowed-methods></action></package>
</struts>

注:add,del是 方法名,也是jsp名称前缀,必须创建addinfor.jsp和delinfo.jsp文件,

@Component
@Scope(value="prototype")
public class MyFirstAction extends ActionSupport {
    
       private  Connection conn = null;
        private  PreparedStatement pstmt = null;
        private  ResultSet  rs = null;
        
        
        private String username;
        public String getUsername(){
            return username;
        }

public void setUsername(String username){
            this.username = username;
        }

public String addd() {
        getUsername();
        int num = queryCount();
        System.out.println("MyFirstActionaddrutsaaaaaaaaaa_______________________________====="+num);
        ActionContext.getContext().getSession().put("list", "威锋网"+num+username);
        
        return SUCCESS;
    }
    
    public String del() {
        return SUCCESS;
    }
    
}

上面这个XML的配置内容有几点需要注意:

  1. 我开启了struts2的RMI,apache struts基于安全性考虑,RMI默认是关闭的。
  2. 大家看到action name的值跟平常有点不一样,我使用了星号通配符用来匹配JSP中的两个链接:infoadd和infodel, 要配置method="{1}", 这样要被调用的method名字就分别是add和del了。
  3. result的JSP页面的名字也可以用通配符来配置,我分别定义了两个JSP,addinfo.jsp和delinfo.jsp,这样正好一一对应。
  4. 注意在struts2.5之后,基于安全性考虑struts2默认开启了SMI,必须显示定义Action中能被请求调用的方法,所以我有配置<allowed-methods>

看看这个Action类

public class MyFirstAction extends ActionSupport {public String add() {return SUCCESS;}public String del() {return SUCCESS;}
}

Struts2的通配符配置方式相关推荐

  1. 转载 - Struts2基于XML配置方式实现对action的所有方法进行输入校验

    出处:http://www.cnblogs.com/Laupaul/archive/2012/03/15/2398360.html http://www.blogjava.net/focusJ/arc ...

  2. Struts2学习---基本配置,action,动态方法调用,action接收参数

    首先我们先来直接配置,然后再来讲原理:  第一步:jar包的引入:  我们可以到struts2的官网上下载:  http://struts.apache.org/download.cgi#struts ...

  3. 基于XML配置方式实现对action的所有方法进行校验

    基于XML配置方式实现 对action的所有方法进行校验或者对Action的指定方法进行校验 Action也要继承ActionSupport,并且提供校验文件,校验文件和action类放在同一个包下 ...

  4. Log4J配置方式Java工程测试

    2019独角兽企业重金招聘Python工程师标准>>> Log4J配置方式 1.  导入jar包 Commons-logging .jar Log4j-1.2.17.jar 2.  ...

  5. Struts2中通配符的使用

    1.准备工作 新建一个JavaWeb项目HelloWord,导入Struts2的.jar包,在Web.xml下配置Struts2的监听,在src下添加Struts2的配置文件struts.xml:将该 ...

  6. 【struts2】struts2的零配置

    零配置(zero configuration)的意思是不使用任何配置文件部署struts2应用,如struts.xml.struts.properties等.零配置并不是真的"零配置&quo ...

  7. Spring基于 XML 的声明式事务控制(配置方式)

    一.引入依赖 <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http ...

  8. Spring定时任务@Scheduled注解使用配置方式(cron表达式、fixedRate和fixedDelay)

    Spring定时任务@Scheduled注解使用配置方式(cron表达式.fixedRate和fixedDelay) 序言: 个人推荐一个很方便的在线Cron生成器(网页版):https://qqe2 ...

  9. SSL加速和证书卸载的配置方式

    随着移动互联网,网银支付等等的普及,越来越多的应用开始重视私密性和安全性,最常见的就是把原有基于明文传输的HTTP调整为加密的HTTPS方式:实现这种方式的最常用的手段也是购置第三方发布的域名证书,部 ...

最新文章

  1. 编程之美-数组循环移位
  2. 一个好用的Visual Studio Code扩展 - Live Server,适用于前端小工具开发
  3. python对文件的_python 对文件操作
  4. 递归——黑白棋子的移动(洛谷 P1259)
  5. linux-如何限制普通用户的磁盘使用空间-磁盘配额quota,Linux-如何限制普通用户的磁盘使用空间-磁盘配额quota...
  6. WIN7网络共享打印机设置 家庭工作组
  7. CVE-2012-4792Microsoft Internet Explorer 释放后使用漏洞
  8. 底部导航栏使用BottomNavigationBar
  9. xshell和xftp官网
  10. 耳机在Mac上听不到声音怎么办?
  11. Flutter系列之设置Dialog的宽度
  12. linux发音,你发对了吗
  13. Vue3中使用Ant Design Vue图标
  14. octagam® 10%治疗皮肌炎患者的ProDERM研究达到主要终点的阳性结果将在ACR 2020年会上呈报
  15. 【web】React-hooks
  16. 使用Sharding-Jdbc进行数据拆分
  17. 【qttabbar】常用设置分享
  18. 2016CSDN前十排名博客地址
  19. 打开图片链接直接打开QQ对话框
  20. 安装mysql会产生哪些文件_安装mysql详细步骤有哪些?

热门文章

  1. [js] 微信小程序实现轨迹回放,微信原生小程序,基于uniapp的小程序?
  2. 工作301:substring使用
  3. 前端学习(2379):加入git管理
  4. 前端学习(1861)vue之电商管理系统电商系统之设置背景色并在中央绘制登录盒子
  5. 前端学习(1764):前端调试值之性能分析的方法二
  6. 前端学习(976):阿里百秀轮播图制作
  7. 前端学习(536):多列布局3列得间距
  8. shiro学习(16):使用注解实现权限认证和后台管理二
  9. dockerfile使用(一)
  10. C与C++中的extern与static、extern C与__cplusplus的作用