Struts2通配符和动态方法调用

来源:互联网 发布:mt管理器源码 编辑:程序博客网 时间:2024/06/05 21:53

通配符和动态方法调用

<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE struts PUBLIC"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN""http://struts.apache.org/dtds/struts-2.3.dtd"><struts><package name="pattern" namespace="/pattern" extends="struts-default"><!-- 配置全局结果类型 --><global-results><result name="success">/pattern/successGlobal.jsp</result></global-results><!-- * struts2框架运行时,默认执行action类中的execute()方法 * 在action标签里的method属性:指定的是要执行action类中的哪个方法--><!-- <action name="bookAction" class="cn.itcast.pattern.BookAction" method="add"><result name="success">/pattern/success.jsp</result><result name="add">/pattern/BookAction.jsp</result></action> --><!-- <a href="${pageContext.request.contextPath}/pattern/a_add.action"> 通配符映射示例(1)</a><br>    <a href="${pageContext.request.contextPath}/pattern/b_add.action"> 通配符映射示例(1)</a><br>    <a href="${pageContext.request.contextPath}/pattern/c_add.action"> 通配符映射示例(1)</a><br> --><!-- <action name="a_add" class="cn.itcast.pattern.BookAction" method="add"><result name="success">/pattern/success.jsp</result><result name="add">/pattern/BookAction.jsp</result></action><action name="b_add" class="cn.itcast.pattern.BookAction" method="add"><result name="success">/pattern/success.jsp</result><result name="add">/pattern/BookAction.jsp</result></action><action name="c_add" class="cn.itcast.pattern.BookAction" method="add"><result name="success">/pattern/success.jsp</result><result name="add">/pattern/BookAction.jsp</result></action> --><!-- 以上配置可以改写如下: --><!-- "*"就是通配符,匹配的是不一样的内容 --><!-- <action name="*_add" class="cn.itcast.pattern.BookAction" method="add"><result name="success">/pattern/success.jsp</result><result name="add">/pattern/BookAction.jsp</result></action> --><!-- <a href="${pageContext.request.contextPath}/pattern/BookAction_add.action"> 图书</a><br>    <a href="${pageContext.request.contextPath}/pattern/UserAction_add.action">用户</a><br> --><!-- <action name="BookAction_add" class="cn.itcast.pattern.BookAction" method="add"><result name="success">/pattern/success.jsp</result><result name="add">/pattern/BookAction.jsp</result></action><action name="UserAction_add" class="cn.itcast.pattern.UserAction" method="add"><result name="success">/pattern/success.jsp</result><result name="add">/pattern/UserAction.jsp</result></action> --><!-- 以上配置可以改写如下: --><!-- {1}表示的是匹配"*"通配符的第一个子串 --><!-- <action name="*_add" class="cn.itcast.pattern.{1}" method="add"><result name="success">/pattern/success.jsp</result><result name="add">/pattern/{1}.jsp</result></action> --><!-- <a href="${pageContext.request.contextPath}/pattern/BookAction_add.action">图书添加</a><br>    <a href="${pageContext.request.contextPath}/pattern/BookAction_delete.action">图书删除</a><br>     <br>     <br>    <a href="${pageContext.request.contextPath}/pattern/UserAction_add.action">用户添加</a><br>    <a href="${pageContext.request.contextPath}/pattern/UserAction_delete.action">用户删除</a><br> --><!-- <action name="BookAction_add" class="cn.itcast.pattern.BookAction" method="add"><result name="add">/pattern/BookAction.jsp</result></action><action name="BookAction_delete" class="cn.itcast.pattern.BookAction" method="delete"><result name="success">/pattern/success.jsp</result></action><action name="UserAction_add" class="cn.itcast.pattern.UserAction" method="add"><result name="add">/pattern/UserAction.jsp</result></action><action name="UserAction_delete" class="cn.itcast.pattern.UserAction" method="delete"><result name="success">/pattern/success.jsp</result></action> --><!-- 以上配置可以改写如下: --><!-- {2}匹配就是"*"通配符的第二个子串 --><!-- {0}匹配的是"*"通配符的整个串 --><!-- <action name="*_*" class="cn.itcast.pattern.{1}" method="{2}"><result name="success">/pattern/success.jsp</result><result name="add">/pattern/{1}.jsp</result></action> --><!-- <a href="${pageContext.request.contextPath}/pattern/BookAction!add.action">图书添加</a><br>    <a href="${pageContext.request.contextPath}/pattern/BookAction!delete.action">图书删除</a><br>        动态方法调用:    * 页面中请求连接:namespace+actionName+"!"+执行方法名    * 在struts.xml文件中,不用配置method属性,而是通过页面的连接动态执行指定方法    * 动态方法调用,不经常使用。经常使用的是通配符    * 动态方法调用,默认是开启状态 --><!-- <action name="BookAction" class="cn.itcast.pattern.BookAction"><result name="success">/pattern/success.jsp</result><result name="add">/pattern/BookAction.jsp</result></action> --><!-- <a href="${pageContext.request.contextPath}/pattern/BookAction_add.action">图书添加</a><br>    <a href="${pageContext.request.contextPath}/pattern/BookAction_delete.action">图书删除</a><br> --><!-- <action name="*_*" class="cn.itcast.pattern.{1}" method="{2}"><result name="success">/pattern/success.jsp</result><result name="add">/pattern/{1}.jsp</result></action> --><!-- <a href="${pageContext.request.contextPath}/pattern/BookAction_find.action">图书查找</a><br> --><action name="BookAction_find" class="cn.itcast.pattern.BookAction" method="find"><!-- 如果局部结果类型和全局结果类型,同时存在* 局部结果类型会覆盖了全局的结果类型局部结果类型和全局结果类型的作用范围:* 全局结果类型:作用于整个package* 局部结果类型:作用于某个action --><result name="success">/pattern/success.jsp</result></action></package></struts>



通配符举例--BookAction

public class BookAction extends ActionSupport {public String execute() throws Exception {System.out.println("BookAction ********** execute()");return null;}/* * 显示图书添加页面 */public String add(){System.out.println("显示图书添加页面");return "add";}}

通配符举例--struts-pattern.xml



<struts>   <package name="pattern" namespace="/pattern" extends="struts-default"><!-- method:指定执行调用action中的方法,如果不加该属性,默认调用action中的execute()方法 -->            <action name="BookAction" class="cn.itcast.pattern.BookAction" method="add">         <result name="add">/pattern/BookAction.jsp</result>      </action>   </package></struts>

通配符举例—BookAction如何自定义方法

在action中增加新的方法的要求:
方法最好要用public修饰
方法的名称自定义
方法没有参数
方法的返回值为String

要定义的方法就是与execute方法的方法名称不同,其他的都一样,只有这样的定义方法struts2才识别


通配符映射

一个 Web 应用可能有成百上千个 action 声明. 可以利用 struts 提供的通配符映射机制把多个彼此相似的映射关系简化为一个映射关系
通配符映射规则
若找到多个匹配, 没有通配符的那个将胜出
若指定的动作不存在, Struts 将会尝试把这个 URI 与任何一个包含着通配符 * 的动作名及进行匹配
若 Struts 找到的带有通配符的匹配不止一个, 最后一个匹配将胜出
被通配符匹配到的 URI 字符串的子串可以用 {1}, {2} 来引用. {1} 匹配第一个子串, {2} 匹配第二个子串…
{0} 匹配整个 URI
* 可以匹配零个或多个字符, 但不包括 / 字符. 如果想把 / 字符包括在内, 需要使用 **. 如果需要对某个字符进行转义, 需要使用 \.

通配符映射示例(1)


通配符映射示例(2)

通配符映射示例(3)


特殊

<!-- {0}匹配的是"*"通配符的整个串 -->

动态方法调用


使用通配符定义action


关闭动态方法

<!-- 配置动态方法调用,设置成不开启。默认是true是开启状态;false是不开启状态 -->    <constant name="struts.enable.DynamicMethodInvocation" value="false"></constant>


全局结果

当多个action中都使用到了相同result,这时我们应该把result定义为全局结果

<package....>

  <global-results>

  <result name="message">/message.jsp</result>

  </global-results>

</package>

:局部的会覆盖全局

全局结果和局部结果的区别:

       全局结果:对该包下所有的action配置起作用

        * 局部结果:只对当前的action起作用

Struts2中 应用范围内action的实例,每个请求都会创建一个action实例


0 0