[原创]java WEB学习笔记58:Struts2学习之路---Result 详解 type属性,通配符映射
2016-09-02 21:20
891 查看
本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用
内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系。
本人互联网技术爱好者,互联网技术发烧友
微博:伊直都在0221
QQ:951226918
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------每个 action 方法都将返回一个 String 类型的值, Struts 将根据这个值来决定响应什么结果.
每个 action 声明都必须包含有数量足够多的 result 元素, 每个 result 元素分别对应着 action 方法的一个返回值
result 元素可以有下面两个属性 name: 结果的名字, 必须与 Action 方法的返回值相匹配, 默认值为 success type: 响应结果的类型. 默认值为 dispatcher
1.result 简介 及 type属性
1)result 是action 节点的子节点
2)result 代表 action 方法执行后,可能去的一个目的地
3)一个 action节点可以配置多个 result 子节点
4)result 的name 属性对应着action 方法可能的返回值
5)result 的type 属性:表示结果的响应类型
6)result 的type 属性值在struts- default 包的result-types 节点中的name属性中定义
<package name="struts-default" abstract="true"> <result-types> <result-type name="chain" class="com.opensymphony.xwork2.ActionChainResult"/> <result-type name="dispatcher" class="org.apache.struts2.dispatcher.ServletDispatcherResult" default="true"/> <result-type name="freemarker" class="org.apache.struts2.views.freemarker.FreemarkerResult"/> <result-type name="httpheader" class="org.apache.struts2.dispatcher.HttpHeaderResult"/> <result-type name="redirect" class="org.apache.struts2.dispatcher.ServletRedirectResult"/> <result-type name="redirectAction" class="org.apache.struts2.dispatcher.ServletActionRedirectResult"/> <result-type name="stream" class="org.apache.struts2.dispatcher.StreamResult"/> <result-type name="velocity" class="org.apache.struts2.dispatcher.VelocityResult"/> <result-type name="xslt" class="org.apache.struts2.views.xslt.XSLTResult"/> <result-type name="plainText" class="org.apache.struts2.dispatcher.PlainTextResult" /> </result-types>
> dispatcher(默认):转发 同servlet中的转发是一致的。结果类型将把控制权转发给应用程序里的指定资源.
结果类型不能把控制权转发给一个外部资源. 若需要把控制权重定向到一个外部资源, 应该使用 redirect 结果类型
> redirect:重定向
redirect 结果类型将把响应重定向到另一个资源, 而不是转发给该资源.
redirect 结果类型接受下面这些参数: location: 用来给出重定向的目的地.它是默认属性 parse: 用来表明是否把 location 参数的值视为一个 OGNL 表达式来解释. 默认值为 true
redirect 结果类型可以把响应重定向到一个外部资源
> redirectActoin:重定向到一个action中
通过redirect 的响应类型也可以便捷的实现 redirectAcion 的功能
redirectAction 结果类型把响应重定向到另一个 Action
redirectAction 结果类型接受下面这些参数: actionName: 指定 “目的地” action 的名字. 它是默认属性
namespace: 用来指定 “目的地” action 的命名空间. 如果没有配置该参数, Struts 会把当前 Action 所在的命名空间作为 “目的地” 的命名空间
> chain:转发到一个Action
chain 结果类型的基本用途是构成一个 action 链: 前一个 action 把控制权转发给后一个 action, 而前一个 action 的状态在后一个 action 中依然保持
chain 结果类型接受下面这些参数: actionName: 指定目标 action 的名字. 它是默认属性
namespace: 用来指定 “目的地” action 的命名空间. 如果没有配置该参数, Struts 会把当前 action 所在的命名空间作为 “目的地” 的命名空间 method: 指定目标 action 方法. 默认值为 execute
<package name="testAction" namespace="/" extends="struts-default"> <action name="TestResult" class="com.jason.struts.action.TestResultAction"> <!-- 转发--> <result name="success" type="dispatcher">/success.jsp</result> <!-- 重定向 --> <result name="login" type="redirect">/login.jsp</result> <!-- 重定向到一个action --> <!-- <result name="index" type="redirectAction"> <param name="actionName">testAction</param> <param name="namespace">/jason</param> </result> --> <!-- 通过 redirect 的响应类型也可以便捷的实现redirectAction 的功能 --> <result name="index" type="redirect">/jason/testAction.do</result> <!-- 转发到一个 Action --> <result name="test" type="chain"> <param name="actionName">testAction</param> <param name="namespace">/jason</param> </result> </action> </package> <package name="testPackage" namespace="/jason" extends="struts-default"> <action name="testAction" class="com.jason.struts.action.TestAction"> <result name="success">/success.jsp</result> </action> </package>
2.通配符映射
1)一个 Web 应用可能有成百上千个 action 声明. 可以利用 struts 提供的通配符映射机制把多个彼此相似的映射关系简化为一个映射关系
2)通配符映射规则
① 若找到多个匹配, 没有通配符的那个将胜出 :即,当
② 若指定的动作不存在, Struts 将会尝试把这个 URI 与任何一个包含着通配符 * 的动作名及进行匹配
③ 被通配符匹配到的 URI 字符串的子串可以用 {1}, {2} 来引用. {1} 匹配第一个子串, {2} 匹配第二个子串…
④ {0} 匹配整个 URI
⑤ 若 Struts 找到的带有通配符的匹配不止一个, 则按先后顺序进行匹配
⑥ * 可以匹配零个或多个字符, 但不包括 / 字符. 如果想把 / 字符包括在内, 需要使用 **. 如果需要对某个字符进行转义, 需要使用 \.
![](https://images2015.cnblogs.com/blog/813692/201609/813692-20160902210322355-91151206.jpg)
![](https://images2015.cnblogs.com/blog/813692/201609/813692-20160902210344777-1987817379.jpg)
![](https://images2015.cnblogs.com/blog/813692/201609/813692-20160902210405371-1302443285.jpg)
<action name="UserAction-*" class="com.jason.struts.action.UserAction" method="{1}"> <result name="{1}-success">/success.jsp</result> </action> <!-- <action name="UserAction-save" class="com.jason.struts.action.UserAction" method="save"> <result name="save-success">/success.jsp</result> </action> <action name="UserAction-update" class="com.jason.struts.action.UserAction" method="update"> <result name="update-success">/success.jsp</result> </action> <action name="UserAction-delete" class="com.jason.struts.action.UserAction" method="delete"> <result name="delete-success">/success.jsp</result> </action> <action name="UserAction-query" class="com.jason.struts.action.UserAction" method="query"> <result name="query-success">/success.jsp</result> </action> -->
UserAction.java
package com.jason.struts.action; public class UserAction { public String save(){ System.out.println("save ..."); return "save-success"; } public String update(){ System.out.println("update ..."); return "update-success"; } public String delete(){ System.out.println("delete ..."); return "delete-success"; } public String query(){ System.out.println("query ... "); return "query-success"; } }
index.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Insert title here</title> </head> <body> <br><br> <a href="UserAction-save.do">User Save</a> <br><br> <a href="UserAction-update.do">User Update</a> <br><br> <a href="UserAction-delete.do">User Delete</a> <br><br> <a href="UserAction-query.do">User Query</a> </body> </html>
3.动态方法调用:了解
![](https://images2015.cnblogs.com/blog/813692/201609/813692-20160902211651371-209469609.jpg)
动态方法调用:
通过 url 动态调用 Action 中的方法 action 声明:
URI:
/struts-app2/Product.action: Struts 调用 Product 类的 execute
/struts-app2/Product!save.action: Struts 调用 Product 类的 save() 方法
默认情况下, Struts 的动态方法调用处于禁用状态
开关:struts-core/org.apache.struts2/default.properties 中struts.enable.DynamicMethodInvocation
相关文章推荐
- [原创]java WEB学习笔记55:Struts2学习之路---详解struts2 中 Action,如何访问web 资源,解耦方式(使用 ActionContext,实现 XxxAware 接口),耦合方式(通过ServletActionContext,通过实现 ServletRequestAware, ServletContextAware 等接口的方式)
- [原创]java WEB学习笔记54:Struts2学习之路--- 编写Struts2 的第一个程序,HelloWord,简述 package ,action,result
- [原创]java WEB学习笔记68:Struts2 学习之路-- 类型转换与复杂属性配合使用
- [原创]java WEB学习笔记59:Struts2学习之路---OGNL,值栈,读取对象栈中的对象的属性,读取 Context Map 里的对象的属性,调用字段和方法,数组,list,map
- [原创]java WEB学习笔记62:Struts2学习之路--表单标签:form,表单标签的属性,textfield, password, hidden,submit ,textarea ,checkbox ,list, listKey 和 listValue 属性,select ,optiongroup ,checkboxlist
- [原创]java WEB学习笔记71:Struts2 学习之路-- struts2常见的内建验证程序及注意点,短路验证,非字段验证,错误消息的重用
- [原创]java WEB学习笔记85:Hibernate学习之路-- -映射 一对一关系 ,基于主键方式实现
- [原创]java WEB学习笔记64:Struts2学习之路--主题
- [原创]java WEB学习笔记72:Struts2 学习之路-- 文件的上传下载,及上传下载相关问题
- [原创]java WEB学习笔记60:Struts2学习之路--Actioin-声明式异常处理
- [原创]java WEB学习笔记66:Struts2 学习之路--Struts的CRUD操作( 查看 / 删除/ 添加) 使用 paramsPrepareParamsStack 重构代码 ,PrepareInterceptor拦截器,paramsPrepareParamsStack 拦截器栈
- [原创]java WEB学习笔记67:Struts2 学习之路-- 类型转换概述, 类型转换错误修改,如何自定义类型转换器
- [原创]java WEB学习笔记69:Struts2 学习之路-- 消息处理与国际化,概述,配置国际资源文件,访问国际化消息,通过超链接切换语言
- [原创]java WEB学习笔记74:Struts2 学习之路--自定义拦截器,struts内建的拦截器
- [原创]java WEB学习笔记77:Hibernate学习之路---Hibernate 版本 helloword 与 解析,.环境搭建,hibernate.cfg.xml文件及参数说明,持久化类,对象-关系映射文件.hbm.xml,Hibernate API (Configuration 类,SessionFactory 接口,Session 接口,Transaction(事务))
- [原创]java WEB学习笔记73:Struts2 学习之路-- strut2中防止表单重复提交
- [原创]java WEB学习笔记84:Hibernate学习之路-- -映射 一对一关系 ,基外键的方式实现
- [原创]java WEB学习笔记81:Hibernate学习之路--- 对象关系映射文件(.hbm.xml):hibernate-mapping 节点,class节点,id节点(主键生成策略),property节点,在hibernate 中 java类型 与sql类型之间的对应关系,Java 时间和日期类型的映射,Java 大对象类型 的 映射 (了解),映射组成关系
- [原创]java WEB学习笔记56:Struts2学习之路---Struts 版本的 登录 demo
- [原创]java WEB学习笔记53:Struts2学习之路---前奏:使用 Filter 作为控制器的 MVC