Struts2的通配符配置方式

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;}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/414769.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

spring拦截器-过滤器的区别

1. 理解 拦截器 &#xff1a;是在面向切面编程的时候&#xff0c;在你的 service 或者一个方法前调用一个方法&#xff0c;或者在方法后调用一个方法&#xff1b;比如动态代理就是拦截器的简单实现&#xff0c;在你调用方法前打印出字符串&#xff08;或者做其它业务逻辑的操作…

前端学习(2716):重读vue电商网站36之slot插槽使用

项目需求&#xff1a;由于用户列表状态后台返回的是 true/false&#xff0c;无法进行渲染&#xff0c;而我们需要的是有一个Switch开关来控制我们的状态。添加一个template 模板后&#xff0c;此时就可以用 slot-scope 作用域插槽来获取我们数据列表中的每一行数据&#xff0c;…

前端学习(2717):重读vue电商网站37之通过switch开关更改用户状态

首先&#xff0c;在 switch 开关添加一个 change 事件&#xff0c;并且通过作用域插槽的形式&#xff0c;将该行数据作为参数传入&#xff0c;目的是为了后续的修改。 在函数内我们将传递过来的参数作为我们请求的参数&#xff0c;通过 put 方式修改我们的后台数据 。

边框回归(Bounding Box Regression)详解

原文地址&#xff1a;http://blog.csdn.net/zijin0802034/article/details/77685438 Bounding-Box regression 最近一直看检测有关的Paper, 从rcnn&#xff0c; fast rcnn, faster rcnn, yolo, r-fcn, ssd&#xff0c;到今年cvpr最新的yolo9000。这些paper中损失函数都包含了边…

前端学习(2718):重读vue电商网站38之通过input输入框优化

通过增加 clearable 属性&#xff0c;我们的输入框就可以多一个 x&#xff0c;然后通过绑定 clear 事件&#xff0c;当我们进行清除 &#xff08;即点击由 clearable 属性生成的清空按钮时触发)时&#xff0c;就会重新获取我们的用户列表&#xff0c;不再需要用户再次点击搜索按…

Oracle不连续的值,如何实现查找上一条、下一条

1. 遇到的问题 已知一个题库&#xff0c;希望实现当前页切换上一题&#xff0c;下一题的需求。 查看得知&#xff0c;数据库中用于查询的字段(主键)是不连续的。如上图所示&#xff1a;stxh为主键number类型。 2. 实现方式lead over 2.1 实现代码 下一条 select nowId, afte…

前端学习(2719):重读vue电商网站39之正则表达式验证邮箱和手机号码

Javascript // 验证邮箱的规则var checkEmail (rule, value, cb) > {const regEmail /^([a-zA-Z]|[0-9])(\w|-)[a-zA-Z0-9]\.([a-zA-Z]{2,4})$/if (regEmail.test(value)) {// 合法的邮箱return cb()}cb(new Error(请输入合法的邮箱))}// 验证手机号码的规则var checkMobi…

支付宝提现,单笔转账到支付宝账户

很简单。只需三个参数实现 单笔转账到支付宝账户 1、获取开放平台创建的APPID&#xff0c;同时必须添加 单笔转账到支付宝账户 这个功能 开放平台&#xff1a;https://open.alipay.com/platform/home.htm 2、登录支付宝商家中心平台&#xff1a;https://b.alipay.com/index.h…

前端学习(2730):重读vue电商网站40之使用vue-table-with-tree-grid

安装新的依赖 vue-tabel-with-tree-gridvue-tabel-with-tree-grid 官方文档 安装完成后&#xff0c;在 main.js 入口文件内先导入 tree-tabel 然后全局注册组件 tree-tabel 页面中&#xff0c;我们使用了如下属性&#xff1a; data 确定我们的数据源&#xff0c;columns定义我…

前端学习(2731):重读vue电商网站41之自定义格式化时间的全局过滤器

在 main.js 入口文件全局注册格式化时间的过滤器&#xff0c;代码如下所示&#xff1a; Javascript // 自定义格式化时间的全局过滤器 Vue.filter(dataFormat, function(originVal) {const dt new Date(originVal)const year dt.getFullYear()const mon (dt.getMonth() 1 …

sign check fail: check Sign and Data Fail

支付宝开发报错&#xff1a;com.alipay.api.AlipayApiException: sign check fail: check Sign and Data Fail 解决方法&#xff1a; 确认使用的支付宝公钥是否正确&#xff0c;不同的环境使用的支付宝公钥不同&#xff0c; 如沙箱环境、线上openapi网关和mapi网关对应的支付…

前端学习(2732):重读vue电商网站42之添加富文本编辑器

vue-quill-editor 官方文档传送门 通过 vue-ui 界面&#xff0c;可以安装我们所需要的依赖&#xff0c;或者使用下文 npm 或 yarn安装。 NPM Js npm install vue-quill-editor --save# or yarn add vue-quill-editorMount with global Js import Vue from vue import VueQui…

1、Flutter_初体验_创建第一个应用_AndroidStudio_windows

1.前言 至于 Flutter 是啥&#xff0c;我就不在这啰嗦了&#xff0c;下面以 windows 为例&#xff0c;展示一下从安装 Flutter 到运行 APP 整个过程&#xff1b; 2.安装 Flutter 2.1、中文介绍文档&#xff1a;https://flutterchina.club/get-started/install/ &#xff08;我的…

jquery.min.js一引入到工程中显示红叉,或其他.js文件显示红叉

1.可能的原因&#xff1a; Eclipse或者MyEclipse校验失败的错误&#xff0c;不影响程序正常执行 2.解决方案&#xff1a; 选择项目&#xff0c;右键 Myeclipse--> ManaValidation--> ExcludeResource 将出现问题的js前的复选框选中。点击“应用” “确定”。如果以上…

【JEECG技术文档】Online唯一校验使用说明

1、功能介绍 配置了唯一校验的字段&#xff0c;在录入和编辑页面中&#xff0c;动态查询用户输入值是否存在校验。 要使用online唯一校验功能必须先在online表单开发中配置唯一字段的校验方式为唯一校验。 2、配置唯一校验 登录系统&#xff0c;在线开发-online表单开发&#x…

eclipse 安装 lombok插件

下载插件 官网下载 &#xff1a;https://projectlombok.org/ 有些小伙伴官网可能打不开&#xff0c;现提供我的下载地址&#xff1a;https://files.cnblogs.com/files/niceyoo/lombok.zip 安装 lombok 插件 1、右键打开 2、选择 eclipse.exe > install 博客地址&#xff1a;…

Android.View.InflateException: Binary XML File Line #异常的解决

这个运行错误&#xff0c;主要出现在安卓系统5.0一下手机系统。在5.0以上手机系统&#xff0c;不会出现这个错误 错误如下&#xff1a;在引入自定义VIEW时报错 原因&#xff1a;资源文件shape_new_message.xml在drawable-v24文件夹下&#xff0c;而不在drawable文件夹下 解决…

Android添加Header请求参数实例,java响应header请求实现demo

1、首先添加AsyncHttpClient.jar包到libs文件夹下 2、初始化请求类以及响应回调类 private AsyncHttpClient client; private AsyncHttpResponseHandler asyncHttpResponseHandler; 3、网络权限 <!-- 网络链接 --> <uses-permission android:name"android.perm…