[原创]java WEB学习笔记58:Struts2学习之路---Result 详解 type属性,通配符映射
本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用
内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系。
本人互联网技术爱好者,互联网技术发烧友
微博:伊直都在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 找到的带有通配符的匹配不止一个, 则按先后顺序进行匹配
⑥ * 可以匹配零个或多个字符, 但不包括 / 字符. 如果想把 / 字符包括在内, 需要使用 **. 如果需要对某个字符进行转义, 需要使用 \.
<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.动态方法调用:了解
动态方法调用:
通过 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学习笔记58:Struts2学习之路---Result 详解 type属性,通配符映射的更多相关文章
- Ext.Net学习笔记22:Ext.Net Tree 用法详解
Ext.Net学习笔记22:Ext.Net Tree 用法详解 上面的图片是一个简单的树,使用Ext.Net来创建这样的树结构非常简单,代码如下: <ext:TreePanel runat=&q ...
- Ext.Net学习笔记23:Ext.Net TabPanel用法详解
Ext.Net学习笔记23:Ext.Net TabPanel用法详解 上面的图片中给出了TabPanel的一个效果图,我们来看一下代码: <ext:TabPanel runat="se ...
- linux初级学习笔记六:linux用户及权限详解!(视频序号:03_4)
本节学习的命令:/etc/passwd,/etc/shadow,/etc/group文件详解 本节学习的技能: 安全上下文 文件与目录的权限管理 影子命令 用户,用户组类别详解 /etc/passwd ...
- 【Todo】Java学习笔记 100==100 & Reflection API & Optional类详解 & DIP、IoC、DI & token/cookie/session管理会话方式
为什么1000 == 1000返回为False,而100 == 100会返回为True? Link Java Reflection API:Link Java8 Optional 类深度解析: L ...
- web前端学习(四)JavaScript学习笔记部分(9)-- JavaScript面向对象详解
1.认识面向对象 1.1.概念 1.一切事物皆是对象 2.对象具有封装和继承特性 3.信息隐藏(类的信息隐藏,包括属性和方法) <!DOCTYPE html> <html lang= ...
- web前端学习(四)JavaScript学习笔记部分(5)-- 事件流详解
1.JS事件详解-事件流 1.1.事件流 1.事件流: 描述的是在页面中接受事件的顺序 2.事件冒泡: 由最具体的元素接收,然后逐级上传播至最不具体的节点(文档) 3.事件捕获: 最不具体的节点先接收 ...
- web前端学习(四)JavaScript学习笔记部分(2)-- JavaScript语法详解
2.1.Javascript语法-运算符(1) 复数运算符 %取余 ++ -- 赋值运算符 += -= *= /= %= 字符串操作 <!DOCTYPE html> <html la ...
- web前端学习(三)css学习笔记部分(4)-- CSS选择器详解
4. 元素选择器详解 4.1 元素选择器 4.2 选择器分组 用英文逗号","相连,使用相同的样式表 使用通配符对所有元素进行通用设定. 4.3 类选择器详解 4.3.1. ...
- Ext.Net学习笔记07:Ext.Net DirectMethods用法详解
使用DirectMethods在JS中调用C#方法 我承认,这个标题有点噱头,其实应该是通过DirectMethods,在JS中通过异步调用的方式执行服务器端的方法. 来看一个例子吧: [Direct ...
随机推荐
- Fortran并行计算的一些例子
以下例子来自https://computing.llnl.gov/tutorials/openMP/exercise.html网站 一.打印线程(Hello world) C************* ...
- Oracle用户、权限、角色管理(转)
http://blog.csdn.net/junmail/article/details/4381287 Oracle 权限设置一.权限分类:系统权限:系统规定用户使用数据库的权限.(系统权限是对用户 ...
- 蓝牙4.0的LM层说明
1.概念 The Link Manager Protocol (LMP) is used to control and negotiate all aspects of the operation o ...
- JAVA缓存技术之EhCache
最近再ITEYE上看到关于讨论JAVA缓存技术的帖子比较多,自己不懂,所以上网大概搜了下,找到一篇,暂作保存,后面如果有用到可以参考.此为转贴,帖子来处:http://cogipard.info/ar ...
- importSTV的使用
一:由HDFS将数据直接导入到HBase中 1.生成TSV文件 2.内容 3.上传到HDFS 4.运行 export HBASE_HOME=/etc/opt/modules/hbase-0.98.6- ...
- copy构造函数的秘密
1.先来看这段代码: MyString::MyString(){ this->mstr = NULL;} MyString::MyString(MyString &str){ //用一个 ...
- Xcode 之自己编译静态库
今天介绍下,如何利用Xcode,新建一个静态库,以及如何编译成i386.armv7.armv7s 等平台架构. 开发环境:MAC OS X 10.9.4 + Xcode 5.0.2 背景知识:库分两种 ...
- Maven实战(三)Eclipse构建Maven项目
1. 安装m2eclipse插件 要用Eclipse构建Maven项目,我们需要先安装meeclipse插件 点击eclipse菜单栏Help->Eclipse Marketplac ...
- Emiller's Advanced Topics In Nginx Module Development
Emiller的Nginx模块开发指南 By Evan Miller DRAFT: August 13, 2009 (changes) 翻译:Kongch @2010年1月5日 0:04am -- 2 ...
- easyui Tooltip 气泡信息提示
<!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content ...