Struts2学习---result结果集
这一章节主要介绍如何配置结果集,分为以下几个知识点:
- 结果集类型(result type)
- 全局结果集(global types)
- 动态结果集(dynamic type)
- 带有参数的结果集(type with params)
result type:
结果集类型一共有十一种:
- dispatcher
- redirect
- chain
- redirectAction
- freemarker
- httpheader
- stream
- velocity
- xslt
- plaintext
- tiles
最常用的是前两种:一个是请求转发,一个是请求重定向。
还会用到的就是freemarker(模板),和stream(用于下载)。
我们的配置文件默认情况下都是dispatcher,请求转发,将struts得到的请求通过服务器转到相应的页面。
这里的requet是一次请求,二redirect是两次请求。(这个和javaweb里面的dispatcher和redirect相同这里就不做太多解释)。
chain是转向一个action,也就是将请求转到同一个包下的action(转到不同包下的action后面介绍)。
redirectAction是重定向到另一个Action,状态和redirect相同,作用和chain相同。
本文只介绍以上类型。接下来我们来看看具体是怎么配置的(dispatcher和redirect省略)。
<action name="page1" class="">
<result type="dispatcher">/xxx.jsp</result>
</action>
<action name="page2" class="">
<result type="redirect">/xxx.jsp</result>
</action>
<action name="page3" class="">
<result type="chain">page1</result>
</action>
<action name="page3" class="">
<result type="redirectAction">page1</result>
</action>
配置很简单,接下来我们来看看不同包下chain和redirectAction怎么配置:
<package name="public" extends="struts-default" namespace="/">
<action name="page" class="">
<result type="chain">
<param name="actionName">action1</param>
<param name="namespace">/secure</param>
</result>
</action>
</package>
<package name="secure" extends="struts-default" namespace="/secure">
<action name="action1" class="">
<result>xx.jsp</result>
</action>
</package>
只要在result里面定义想要调用的namespace和actionName参数,struts就会根据你的指定调用对应的action,上面的是chain的演示配置,redirectAction和它配置相同只要将type改为redirectAction就可以了。
全局结果集:
全局结果集,顾名思义就是全局的,就像java代码里面的全局变量一样,可以在整个程序里面被调用。
当我们在一个程序里面想返回一个错误页面的时候,总不能每个action里面都定义一个result,然后反悔error.jsp吧。
所以这个时候我们就可以用到全局结果集了(全局结果集在一个包里面“全局”)。
具体这样定义:
<global—results>
<result name="errorpage">/error.jsp</result>
</global—results>
这样配置过后,当前包的action里就可以返回errorpage达到返回作物页面的目的,省去了我们多次配置。
当其他包的action也想要获得这个全局结果集的时候只需要在它package extends属性里面继承含有全局属性的包就行了。
动态结果集
动态结果集、
struts.xml:
<action name="" class="xx.xxAction">
<result>${r}</result>
</action>
public class UserAction extends ActionSupport {
private int type;
private String r;
public String getR() {
return r;
}
public void setR(String r) {
this.r = r;
}
public int getType() {
return type;
}
public void setType(int type) {
this.type = type;
}
@Override
public String execute() throws Exception {
if(type == 1) r="/user_success.jsp";
else if (type == 2) r="/user_error.jsp";
return "success";
}
}
动态结果集的原理:当我们发送请求的时候,里面包含一个请求参数,我们在execute中根据参数将type我们将r赋予不同的值(页面字符串),并放入值栈中保存。
result里面包含一个ognl表达式,用来取得值栈里面r的数据。
这样就完成了动态的结果集。
带有参数的结果集
当客户端发送了一个请求,这个请求含有参数,我们将这个请求重定向到其他页面,那么我们怎么将这个参数继续带到其他页面呢?
请求带了一个名为type的参数
<result type="redirect">/user_success.jsp?t=${type}</result>
在jsp我们可以这样取值:
<s:property value="#parameters.t"/>
这个语句等价于:
<s:property value="ActionContext.getContext().parameters.t"/>
到这里我们的结果集就讲完了。
如有错误,欢迎指正。
Struts2学习---result结果集的更多相关文章
- Struts2框架(5)---result结果集
result结果集 上一篇文章主要讲Struts2框架(4)---Action类访问servlet这篇主要讲result结果集 在Struts.xml中的result元素指的是:指定动作类的动作方法执 ...
- struts2学习笔记之七:Result类型
一:关于Struts2的type类型,也就是Result类型,他们都实现了共同的接口Result,都实现了execute方法 他们体现了策略模式,具体Result类型参见:struts-default ...
- Struts2之Result详解
上一篇我们把Struts2中的Action接收参数的内容为大家介绍了,本篇我们就一起来简单学习一下Action的4种Result type类型,分为:dispatcher(服务端页面跳转):redir ...
- struts2 学习01
知识补充: Java 平台有三个版本,这使软件开发人员.服务提供商和设备生产商可以针对特定的市场进行开发: * Java SE(Java Platform,Standard Edition).Java ...
- struts2学习笔记之二:基本环境搭建
学习struts2有一段时间了,作为一个运维人员学习的时间还是挺紧张的,写这篇文件为了方便以后复习时使用 环境: MyEclipse 10 tomcat6 jdk1.6 首先建立一个web项目,并 ...
- [原创]java WEB学习笔记75:Struts2 学习之路-- 总结 和 目录
本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...
- [原创]java WEB学习笔记66:Struts2 学习之路--Struts的CRUD操作( 查看 / 删除/ 添加) 使用 paramsPrepareParamsStack 重构代码 ,PrepareInterceptor拦截器,paramsPrepareParamsStack 拦截器栈
本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...
- Struts2学习笔记⑧
今天是Struts2学习笔记的最后一篇文章了.用什么做结尾呢,这两天其实还学了很多东西,没有记录下,今天就查漏补缺一下. 文件上传与下载.FreeMarker以及昨天没做完的例子 文件上传与下载 文件 ...
- Struts2学习笔记①
Struts2 学习笔记① 所有的程序学习都从Hello World开始,今天先跟着书做一个HW的示例. Struts2是一套MVC框架,使用起来非常方便,接触到现在觉得最麻烦的地方是配置文件.我的一 ...
随机推荐
- 最全的iOS数据存储方法
目的 项目准备运用的Core Data进行本地数据存储,本来打算只写一下Core Data的,不过既然说到了数据存储,干脆来个数据存储基础大总结!本文将对以下几个模块进行叙述. 沙盒 Plist Pr ...
- ASP.NET Core 认证与授权[7]:动态授权
ASP.NET Core 中基于策略的授权旨在分离授权与应用程序逻辑,它提供了灵活的策略定义模型,在一些权限固定的系统中,使用起来非常方便.但是,当要授权的资源无法预先确定,或需要将权限控制到每一个具 ...
- 维多利亚的秘密 golang入坑系统
原文在gitbook,字字原创,版权没有,转载随意. 在写本文的前一天,2017维密在上海开始了. 为了纪念屌丝界的盛世,特为本节起名维多利亚的秘密.现在的社会,要想出名只有抓眼球.所以写份技术文章, ...
- 《java.util.concurrent 包源码阅读》18 Exchanger
Exchanger可以看做双向数据传输的SynchronousQueue,即没有生产者和消费者之分,任意两个线程都可以交换数据. 在JDK5中Exchanger被设计成一个容量为1的容器,存放一个等待 ...
- 变位词(0029)-swustoj
变位词(0029)水题 变位词如果两个单词的组成字母完全相同,只是字母的排列顺序不一样,则它们就是变位词,两个单词相同也被认为是变位词.如tea 与eat , nic 与cin, ddc与dcd, a ...
- java连接VMware虚拟机Oracle数据库问题
最近在电脑上装了虚拟机,为的是在虚拟机上安装Oracle数据库,Oracle实在太占内存,配置低的电脑装个Oracle几乎就瘫了,没办法,搞个虚拟机玩玩.我虚拟机用的是xp系统,顺便怀念下经典.装好O ...
- 51Nod 1090 3个数和为0 set 二分优化
给出一个长度为N的无序数组,数组中的元素为整数,有正有负包括0,并互不相等.从中找出所有和 = 0的3个数的组合.如果没有这样的组合,输出No Solution.如果有多个,按照3个数中最小的数从小到 ...
- Undefined index: HTTP_RAW_POST_DATA的解决办法
$postStr = $GLOBALS["HTTP_RAW_POST_DATA"]; 替换为 $postStr = isset($GLOBALS['HTTP_RAW_POST_DA ...
- Golang学习--包管理工具glide
上一篇文章中我们已经成功的运行了go的代码,这是我们迈出的最基础的一步. 一个项目通常会依赖很多外部的库,当依赖的库比较多的时候,手工管理就会比较麻烦,这个时候就需要包管理工具出场了,帮你管理好所有依 ...
- Js 作用域与作用域链与执行上下文不得不说的故事 ⁄(⁄ ⁄•⁄ω⁄•⁄ ⁄)⁄
最近在研究Js,发现自己对作用域,作用域链,活动对象这几个概念,理解得不是很清楚,所以拜读了@田小计划大神的博客与其他文章,受益匪浅,写这篇随笔算是自己的读书笔记吧~. 作用域 首先明确一个概念,js ...