[原创]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 ...
随机推荐
- final与static
一.final 根据程序上下文环境,Java关键字final有“这是无法改变的”或者“终态的”含义,它可以修饰非抽象类.非抽象类成员方法和变量.你可能出于两种理解而需要阻止改变:设计或效率. fina ...
- C++ - 扩展欧几里德算法非递归实现
#include <iostream> using namespace std; int x, y; void get_x_y(int a, int b){ int q, r[3], s[ ...
- 一段检测IP设备是否在线的代码
原理是通过发送ARP包来检测 uses WinSock function SendARP(const DestIP, SrcIP: Cardinal; pMacAddr: PULONG; var Ph ...
- sp.net2.0中的新增控件BulletedList的一些高级用法
asp.net2.0新增了一个BulletedList控件,通过它可以以列表形式显示数据,而不必再用Repeater,Datalist等实现相同的效果.今天做程序的时候正好用到了这个控件,就把它的一些 ...
- Redis学习笔记(6)-SortedSet
package cn.com; import java.util.HashMap; import java.util.Map; import java.util.Set; import redis.c ...
- 关于HBase的概述
1.hbase的特点 ->数据存储量可以达到亿级别数据维持在秒级 ->按列存储的数据库 ->能够存储上百万列 ->hbase的底层存储依赖于HDFS ->如何扩展hbas ...
- Android 代码中文字在手机上显示乱码问题解决方法
在学习Android过程中,用于测试时发现,代码中的中文在真机上会显示乱码, 网上查阅了些资料,参考如下: http://www.androidchina.net/3024.html http://b ...
- pushViewController addSubview presentModalViewController视图切换
1.pushViewController和popViewController来进行视图切换,首先要确保根视图是NavigationController,不然是不可以用的, pushViewContro ...
- 各个JSON技术的比较
JSON技术的调研报告 一 .各个JSON技术的简介和优劣1.json-libjson-lib最开始的也是应用最广泛的json解析工具,json-lib 不好的地方确实是依赖于很多第三方包,包括com ...
- UIBezierPath 画线
使用UIBezierPath类可以创建基于矢量的路径,这个类在UIKit中.此类是Core Graphics框架关于path的一个封装.使用此类可以定义简单的形状,如椭圆或者矩形,或者有多个直线和曲线 ...