Struts2 Result详解
1,Result原理
1) Result组件是Struts2中用于输出的组件,实际上就是Java代码。
2)Struts2中预制了10中类型的Result,这些Result什么在struts-default.xml中。
这些类实际上都事先了统一的接口:Result.
- <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>
3)重点讲解一下类型的Result
--dispatcher (默认类型,转发到一个页面)
当一个请求到来,服务器直接转发到另一个页面,不能是另一个action。由于这个过程在服务器内部完成,客户端(浏览器)并不知道,所以在地址栏不会显示真实访问的页面,而显示都是所请求的action的地址。在servlet中相当与forword转发。
--redirect (重定向到一个页面)。
当一个请求到来,服务端将实际地址response给浏览器,然后浏览器重新发起请求,这个过程,浏览器是知道访问的页面的实际地址的,所以在浏览器的地址栏显示的是实际访问的jsp页面地址。但是这种类型不能重定向到一个action.
--chain 转发到一个action,而不是页面
--redirectAction 重定向到一个action
跳转到其他包的action:
- <action name="login" class="...">
- <!-- Chain to another namespace -->
- <result type="chain">
- <param name="actionName">dashboard</param>
- <param name="namespace">/secure</param>
- </result>
- </action>
使用redirectAction 带参数
- <span style="font-size: 14px; font-family: 'Microsoft YaHei', 微软雅黑, SimHei, tahoma, arial, helvetica, sans-serif;"><action name="temp" class="com.lydia.web.action.TempAction">
- <result type="redirectAction">
- <param name="actionName">test.action</param>
- <param name="name">${name}</param>
- </result>
- </action></span>
--stream
--json
4)使用方式
<result name="ok" type="类型">
</result>
2、Stream类型的Result详解
1)Stream是用于向页面直接输出二进制数据,比如登陆页面的验证码图片,就可以在服务端生成,然后由这种类型的Result输出
2) 使用
<result name="success" type="stream">
<param name="inputName">
输出属性名
</param>
</result>
--在struts.xml中,我们可以使用param来给组件的属性注入默认值
--<param name="inputName">,这里inputName对应的是StreamResult的inputName属性,这样配置相当于会调用StreamResult的setInputName方法给它注入属性值。
--注入的属性值,是Action中的某个属性的名称,如下图,inputName是StreamResult中的一个属性。在Action中作二进制输出的属性要求其类型为InputStream。
-- Result会创建一个输出流,接到Action中的输入流,向页面输出。
3) 验证码案例:
struts.xml中配置:
- <!-- 生成验证码的Action -->
- <action name="createImage"
- class="com.netctoss.action.CreateImageAction">
- <result name="success" type="stream">
- <param name="inputName">
- imageStream
- </param>
- </result>
- </action>
CreateImageAction.java
- public class CreateImageAction
- extends BaseAction {
- //ouput
- private InputStream imageStream;
- public String execute() {
- //生成验证码图片
- Map<String,BufferedImage> map =
- ImageUtil.createImage();
- //通过遍历得到唯一生成的验证码
- String imageCode =
- map.keySet().iterator().next();
- //将验证码记录到session,在登录验证时使用
- session.put("imageCode", imageCode);
- //根据验证码,得到图片
- BufferedImage image = map.get(imageCode);
- //将图片转换为输入流,由result作输出
- try {
- imageStream =
- ImageUtil.getInputStream(image);
- } catch (IOException e) {
- e.printStackTrace();
- return "error";
- }
- return "success";
- }
- public InputStream getImageStream() {
- return imageStream;
- }
- public void setImageStream(InputStream imageStream) {
- this.imageStream = imageStream;
- }
- }
- <script language="javascript" type="text/javascript">
- function change(imageObj) {
- imageObj.src = "createImage?date=" + new Date().getTime();
- }
- </script>
- <tr>
- <td class="login_info">验证码:</td>
- <td class="width70"><input name="code" type="text" class="width70" /></td>
- <td><img src="createImage" alt="验证码" title="点击更换" οnclick="change(this);"/></td>
- <td><span class="required"></span></td>
- </tr>
BaseAction.java 实现接口SessionAware
- /**
- * 所有Action的父类,可以将通用的代码
- * 提取出来放到父类中。
- * 这里,我们让BaseAction实现接口SessionAware,
- * 那么继承与BaseAction的Action就相当于实现了
- * 这个接口。在实例化Action之后,Struts2会自动
- * 调用setSession方法把session注入给Action,
- * 这里我们利用全局变量session来接收,Action
- * 可以在调用业务方法时使用它来调用session。
- */
- public class BaseAction implements SessionAware {
- protected Map<String, Object> session;
- public void setSession(Map<String, Object> session) {
- this.session = session;
- }
- }
3、Json类型的Result详解
1) 向页面输出json格式的字符串
2) struts2 并没有预制这种类型的Result,但是他非常常用,往往用于页面的异步校验。
3) 使用步骤
a,导包:struts2-json-plugin-2.1.8.1.jar
b,struts.xml中将要使用json类型Result的package继承json-default
c,在struts.xml中配置result
--最常用,只是输出单个属性
- <result name="success" type="json" >
- <param name="root">
- 指定Action的一个属性名
- <param>
- </result>
注意: name="root"是固定用法;
如指定的属性是boolean类型,那么Result会把这个属性做成字符串"true";
如指定的属性是JavaBean,那么Result会把这个属性做成字符串{"code":"12"}
--输出多个属性
- <result name="success" type="json">
- <param name="includeProperties">
- 属性名1,属性名2,...
- </param>
- </result>
注意:Result会将这一组属性做成一个json输出,
如Action中有属性code="aaa",name="zs"
可以将这2个属性做成一个json
{"code":"aaa","name":"zs"}
--输出Action中的所有属性
- <result name="success" type="json">
- </result>
注意:Result会将Action中所有的属性做成一个
json输出{"":"","":""}
Struts2 Result详解相关推荐
- struts2配置详解(struts.xml配置详解)
本文转自:http://www.cnblogs.com/fmricky/archive/2010/05/20/1740479.html struts.xml是我们在开发中利用率最高的文件,也是Stru ...
- Struts2之struts2文件下载详解
一.学习案例:通过在downloadfile.jsp页面点击"下载文件",查看文件是否可以成功下载. 二.案例分析:struts2文件下载只需简单配置即可. a)先在下载页面(do ...
- [原创]java WEB学习笔记58:Struts2学习之路---Result 详解 type属性,通配符映射
本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...
- JavaMelody+Spring+struts2配置详解——系统监控
2019独角兽企业重金招聘Python工程师标准>>> 引言:JavaMelody的目的是监控Java或Java EE应用服务器在QA和生产环境.它不是一个用来模拟用户要求的工具而是 ...
- struts2标签详解
struts2标签讲解 要使用Struts2的标签,只需要在JSP页面添加如下一行定义即可:<%@ taglib prefix="s" uri="/struts-t ...
- struts2.xml详解
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN&quo ...
- Struts2技术详解
http://www.cnblogs.com/bettertanme/p/3388739.html 1, 当Action设置了某个属性后,Struts将这些属性封装一个叫做Struts.valueSt ...
- struts2框架详解
一.struts2简介 Struts2是一个基于MVC设计模式的Web应用框架,它本质上相当于一个servlet,在MVC设计模式中,Struts2作为控制器(Controller)来建立模型与视图的 ...
- Struts2框架详解(二)
Struts2结果页面配置 全局结果页面 场景:多个action,有相同的方法返回值,且都到同一个结果页面 需求:创建两个action,执行默认的方法execute方法,让两个action的方法都返回 ...
最新文章
- FaceBook开源PyTorch3D:基于PyTorch的新3D计算机视觉库
- 关于Advisor注入
- 数据库MySQL关系模型之基本概念
- [转].NET下读取PDF文本
- 怎么把分钟转化成秒_怎么利用抖音短视频引流,手把手教你如何玩转抖音流量...
- 从JDK 6升级到JDK 7过程中遇到的一个问题(卸载rpm)
- 短信认证方案,用手机短信进行上网认证如何实现?
- awk 内嵌正则 提取字符串_使用awk提取字符串中的数字或字母
- gitlab更新配置无效_Gitlab 快速的搭建
- 直播丨如何通过APEX实现数据库自动晨检功能
- 旷视申请赴港IPO:阿里蚂蚁金服持股近30%
- 《How to Write and Publish a Scientfic Paper》 Chapter 1
- MATLAB绘图/数据的可视化
- SPSS学习 日记
- 手机APP如何访问局域网服务器
- 计算机考试当天准考证身份证丢失
- 首页大广告展示——淘淘商城(十六)
- css实现元素翻转(不是旋转)
- osgEarth编译
- 开发中常见的算法汇总之-基数排序
热门文章
- 【数字信号处理】序列傅里叶变换 ( 傅里叶变换实例 | 矩形窗函数 | 傅里叶变换 | 傅里叶变换幅频特性 | 傅里叶变换相频特性 )
- 【报错信息】Google Play 上架报错 ( Your app contains ads that do not comply with our Families ad | 退出亲子同乐计划 )
- 【C 语言】字符串拷贝 ( 优化指针操作 )
- 【Java 泛型】泛型用法 ( 泛型编译期擦除 | 上界通配符 <? extends T> | 下界通配符 <? super T> )
- 【Flutter】屏幕像素适配方案 ( flutter_screenutil 插件 )
- 【Google Play】正式版上架流程 ( 创建版本 | 设置国家地区 | 发布正式版 )
- 【运筹学】表上作业法 ( 示例 | 使用 “ 最小元素法 “ 找初始基可行解 )
- socket_循环发送消息
- [bzoj2815] [洛谷P2597] [ZJOI2012] 灾难
- C# 中泛型与非泛型?(摘)