十、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 ...
随机推荐
- JAVA 文本框、密码框、标签
//文本框,密码框,标签 import java.awt.*; import javax.swing.*; public class Jiemian5 extends JFrame{ JPanel m ...
- jQuery实现的美观的倒计时实例代码
<!DOCTYPE html><html><head><meta charset=" utf-8"><meta name=&q ...
- cookie和会话状态的工作原理
一:存在两种类型的cookie: 1>会话cookie (session cookie) 不设置过期时间,则表示这个cookie生命周期为浏览器会话期间,只要关闭浏览器窗口, ...
- Yii2.0 数据库查询方法
User::find()->all(); 此方法返回所有数据: User::findOne($id); 此方法返回 主键 id=1 的一条数据(举个例子): User:: ...
- 关于 MySQL UTF8 编码下生僻字符插入失败/假死问题的分析
原文:http://my.oschina.net/leejun2005/blog/343353 目录[-] 1.问题:mysql 遇到某些中文插入异常 2.原因:此 utf8 非彼 utf8 3.解决 ...
- Python基础03 序列
作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! sequence 序列 sequence(序列)是一组有顺序的元素的集合 (严格的 ...
- jdk之jhat命令
jhat命令 -- JavaHeap Analyse Tool 用途:是用来分析Java堆的命令,可以将堆中的对象以html的形式显示出来,包括对象的数量,大小等等,并支持对象查询语言第一步:导出堆 ...
- sqlldr导入数据
直接在cmd输入sqlldr即可,不需要先输sqlplus. 参考链接:每次提交多少行很重要:http://www.cnblogs.com/wingsless/archive/2012/08/04/2 ...
- ubuntu 命令行软件包管理
安装软件包 apt-get install vim 卸载 apt-get remove/autoremove vim autoremove 会顺便卸载未使用,未被依赖的软件包 查询或者搜索软件包:: ...
- CentOS 6.5 安装 Nginx 1.7.8 教程
http://blog.chinaunix.net/xmlrpc.php?r=blog/article&uid=29791971&id=4702007 Nginx是一款轻量级的Web ...











