struts2-通配符和动态方法调用(代码演示)
struts2
--通配符和动态方法调用
1、jsp
test.jsp
1 <%@ page language="java" pageEncoding="utf-8" contentType="text/html; charset=utf-8"%> 2 <%@ taglib uri="/struts-tags" prefix="s"%> 3 <html> 4 <head> 5 <title>My JSP 'index.jsp' starting page</title> 6 </head> 7 <body> 8 访问BookAction_add 测试action标签中的method属性<br> 9 <a href="${pageContext.request.contextPath}/pattern/bookAction.action"> 测试</a><br> 10 <br> 11 <br> 12 13 14 通配符映射示例(1):<br> 15 <a href="${pageContext.request.contextPath}/pattern/a_add.action"> 通配符映射示例(1)</a><br> 16 <a href="${pageContext.request.contextPath}/pattern/b_add.action"> 通配符映射示例(1)</a><br> 17 <a href="${pageContext.request.contextPath}/pattern/c_add.action"> 通配符映射示例(1)</a><br> 18 <br> 19 <br> 20 <br> 21 22 通配符映射示例(2):<br> 23 <a href="${pageContext.request.contextPath}/pattern/BookAction_add.action"> 图书</a><br> 24 <a href="${pageContext.request.contextPath}/pattern/UserAction_add.action">用户</a><br> 25 <br> 26 <br> 27 28 通配符映射示例(3):<br> 29 <a href="${pageContext.request.contextPath}/pattern/BookAction_add.action">图书添加</a><br> 30 <a href="${pageContext.request.contextPath}/pattern/BookAction_delete.action">图书删除</a><br> 31 <br> 32 <br> 33 <a href="${pageContext.request.contextPath}/pattern/UserAction_add.action">用户添加</a><br> 34 <a href="${pageContext.request.contextPath}/pattern/UserAction_delete.action">用户删除</a><br> 35 <br> 36 <br> 37 38 39 动态方法调用!形式:<br> 40 <a href="${pageContext.request.contextPath}/pattern/BookAction!add.action">图书添加</a><br> 41 <a href="${pageContext.request.contextPath}/pattern/BookAction!delete.action">图书删除</a><br> 42 43 44 <br><br> 45 使用通配符定义action<br> 46 <a href="${pageContext.request.contextPath}/pattern/BookAction_add.action">图书添加</a><br> 47 <a href="${pageContext.request.contextPath}/pattern/BookAction_delete.action">图书删除</a><br> 48 49 <br><br> 50 测试全局和局部的action<br> 51 <a href="${pageContext.request.contextPath}/pattern/BookAction_find.action">图书查找</a><br> 52 53 </body> 54 </html>
seccess.jsp
<%@ page language="java" pageEncoding="utf-8" contentType="text/html; charset=utf-8"%> <%@ taglib uri="/struts-tags" prefix="s"%> <html> <head> <title>My JSP 'index.jsp' starting page</title> </head> <body> 局部的success.jsp </body> </html>
BookAction.jsp
<%@ page language="java" pageEncoding="utf-8" contentType="text/html; charset=utf-8"%> <%@ taglib uri="/struts-tags" prefix="s"%> <html> <head> <title>My JSP 'index.jsp' starting page</title> </head> <body> <form action="${pageContext.request.contextPath}/pattern/xxxAction.action" name="form1" method="post"> 图书的名称:<input type="text" name="bookName"> <input type="submit" value="提交"> </form> </body> </html>
UserAction.jsp
<%@ page language="java" pageEncoding="utf-8" contentType="text/html; charset=utf-8"%> <%@ taglib uri="/struts-tags" prefix="s"%> <html> <head> <title>My JSP 'index.jsp' starting page</title> </head> <body> <form action="${pageContext.request.contextPath}/pattern/xxxAction.action" name="form1" method="post"> 用户名:<input type="text" name="username"> <input type="submit" value="提交"> </form> </body> </html>
successGlobal.jsp
<%@ page language="java" pageEncoding="utf-8" contentType="text/html; charset=utf-8"%> <%@ taglib uri="/struts-tags" prefix="s"%> <html> <head> <title>My JSP 'index.jsp' starting page</title> </head> <body> 全局successGlobal.jsp </body> </html>
2、xml
struts.xml
1 <?xml version="1.0" encoding="UTF-8"?> 2 <!DOCTYPE struts PUBLIC 3 "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN" 4 "http://struts.apache.org/dtds/struts-2.3.dtd"> 5 <struts> 6 <!-- 配置动态方法调用,设置成不开启。默认是true是开启状态;false是不开启状态 --> 7 <constant name="struts.enable.DynamicMethodInvocation" value="false"></constant> 8 <include file="cn/zengfansheng/struts/pattern/struts_pattern.xml"></include><!-- 这里用/不用(.)点 --> 9 </struts>
struts_pattern.xml
1 <?xml version="1.0" encoding="UTF-8"?> 2 <!DOCTYPE struts PUBLIC 3 "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN" 4 "http://struts.apache.org/dtds/struts-2.3.dtd"> 5 <struts> 6 <package name="pattern" namespace="/pattern" extends="struts-default"> 7 8 <!-- 一、 9 * struts2框架运行时,默认执行action类中的execute()方法 10 * 在action标签里的method属性:指定的是要执行action类中的哪个方法 11 --> 12 <!-- <action name="bookAction" class="cn.itcast.pattern.BookAction" method="add"> 13 <result name="success">/pattern/success.jsp</result> 14 <result name="add">/pattern/BookAction.jsp</result> 15 </action> --> 16 17 <!-- 二、 18 通配符映射示例(1): 19 <a href="${pageContext.request.contextPath}/pattern/a_add.action"> 通配符映射示例(1)</a><br> 20 <a href="${pageContext.request.contextPath}/pattern/b_add.action"> 通配符映射示例(1)</a><br> 21 <a href="${pageContext.request.contextPath}/pattern/c_add.action"> 通配符映射示例(1)</a><br> 22 --> 23 <!-- <action name="a_add" class="cn.itcast.pattern.BookAction" method="add"> 24 <result name="success">/pattern/success.jsp</result> 25 <result name="add">/pattern/BookAction.jsp</result> 26 </action> 27 <action name="b_add" class="cn.itcast.pattern.BookAction" method="add"> 28 <result name="success">/pattern/success.jsp</result> 29 <result name="add">/pattern/BookAction.jsp</result> 30 </action> 31 <action name="c_add" class="cn.itcast.pattern.BookAction" method="add"> 32 <result name="success">/pattern/success.jsp</result> 33 <result name="add">/pattern/BookAction.jsp</result> 34 </action> --> 35 <!-- 以上配置可以改写如下: --> 36 <!-- "*"就是通配符,匹配的是不一样的内容 --> 37 <!-- <action name="*_add" class="cn.itcast.pattern.BookAction" method="add"> 38 <result name="success">/pattern/success.jsp</result> 39 <result name="add">/pattern/BookAction.jsp</result> 40 </action> --> 41 42 <!-- 三、 43 通配符映射示例(2):<br> 44 <a href="${pageContext.request.contextPath}/pattern/BookAction_add.action"> 图书</a><br> 45 <a href="${pageContext.request.contextPath}/pattern/UserAction_add.action">用户</a><br> 46 --> 47 <!-- <action name="BookAction_add" class="cn.itcast.pattern.BookAction" method="add"> 48 <result name="success">/pattern/success.jsp</result> 49 <result name="add">/pattern/BookAction.jsp</result> 50 </action> 51 <action name="UserAction_add" class="cn.itcast.pattern.UserAction" method="add"> 52 <result name="success">/pattern/success.jsp</result> 53 <result name="add">/pattern/UserAction.jsp</result> 54 </action> --> 55 <!-- 以上配置可以改写如下: --> 56 <!-- {1}表示的是匹配"*"通配符的第一个子串 --> 57 <!-- <action name="*_add" class="cn.itcast.pattern.{1}" method="add"> 58 <result name="success">/pattern/success.jsp</result> 59 <result name="add">/pattern/{1}.jsp</result> 60 </action> --> 61 62 <!-- 63 四、 64 通配符映射示例(3):<br> 65 <a href="${pageContext.request.contextPath}/pattern/BookAction_add.action">图书添加</a><br> 66 <a href="${pageContext.request.contextPath}/pattern/BookAction_delete.action">图书删除</a><br> 67 <br> 68 <br> 69 <a href="${pageContext.request.contextPath}/pattern/UserAction_add.action">用户添加</a><br> 70 <a href="${pageContext.request.contextPath}/pattern/UserAction_delete.action">用户删除</a><br> 71 72 --> 73 <!-- <action name="BookAction_add" class="cn.itcast.pattern.BookAction" method="add"> 74 <result name="add">/pattern/BookAction.jsp</result> 75 </action> 76 <action name="BookAction_delete" class="cn.itcast.pattern.BookAction" method="delete"> 77 <result name="success">/pattern/success.jsp</result> 78 </action> 79 <action name="UserAction_add" class="cn.itcast.pattern.UserAction" method="add"> 80 <result name="add">/pattern/UserAction.jsp</result> 81 </action> 82 <action name="UserAction_delete" class="cn.itcast.pattern.UserAction" method="delete"> 83 <result name="success">/pattern/success.jsp</result> 84 </action> --> 85 <!-- 以上配置可以改写如下: --> 86 <!-- {2}匹配就是"*"通配符的第二个子串 --> 87 <!-- {0}匹配的是"*"通配符的整个串 --> 88 <!-- <action name="*_*" class="cn.itcast.pattern.{1}" method="{2}"> 89 <result name="success">/pattern/success.jsp</result> 90 <result name="add">/pattern/{1}.jsp</result> 91 </action> --> 92 93 <!-- 94 五、 95 动态方法调用!形式:<br> 96 <a href="${pageContext.request.contextPath}/pattern/BookAction!add.action">图书添加</a><br> 97 <a href="${pageContext.request.contextPath}/pattern/BookAction!delete.action">图书删除</a><br> 98 99 动态方法调用: 100 * 页面中请求连接:namespace+actionName+"!"+执行方法名 101 * 在struts.xml文件中,不用配置method属性,而是通过页面的连接动态执行指定方法 102 * 动态方法调用,不经常使用。经常使用的是通配符 103 * 动态方法调用,默认是开启状态 104 --> 105 <!-- 以上配置可以改写如下: --> 106 <!-- <action name="BookAction" class="cn.itcast.pattern.BookAction"> 107 <result name="success">/pattern/success.jsp</result> 108 <result name="add">/pattern/BookAction.jsp</result> 109 </action> --> 110 111 <!-- 112 六、 113 使用通配符定义action<br> 114 <a href="${pageContext.request.contextPath}/pattern/BookAction_add.action">图书添加</a><br> 115 <a href="${pageContext.request.contextPath}/pattern/BookAction_delete.action">图书删除</a><br> 116 --> 117 <!-- <action name="*_*" class="cn.itcast.pattern.{1}" method="{2}"> 118 <result name="success">/pattern/success.jsp</result> 119 <result name="add">/pattern/{1}.jsp</result> 120 </action> --> 121 122 <!-- 123 七、 124 测试全局和局部的action<br> 125 <a href="${pageContext.request.contextPath}/pattern/BookAction_find.action">图书查找</a><br> 126 --> 127 <action name="BookAction_find" class="cn.itcast.pattern.BookAction" method="find"> 128 <!-- 129 如果局部结果类型和全局结果类型,同时存在 130 * 局部结果类型会覆盖了全局的结果类型 131 132 局部结果类型和全局结果类型的作用范围: 133 * 全局结果类型:作用于整个package 134 * 局部结果类型:作用于某个action 135 --> 136 <result name="success">/pattern/success.jsp</result> 137 </action> 138 139 <!-- 140 八、配置全局结果类型 --> 141 <global-results> 142 <result name="success">/pattern/successGlobal.jsp</result> 143 </global-results> 144 145 </package> 146 </struts>
3、java
BookAction.java
import com.opensymphony.xwork2.ActionSupport; @SuppressWarnings("serial") public class BookAction extends ActionSupport { @Override public String execute() throws Exception { System.out.println("BookAction ********* execute()"); return "success"; } /* * 在struts2框架中,action是多实例 */ public BookAction() { System.out.println("BookAction的构造方法"); } /* * 自定义方法: * * 由public来修饰的 * * 必须是String返回类型 * * 不能传参数 * * 方法名自定义 * * * 总之,一句话:除了方法名与execute()不一样,其他所有内容都一样。 * */ public String add() throws Exception { System.out.println("BookAction ********* add()"); return "add"; } public String delete() throws Exception { System.out.println("BookAction ********* delete()"); return "success"; } public String find() throws Exception { System.out.println("BookAction ********* find()"); return "success"; } }
UserAction.java
import com.opensymphony.xwork2.ActionSupport; @SuppressWarnings("serial") public class UserAction extends ActionSupport { @Override public String execute() throws Exception { System.out.println("UserAction ********* execute()"); return "success"; } /* * 自定义方法: * * 由public来修饰的 * * 必须是String返回类型 * * 不能传参数 * * 方法名自定义 * * * 总之,一句话:除了方法名与execute()不一样,其他所有内容都一样。 * */ public String add() throws Exception { System.out.println("UserAction ********* add()"); return "add"; } public String delete() throws Exception { System.out.println("UserAction ********* delete()"); return "success"; } }
by hacket