struts2 之 Action的优化配置
总结:struts2种action的配置文件会随着业务的增加而增加,导致配置文件膨胀。struts2中提供了三种方案来解决这个问题:
1. 动态方法调用来实现。
2. 通配符配置来解决。
3. 使用注解的方式来实现。
实例:传统的action配置方法:
一 . Action处理类中有4个处理方法:
public class UserAction {
public String add(){
System.out.println("添加");
return Action.SUCCESS;
}
public String delete(){
System.out.println("删除");
return Action.SUCCESS;
}
public String find(){
System.out.println("查询");
return Action.SUCCESS;
}
public String update(){
System.out.println("修改");
return Action.SUCCESS;
}
}
Action的配置:
<package name="default" namespace="/" extends="struts-default">
<!-- 传统的配置方式 -->
<action name="add" class="cn.sxt.action.UserAction" method="add">
<result>/index.jsp</result>
</action>
<action name="find" class="cn.sxt.action.UserAction" method="find">
<result>/index.jsp</result>
</action>
<action name="delete" class="cn.sxt.action.UserAction" method="delete">
<result>/index.jsp</result>
</action>
<action name="update" class="cn.sxt.action.UserAction" method="update">
<result>/index.jsp</result>
</action>
</package>
二. 动态方法 优化实例:
1. 动态方法调用首先需要将下面常量配置为 true
<!-- 配置动态方法调用为true,不同版本默认配置不一致 -->
<constant name="struts.enable.DynamicMethodInvocation" value="true"/>
2. 在struts.xml配置文件中,只需要配置一个action即可:
<action name="userAction" class="cn.sxt.action.UserAction">
<result>/index.jsp</result>
</action>
3. 再调用action时,需要按照一下规定进行调用:ActionName!methodName.action
如:http://localhost:8080/action_cfg/userAction!delete.action
三 . 使用通配符配置类解决action配置优化问题。
<!-- 使用通配符进行action的配置
* 表示匹配多个字符
{1} 表示占位符 1表示的第一个*的内容
如果请求的是add.action,那么* 表示add {1}表示add
-->
<action name="*" class="cn.sxt.action.UserAction" method="{1}">
<result>/index.jsp</result>
</action>
注意:如果使用通配符进行配置action,需要注意不同的处理方法返回值的问题。如果有指定名称的action,那么首先匹配指定名称的action,没有再匹配通配符。
四. 使用注解来进行action的配置:
1.导入struts2-convention-plugin-2.3.4.jar
2.在action类上配置注解 如:
@ParentPackage("struts-default")
@Namespace("/")
public class UserAction {
@Action(value="/add",
results={@Result(name="success", location="/index.jsp", type="redirect"),
@Result(name="error", location="/error.jsp", type="redirect")})
public String add(){
System.out.println("添加");
return "success";
}
@Action("/delete")
public String delete(){
System.out.println("删除");
return "success";
}
@Action("/find")
public String find(){
System.out.println("查询");
return "success";
}
@Action("/update")
public String update(){
System.out.println("修改");
return "success";
}
}
struts2 之 Action的优化配置的更多相关文章
- Struts2之Action基础与配置
Action基础 Action是什么 在Struts2中,一个Action类代表一次请求或调用,每个请求的动作都对应于一个相应的Action类,一个Action类是一个独立的工作单元.也就是,用户的每 ...
- Struts2第三篇【Action开发方式、通配符、Struts常量、跳转全局视图、action节点默认配置】
前言 上篇Struts博文已经讲解了Struts的开发步骤以及执行流程了-..对Struts的配置文件有了了解-..本博文继续讲解Struts在配置的时候一些值得要学习的细节- Action开发的三种 ...
- Struts2之配置文件中Action的详细配置
在Struts2之配置一文中,我们知道一个struts配置文件可以分为三部分:常量配置 包含其他配置文件的配置 Action配置 . 这其中 常量配置 和 包含其他配置文件的配置 二 ...
- 关于Struts2中 Action 配置method的解读
为Action配置method属性: 将Action类中的每一个处理方法都定义成一个逻辑Action方法. <!DOCTYPE struts PUBLIC "-//Apache Sof ...
- struts2的占位符*在action中的配置方法
转自:https://blog.csdn.net/u012546338/article/details/68946633 在配置<action> 时,可以在 name,class,meth ...
- struts2的action是多例,servlet是单例
struts2中action是多例的,即一个session产生一个action如果是单例的话,若出现两个用户都修改一个对象的属性值,则会因为用户修改时间不同,两个用户访问得到的 属性不一样,操作得出的 ...
- Struts2之Action
Struts2之Action MVC模式中需要有一个控制器来负责浏览器与服务器之间的通信,实现用户与服务器的交互.在Struts2框架中实现这一功能的是Action,它是整个框架最核心的部分.Acti ...
- 浅析Struts1和Struts2的Action线程安全问题 转
浅析Struts1和Struts2的Action线程安全问题 转 http://blog.csdn.net/virgoboy2004/article/details/5876133 [问题描述]最近 ...
- struts2 修改action的后缀
struts2 修改action的后缀 struts2 的默认后缀是 .action 虽然很直观,但是很烦琐.很多人喜欢将请求的后缀改为 .do 在struts2中修改action后缀有两种比较简单的 ...
随机推荐
- 编程那些事儿:如何快速地"借用"CSS
做前端开发有时候会碰到任务紧急,需要马上写好静态页的问题.比如,设计师给你扔了一个设计稿,要你在下班之前搞定.这时候你如热锅上的蚂蚁,如果自己写css的话,时间紧张,于是上网找了一下相关模板页面,找到 ...
- Laptop Ubuntu16.04/14.04 安装Nvidia显卡驱动
笔记本型号 机械革命(MECHREVO)深海泰坦X6Ti-S(黑曜金)15.6英寸 CPU型号 i5-7300HQ 内存 8G 硬盘容量 128SSD+1T机械硬盘 显卡 GeForce GTX 10 ...
- Vue学习之路---No.5(分享心得,欢迎批评指正)
同样,首先我们还是回顾一下昨天讲到的东西: 1.常用的Vue修饰器 2.当利用js方法不修改数据,但也可以改变视图时,我们需要整体返回再整体接收 (如: items.example1 = items. ...
- 基于cxf开发restful风格的Web Service
一.写在前面 webservice一些简单的其他用法和概念,就不在这里赘述了,相信大家都可以在网上查到,我也是一个新手,写这篇文章的目的一方面是想记录自己成长的历程,另一方面是因为学习这个的时候花了点 ...
- android-自定义广告轮播Banner(无限循环实现)
关于广告轮播,大家肯定不会陌生,它在现手机市场各大APP出现的频率极高,它的优点在于"不占屏",可以仅用小小的固定空位来展示几个甚至几十个广告条,而且动态效果很好,具有很好的用户& ...
- 【转】nginx配置:location配置方法及实例详解
location匹配的是nginx的哪个变量? $request_uri location的匹配种类有哪些? 格式 location [ 空格 | = | ~ | ~* | !~ | !~* ] /u ...
- python——时间与时间戳之间的转换
http://blog.csdn.net/google19890102/article/details/51355282
- angular element()
使用angular.element()获取一个dom的方法. 1.可以使用jquery的选择器 2.可以使用javascript的原生的的查找元素的方法 下面是angular.element()提供的 ...
- Zeppelin interperter 模式设置总结
如有错漏,望请指正,不胜感激. 参考:[zeppelin官网]:https://zeppelin.apache.org/docs/latest/interpreter/spark.html#inter ...
- WebService客户端添加SOAPHeader信息
通过JAXBContext创建Marshaller对头信息进行解析为dom,获取WSBindingProvider,使用Headers.creat()创建soap的Header元素: 另外就是:将us ...