星空网 > 软件开发 > Java

Struts2学习笔记(三)——Action详解

Action是用于处理请求操作的,它是由StrutsPrepareAndExceuteFilter分发过来的。

1、Action的创建方式

1) POJO类(PlainOldJavaObjects简单的Java对象),不需要继承任何父类,实现任何接口

1 public class TestAction {2   public String execute() {3     return "success";4   }5 }

这种方式是Struts2框架通过反射来实现的,步骤:

  • struts2框架通过读取struts.
  • object = Class.forName("完整类名").newInstance();
  • Method method = Class.forName("完整类名").getMethod("execute"); 
  • method.invoke(object); 

2)实现Action接口

 1 public class TestAction implements Action { 2   /** 3    * 可以不重写execute方法,用自定义的方法,但是 4    * 在配置文件中需要显示指定方法名method=要执行的方法 5   */ 6   @Override 7   public String execute() { 8     return "success"; 9   }10 }

Action接口中,定义默认五种逻辑视图名称:

public static final String SUCCESS = "success"; // 数据处理成功 (成功页面)public static final String NONE = "none"; // 页面不跳转 return null; 效果一样public static final String ERROR = "error"; // 数据处理发送错误 (错误页面)public static final String INPUT = "input"; // 用户输入数据有误,通常用于表单数据校验 (输入页面)public static final String LOGIN = "login"; // 主要权限认证 (登陆页面)

五种逻辑视图用来解决Action处理数据后,跳转页面

3)继承ActionSupport类(推荐)

其实ActionSupport类本身已经实现了Action接口,而且可以在Action中使用表单校验、错误信息设置、读取国际化信息三个功能,所以推荐使用。

 1 public class TestAction extends ActionSupport { 2   /** 3    * 可以不重写execute方法,用自定义的方法,但是 4    * 在配置文件中需要显示指定方法名method=要执行的方法 5   */ 6   @Override 7   public String execute() { 8     return "success"; 9   }10 }

2、Action的访问

在配置<action>元素时,没有指定method属性,默认执行Action类中execute方法。

1)基本访问

在jsp页面中有下面的action访问路径:

1 <a href="${pageContext.request.contextPath}/book/update.action">测试</a>

struts.

 1 <struts> 2   <constant name="struts.devMode" value="true" /> 3   <package name="default" namespace="/book" extends="struts-default"> 4     <action name="add" class="cn.sunny.action.BookAction" method="add"> 5       <result name="success">/success.jsp</result> 6     </action> 7     <action name="update" class="cn.sunny.action.BookAction" method="update"> 8       <result name="success">/success.jsp</result> 9     </action>10     <action name="delete" class="cn.sunny.action.BookAction" method="delete">11       <result name="success">/success.jsp</result>12     </action>13     <action name="search" class="cn.sunny.action.BookAction" method="search">14       <result name="success">/success.jsp</result>15     </action>16   </package>17 </struts>

通过<package>的namespace与<action>的name属性结合与请求资源路径对比,可以知道访问哪一个action,在通过<action>的class知道访问哪一个Action类,通过method知道访问哪一个方法。

Struts2学习笔记(三)——Action详解

2)使用通配符

使用通配符* 可以简化struts.

jsp页面:

1 <a href="${pageContext.request.contextPath}/book/Book_add">book_add</a><br>2 <a href="${pageContext.request.contextPath}/book/Book_update">book_update</a><br>3 <a href="${pageContext.request.contextPath}/book/Book_delete">book_delete</a><br>4 <a href="${pageContext.request.contextPath}/book/Book_search">book_search</a><br> 

action的配置:

1 <struts>2   <constant name="struts.devMode" value="true" />3   <package name="default" namespace="/book" extends="struts-default">4     <action name="*_*" class="cn.itcast.action.{1}Action" method="{2}">5       <result name="success">/success.jsp</result>6     </action>7   </package>8 </struts>

<action>中的name属性的值中每一个"*"代表长度不为0的任意字符串,name="*_*"表示页面访问的action名称必须为为类似book_add.action、book _update.action形式。

如果在name属性定义了通配符之后,可以在class属性、method属性、<result>的name属性以及返回的jsp页面名字中都可以使用通配符,{1}代表第一个*,{2}代表第二个*。

Struts2学习笔记(三)——Action详解

3)动态方法调用

当在<action>中不配置method属性同时又不希望执行默认的execute方法时,可以使用动态方法调用,访问的方式为"action名"+"!"+"方法名":

<a href="${pageContext.request.contextPath}/book/book!add">bookadd</a>

action配置:

1 <struts>2   <constant name="struts.devMode" value="true" />3   <package name="default" namespace="/book" extends="struts-default">4     <action name="book" class="cn.sunny.action.BookAction">5       <result name="success">/success.jsp</result>6     </action>7   </package>8 </struts>

注意事项:在struts2的常量配置中有一项可以设置关闭动态方法调用,默认是允许:

1 struts.enable.DynamicMethodInvocation = true

 




原标题:Struts2学习笔记(三)——Action详解

关键词:Struts

*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们: admin#shaoqun.com (#换成@)。

哈尔滨俄运通科贸股份有限公司:https://www.ikjzd.com/w/4551
pjpauljones:https://www.ikjzd.com/w/4552
StockX:https://www.ikjzd.com/w/4553
国家知识产权协调中心:https://www.ikjzd.com/w/4554
马拉喀什条约:https://www.ikjzd.com/w/4555
美国消费品安全委员会(CPSC):https://www.ikjzd.com/w/4556
云南旅游攻略(8-10天左右):https://www.vstour.cn/a/404249.html
有威海直到崂山风景区车吗 威海到青岛崂山怎么走最快:https://www.vstour.cn/a/404250.html
相关文章
我的浏览记录
最新相关资讯
海外公司注册 | 跨境电商服务平台 | 深圳旅行社 | 东南亚物流