十、Struts2结果集
十、Struts2结果集
|
|
1、Struts.xml配置文件
result元素:指定动作类的动作方法执行完后的结果视图.
属性:
name:字符串,与动作方法返回的值一致。默认是success
type:指定处理结果的结果类型的别名。(struts-default.xml有定义)。默认值是dispatcher
2、局部和全局结果视图
|
public @Override public String execute() { // 输入你好到页面上面去
// 把显示内容的代码写在这里
//配置文件根据返回的字符串,转发到对应的jsp页面 return }
public String execute2() { return
} } |
|
<package <!--全局结果视图:包中所有的action都能使用同一个视图 --> <global-results> <result </global-results> <action method="execute"> <!--局部结果视图:配置在了action的内部 --> <result </action>
<action method="execute2" </package> |
3、补充知识:动作类的生命周期
Struts2每次请求,都会实例化动作类的对象,因此它是线程安全的。
4、Struts2提供的结果视图

- chain:转发到另外一个动作
转发到包内的动作:
|
<action <!-- 转发到另外一个动作:同一个包中的 --> <!-- 位于result标签元素内部的值会调用chain处理类的setActionName("a2") --> <result
<!-- <result type="chain"> <param name="actionName">a2</param> </result> --> </action> |
转发到另外一个带有名称空间的包中的动作
|
<package <action <!--转发到另外一个动作:不同包且另外还有命名空间 --> <!-- 以下的写法是不对的 --> <!-- <result type="chain">/hello/a33</result> -->
<result 个方法: setNamespace(String str) setActionName(String name) --> <param <param </result> </action> </package>
<package <action <result </action> </package> |
- dispatcher:转发到一个页面,jsp
|
<action <!-- <result type="dispatcher">/3.jsp</result> --> <result> <param </result> </action> |
- redirect:重定向到一个页面
|
<result <param </result> |
- redirectAction:重定向到一个动作
|
<action <!--重定向到另外一个包中的动作 --> <result <param <param </result> </action> |
|
<package <action <result </action> <action <result </action> </package> |
- stream:文件下载(此处不讲,文件上传和下载再讲)
- plainText:以纯文本的形式显示结果
|
<action <!--以纯文本的形式显示目标页面:直接显示源码 --> <result </action> |

5、自定义结果视图
目标:用一个叫做image的视图,输入随机验证码图片
步骤:
- 定义一个类,实现com.opensymphony.xwork2.Result接口
/*
* 该类实现Rusult接口,实现自定义结果视图
*/
public
class CaptchaResult implements Result {/**
*
*/
private
static
final
long
serialVersionUID = 1L;private
int
width = 110;private
int
height = 25;public
void setWidth(int
width) {this.width = width;
}
public
void setHeight(int
height) {this.height = height;
}
@Override
public
void execute(ActionInvocation arg0) throws Exception {//验证码的代码
// BufferedImage:代码内存图片
BufferedImage image = new BufferedImage(width, height,
BufferedImage.TYPE_INT_RGB);
// Graphics:画笔
Graphics g = image.getGraphics();
// 画边线
g.setColor(Color.GREEN);
g.drawRect(0, 0, width, height);
// 填充背景色
g.setColor(Color.YELLOW);
g.fillRect(1, 1, width - 2, height - 2);
// 干扰线
Random r = new Random();
g.setColor(Color.GRAY);
for (int
i = 0; i < 15; i++) {g.drawLine(r.nextInt(width), r.nextInt(height), r.nextInt(width),
r.nextInt(height));
}
// 验证码
g.setColor(Color.RED);
g.setFont(new Font("宋体", Font.BOLD | Font.ITALIC, 18));
int
x = 19;for (int
i = 0; i < 5; i++) {g.drawString(r.nextInt(10) + "", x, 20);
x += 20;
}
// ImageIO:输出图片给指定的流
OutputStream output = ServletActionContext.getResponse()
.getOutputStream();
ImageIO.write(image, ".jpg", output);
}
}
- 在配置文件中定义结果类型
<package
name="p3"
extends="struts-dafault"><result-types>
<result-type
name="image"
class="com.itheima.results.CaptchaResult"></result-type></result-types>
</package>
- 现在就可以在动作中使用该结果类型
<!-- 使用自定义结果视图 -->
<action
name="imageAction"><result
name="success"
type="image"><param
name="width">400</param><param
name="height">300</param></result>
</action>
小技巧:很多包中都要使用该结果视图怎么办?
<package
name="mydefault"
extends="struts-dafault"><!--自定义结果视图 -->
<result-types>
<result-type
name="image"class="com.itheima.results.CaptchaResult">
</result-type>
</result-types>
</package>
<!--继承配置了结果视图的包 -->
<package
name="p4"
extends="mydefault"><!-- 使用自定义结果视图 -->
<result
name="success"
type="image"><param
name="width">400</param><param
name="height">300</param></result>
</package>
十、Struts2结果集的更多相关文章
- ES系列十六、集群配置和维护管理
一.修改配置文件 1.节点配置 1.vim elasticsearch.yml # ======================== Elasticsearch Configuration ===== ...
- Docker Swarm(十)Portainer 集群可视化管理
前言 搭建好我们的容器编排集群,那我们总不能日常的时候也在命令行进行操作,所以我们需要使用到一些可视化的工具,Docker图形化管理提供了很多工具,有Portainer.Docker UI.Shipy ...
- nodejs的mysql模块学习(十)连接池集群配置选项
连接池集群选项 canRetry : 如果true ,连接池集群会在连接失败时尝试连接 默认true removeNodeErrorCount : 如果连接失败,节点的errCount增加.当erro ...
- Redis进阶实践之十 Redis哨兵集群模式
一.引言 上一篇文章我们详细的讲解了Redis的主从集群模式,其实这个集群模式配置很简单,只需要在Slave的节点上进行配置,Master主节点的配置不需要做任何更改,但是有一 ...
- 【iCore4 双核心板_uC/OS-II】例程十:信号量集
一.实验说明: 在实际应用中,任务常常需要与多个事件同步,即要根据多个信号量组合作用的结果来决定任务的运行方式.UCOSII为了实现多个信号量组合的功能定义了一种特殊的数据结构——信号量集. 二.实验 ...
- 【Redis学习之十】Redis集群维护
Redis集群增删节点部署环境 redis-3.0.0 VM虚拟机redhat6.5-x64:192.168.1.201.192.168.1.202.192.168.1.203. ...
- Dubbo实践(十六)集群容错
Dubbo作为一个分布式的服务治理框架,提供了集群部署,路由,软负载均衡及容错机制.下图描述了Dubbo调用过程中的对于集群,负载等的调用关系: 集群 Cluster 将Directory中的多个In ...
- Redis(十六):集群搭建(手动和自动)
一.概述 Redis3.0版本之后支持Cluster. 1.1.redis cluster的现状 目前redis支持的cluster特性: 1):节点自动发现 2):slave->master ...
- RabbitMQ (十五) 镜像集群 + HAProxy1.7.8 负载均衡
RabbitMQ 默认的集群模式,也就是普通模式,最大的问题就在于存储队列完整数据的节点一旦宕机, 如果是非持久化队列,则消息丢失;如果是持久化队列+持久化消息,则必须等该节点恢复. 所以后来 Rab ...
随机推荐
- json字符串转json对象的方法
在使用$.ajax()方法时,我们可以设置dataType:'json'的参数,便可以拿到后台返回的json数据对应的json对象.但有时,我们拿到的是json字符串,需要将它再转成json对象来使用 ...
- ubuntu13.10下安装samba
1.现在的ubuntu系统都默认安装了samba服务,如果是精简系统的话,可以通过apt-get进行安装 sudo apt-get install samba sudo apt-get cifs-ut ...
- oracle查看所有表的数据量
源地址:http://blog.csdn.net/zhanggnol/article/details/6683697 select t.table_name,t.num_rows from user_ ...
- SQL锁表解决并发性
在数据库开发过程中,不得不考虑并发性的问题,因为很有可能当别人正在更新表中记录时,你又从该表中读数据,那你读出来的数据有可能就不是你希望得到的数据.可以说有些数据同时只能有一个事物去更新,否则最终显示 ...
- sikuli实例
代码: package selenium.sikuli; import java.util.concurrent.TimeUnit; import org.openqa.selenium.By; im ...
- 在SoCEDS环境下编译和更新preloader和uboot程序的方法
在SoCEDS环境下编译和更新preloader和uboot程序的方法 前面有介绍preloader在HPS boot过程中的的作用,接下来讲述下用户在SoCEDS环境下改如何编译preloade ...
- sizeof usage & big / little endian
http://blog.csdn.net/w57w57w57/article/details/6626840 http://people.cs.umass.edu/~verts/cs32/endian ...
- C# odbc
一直下一步,注意需要 勾选你要连接的库名 odbc 命名空间 System.Data.Odbc
- Bootstrap 3 How-To #2 标题,链接与按钮
这个系列的要点来自一本名为 Twitter Bootstrap Web Development How-to 的书,但是,这本书的内容是基于以前版本的,与最新的 3.0 并不一致. 为了方便学习和使用 ...
- Appium + Python -------------元素定位
说在前面 1.https://github.com/appium/python-client/tree/master/test 里面有一些test ,可以看看,研究研究 2.学会使用 uiautom ...











