当Action处理完用户请求时,处理结果应该通过视图资源实现,但将哪个视图呈现给浏览者呢。由<result.../>来决定 Action处理完用户请求后,返回一个普通字符串。整个普通字符串就是一个逻辑视图名。 通过配置文件将逻辑视图和物理视图联系起来。一旦系统收到Action返回的逻辑视图名,就把对应的物理视图呈现给浏览者。 struts2支持多种视图技术。当一个Action处理用户请求后,仅仅返回一个字符串,这个字符串只是逻辑视图名 逻辑视图名可以和很多视图资源关联。例如 JSP,FreeMarker等

一、结果类型

<result../>属性
name:逻辑视图名称,应该与Action返回的字符串相同,如果不填写,默认为success
type:结果视图类型,不写的时候默认值为dispatcher(请求转发)
name是去哪里,type是怎么去。

二、struts内建支持的常用结果类型:

    -chain:Action链式处理。当一个Action处理完成之后,系统并不想转发到视图资源,而是希望下一个Action进行处理,此时就需要这个类型。  

    -dispatcher:请求转发 

    -redirect:重定向 

    -redirectAction:重定向到其他Action 

    -stream:向浏览器返回一个InputStream的结果类型(一般用于文件下载)

 例子:

struts.xml文件配置
当发送请求demo1时,返回的结果转发到demo2的Action处理 <package name="demo" extends="struts-default"> <action name="demo1" class="com.cad.struts2.Hello" >
<result type="chain">demo2</result>
</action> <action name="demo2" >
<result name="success" >/welcome.jsp</result>
<result name="error">/error.jsp</result>
</action> </package>

三、不同包之间的请求转发  

 

<package name="demo" extends="struts-default">

    <action name="demo1" class="com.cad.struts2.Hello" >
<result type="chain">
//因为结果类型都有对应的实现类,我们到请求转发的实现类中发现,有actionName和namespace两个参数,并提供了get和set方法
//使用的是注入的思想,在请求转发之前,先调用setNamespace和setActionName赋值
<param name="actionName">demo2</param>
<param name="namespace">/user</param>
</result>
</action> </package>
<package name="demo1" extends="struts-default" namespace="/user">
<action name="demo2" >
<result name="success" >/welcome.jsp</result>
<result name="error">/error.jsp</result>
</action>
</package> 重定向也是一样。

四、自定义结果类型

(1)需要实现一个结果类型类,继承StrutsResultSupport类 我们这里面使用我们的验证码小工具,输出一个验证码 至于这个验证码小工具,以前的文章中有详细的说明。

            public class VcodeResult extends StrutsResultSupport {

                @Override
protected void doExecute(String arg0, ActionInvocation arg1) throws Exception {
VerifiCode v=new VerifiCode();
HttpServletResponse response=ServletActionContext.getResponse();
BufferedImage b=v.getImage();
v.output(b, response.getOutputStream());
} }

(2)然后再创建一个Action类 ,什么都不用写

                    public class VcodeAction extends ActionSupport {

                        }

(3)在struts.xml中进行配置

                <package name="vcode" extends="struts-default" >
//配置我们自定义的结果类型
<result-types>
<result-type name="vcode" class="com.cad.struts2.VcodeResult"></result-type>
</result-types>
//我们还是在我们的原页面,所以不需要指定其他页面,type即为我们的自定义结果类型
<action name="vcode" class="com.cad.struts2.VcodeAction">
<result name="success" type="vcode"></result>
</action>
</package>

(4)我们可以在自定义的结果类型类中添加get和set方法,来方便我们的一些参数自定义。 例如我们添加了weight,height的get和set方法。

我们就可以自定义验证码的长宽等。这也又体现了我们的注入思想。 我们前面请求转发前设置nameSpace和actionName和我们做的其实是相同的操作。

  

                    <action name="vcode" class="com.cad.struts2.VcodeAction">
<result name="success" type="vcode">
<param name="weight">100</param>
<param name="height">100</param>
</result>
</action>

五、全局结果视图和局部结果视图  

我们在包中定义了自己的结果类型,只有在自己的包或者子包中才能使用,在别的包中还是无法使用这个结果类型,为了所有的Action都能使用,我们需要将其变为全局。 我们只需要定义一个包,继承struts2的默认配置文件

然后如果我们需要这个结果类型,只需要我们的包继承这个包即可。 在<global-results>中配置全局参数,所有的action使用这个类型生成的验证码尺寸都一样。

                <package name="myresult" extends="struts-default">
<result-types>
<result-type name="vcode" class="com.cad.struts2.VcodeResult"></result-type>
</result-types>
<global-results>
<result>
<param name="weight">500</param>
<param name="height">1000</param>
</result>
</global-results>
</package>

  

  

  

(五)Struts2处理结果管理的更多相关文章

  1. linux基础-第十五单元 软件包的管理

    使用RPM安装及移除软件 什么是RPM rpm的文件名 rpm软件安装与移除工作中经常使用的选项 查看RPM软件包中的信息 查询已安装的软件包信息 RPM包的属性依赖性问题 什么是RPM包的属性依赖性 ...

  2. PMP 第五章 项目范围管理

    1.范围管理主要是干什么?什么是产品范围?什么是项目范围?    项目范围管理包括确保项目做而且只做成功完成项目所需的全部工作的各过程.管理项目范围主要是在定义和控制哪些工作应该包括在项目内,哪些不应 ...

  3. JMeter学习(二十五)HTTP属性管理器HTTP Cookie Manager、HTTP Request Defaults

    Test Plan的配置元件中有一些和HTTP属性相关的元件:HTTP Cache Manager.HTTP Authorization Manager.HTTP Cookie Manager.HTT ...

  4. HBase(五): HBase运维管理

    HBase自带的很多工具可用于管理.分析.修复和调试,这些工具一部分的入口是hbase shell 客户端,另一部分是在hbase的Jar包中. 目录: hbck hfile 数据备份与恢复 Snap ...

  5. 在云服务器搭建WordPress博客(五)创建和管理文章分类

    不同主题的文章划分到不同的分类,有助于访客寻找他们想要的内容,提高用户体验.所以,为你的网站创建文章分类是很有必要的.那么,WordPress系统如何创建和管理文章分类呢?今天倡萌就简单介绍一下. 创 ...

  6. asp.net微信开发第五篇----用户分组管理

    上一篇已讲解到新建用户分组,移动用户到分组的功能,这一章主要讲解修改分组名称和删除分组 开发者可以使用接口,对公众平台的分组进行查询.创建.修改.删除等操作,也可以使用接口在需要时移动用户到某个分组. ...

  7. 流畅python学习笔记:第十五章:上下文管理器

    在开始本章之前,我们首先来谈谈try-excep..final模块.在Python中,进行异常保护的最多就是用try..except..final.首先来看下下面的代码.进行一个简单的除法运算.为了防 ...

  8. JavaWeb框架_Struts2_(五)----->Struts2的标签库

    1.  Struts2的标签库 1.1 Struts2标签库概述 Struts2的标签库可以分为以下3类:用户界面标签.非用户界面标签.AJAX标签; 2.1.1 Struts2标签库的分类和使用 1 ...

  9. 44.Odoo产品分析 (五) – 定制板块(1) – 管理odoo安装(1)

    查看Odoo产品分析系列--目录 1 管理员的注意事项 在记录重要的配置细节时必须要小心,而且必须要有一个连续性的合适的.让系统能够安装备份并运行在一个可接受的时间内的计划. 1.1 制定实施策略 如 ...

随机推荐

  1. NGK引入反量子加密系统来应对量子计算攻击

    当前,区块链和分布式账本技术已有了长足发展并广泛应用与多种场景中,原因在于其提供透明性,冗余性和问责性的能力.就区块链而言,此类特征是通过公钥加密和哈希函数提供的.但是,随着量子计算机技术的发展和量子 ...

  2. Baccarat中挖矿、兑换和做市的三角关系是什么?

    NGK在这波DeFi潮中,推出了Baccarat,为用户带来了流动性挖矿收益,今天笔者就讲一讲Baccarat中挖矿.兑换和做市的关系. 兑换和做市是什么关系呢?众所周知,换币者,是用一种货币去换另一 ...

  3. BSOJ 1562 【堆练习】丑数3576

    Description 丑数是指素因子都在集合{2,3,5,7}内的整数,第一个丑数是1. 现在输入n(n<=4000),输出第n个丑数. Input 输入文件仅一行为一个整数n. Output ...

  4. 由剑指offer引发的思考——对象中虚函数指针的大小

    先看一个简单的问题: 一.定义一个空的类型,对于其对象我们sizeof其大小,是1字节.因为我们定义一个类型,编译器必须为其分配空间,具体分配多少是编译器决定,vs是1字节,分配在栈区. 那,这一个字 ...

  5. 关于Java中for,while,if,方法的练习

    练习 计算0到100之间的奇数和偶数和 package com.kangkang.forDemo;​public class demo01 {    public static void main(S ...

  6. 【HTB系列】 靶机Swagshop的渗透测试详解

    出品|MS08067实验室(www.ms08067.com) 本文作者:是大方子(Ms08067实验室核心成员) 总结与反思 使用vi提权 magento漏洞的利用 magescan 工具的使用 靶机 ...

  7. 剑指 Offer 40. 最小的k个数 + 优先队列 + 堆 + 快速排序

    剑指 Offer 40. 最小的k个数 Offer_40 题目描述 解法一:排序后取前k个数 /** * 题目描述:输入整数数组 arr ,找出其中最小的 k 个数.例如,输入4.5.1.6.2.7. ...

  8. AJAX 相关参数详细说明

    最近ajax的使用十分频繁,对其许多参数还不是很了解,特此总结. 通用写法 1 $.ajax({ 2 url: "http://www.hzhuti.com", //请求的url地 ...

  9. pytorch(13)卷积层

    卷积层 1. 1d/2d/3d卷积 Dimension of Convolution 卷积运算:卷积核在输入信号(图像)上滑动,相应位置上进行乘加 卷积核:又称为滤波器,过滤器,可认为是某种模式,某种 ...

  10. C++图论算法——图的储存方式

    使用二维数组邻接矩阵储存图 无向图: 图G 定义图G[101][101],G[i][j]的值表示从结点vi到vj是否有边或弧,若有,取值为1或权值,若无,则取值为0或∞.以下是图G用邻接矩阵表示的列表 ...