十、Struts2结果集

 

 

 

 

 

 

 

 

 

 

 

 

1、Struts.xml配置文件

result元素:指定动作类的动作方法执行完后的结果视图.

属性:

name:字符串,与动作方法返回的值一致。默认是success

type:指定处理结果的结果类型的别名。(struts-default.xml有定义)。默认值是dispatcher

2、局部和全局结果视图

public
class
UserAction
extends ActionSupport {

    @Override

    public String execute() {

        // 输入你好到页面上面去

 

        // 把显示内容的代码写在这里

 

        //配置文件根据返回的字符串,转发到对应的jsp页面

        return
SUCCESS;

    }

 

    public String execute2() {

        return
ERROR;

 

    }

}

 

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

        <!--全局结果视图:包中所有的action都能使用同一个视图 -->

        <global-results>

            <result
name="error">/error.jsp</result>

        </global-results>

        <action
name="action1"
class="com.itheima.action.Demo1Action"

            method="execute">

            <!--局部结果视图:配置在了action的内部 -->

            <result
name="success"
type="dispatcher">/success.jsp</result>

        </action>

 

        <action
name="action2"
class="com.itheima.action.Demo1Action"

            method="execute2"
/>

    </package>

 

3、补充知识:动作类的生命周期

Struts2每次请求,都会实例化动作类的对象,因此它是线程安全的。

4、Struts2提供的结果视图

  • chain:转发到另外一个动作

转发到包内的动作:

<action
name="a1">

            <!-- 转发到另外一个动作:同一个包中的 -->

            <!-- 位于result标签元素内部的值会调用chain处理类的setActionName("a2") -->

            <result
type="chain">a2</result>

            

            <!-- <result type="chain">

                <param name="actionName">a2</param>

            </result> -->

        </action>

 

转发到另外一个带有名称空间的包中的动作

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

        <action
name="a3">

            <!--转发到另外一个动作:不同包且另外还有命名空间 -->

            <!-- 以下的写法是不对的 -->

            <!-- <result type="chain">/hello/a33</result> -->

            

            <result
type="chain">

个方法:

            setNamespace(String str) setActionName(String name) -->

                <param
name="namespace">/hello</param>

                <param
name="actionName">a33</param>

            </result>

        </action>

    </package>

    

    <package
name="p3"
extends="struts-dafault"
namespace="/hello">

        <action
name="a33">

            <result
type="dispatcher">/3.jsp</result>

        </action>

    </package>

 

 

  • dispatcher:转发到一个页面,jsp

<action
name="a2">

            <!--

            <result type="dispatcher">/3.jsp</result>

            -->

            <result>

                <param
name="location">/3.jsp</param>

            </result>

        </action>

 

 

  • redirect:重定向到一个页面

<result
type="redirect">

                <param
name="location">/3.jsp</param>

            </result>

 

  • redirectAction:重定向到一个动作

<action
name="a4">

            <!--重定向到另外一个包中的动作 -->

            <result
type="redirectAction">

                <param
name="namespace">/hello</param>

                <param
name="actionName">a44</param>

            </result>

        </action>

 

 

<package
name="p3"
extends="struts-dafault"
namespace="/hello">

        <action
name="a33">

            <result
type="dispatcher">/3.jsp</result>

        </action>

        <action
name="a44">

            <result
type="dispatcher">/3.jsp</result>

        </action>

    </package>

 

 

  • stream:文件下载(此处不讲,文件上传和下载再讲)
  • plainText:以纯文本的形式显示结果

<action
name="a5">

            <!--以纯文本的形式显示目标页面:直接显示源码 -->

            <result
type="plainText">/4.jsp</result>

        </action>

 

5、自定义结果视图

目标:用一个叫做image的视图,输入随机验证码图片

 

步骤:

  1. 定义一个类,实现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);

     

        }

    }

     

  2. 在配置文件中定义结果类型

    <package
    name="p3"
    extends="struts-dafault">

            <result-types>

        <result-type
    name="image"
    class="com.itheima.results.CaptchaResult"></result-type>

            </result-types>

        </package>

     

  3. 现在就可以在动作中使用该结果类型

    <!-- 使用自定义结果视图 -->

            <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结果集的更多相关文章

  1. ES系列十六、集群配置和维护管理

    一.修改配置文件 1.节点配置 1.vim elasticsearch.yml # ======================== Elasticsearch Configuration ===== ...

  2. Docker Swarm(十)Portainer 集群可视化管理

    前言 搭建好我们的容器编排集群,那我们总不能日常的时候也在命令行进行操作,所以我们需要使用到一些可视化的工具,Docker图形化管理提供了很多工具,有Portainer.Docker UI.Shipy ...

  3. nodejs的mysql模块学习(十)连接池集群配置选项

    连接池集群选项 canRetry : 如果true ,连接池集群会在连接失败时尝试连接 默认true removeNodeErrorCount : 如果连接失败,节点的errCount增加.当erro ...

  4. Redis进阶实践之十 Redis哨兵集群模式

    一.引言             上一篇文章我们详细的讲解了Redis的主从集群模式,其实这个集群模式配置很简单,只需要在Slave的节点上进行配置,Master主节点的配置不需要做任何更改,但是有一 ...

  5. 【iCore4 双核心板_uC/OS-II】例程十:信号量集

    一.实验说明: 在实际应用中,任务常常需要与多个事件同步,即要根据多个信号量组合作用的结果来决定任务的运行方式.UCOSII为了实现多个信号量组合的功能定义了一种特殊的数据结构——信号量集. 二.实验 ...

  6. 【Redis学习之十】Redis集群维护

    Redis集群增删节点部署环境 redis-3.0.0 VM虚拟机redhat6.5-x64:192.168.1.201.192.168.1.202.192.168.1.203.            ...

  7. Dubbo实践(十六)集群容错

    Dubbo作为一个分布式的服务治理框架,提供了集群部署,路由,软负载均衡及容错机制.下图描述了Dubbo调用过程中的对于集群,负载等的调用关系: 集群 Cluster 将Directory中的多个In ...

  8. Redis(十六):集群搭建(手动和自动)

    一.概述 Redis3.0版本之后支持Cluster. 1.1.redis cluster的现状 目前redis支持的cluster特性: 1):节点自动发现 2):slave->master ...

  9. RabbitMQ (十五) 镜像集群 + HAProxy1.7.8 负载均衡

    RabbitMQ 默认的集群模式,也就是普通模式,最大的问题就在于存储队列完整数据的节点一旦宕机, 如果是非持久化队列,则消息丢失;如果是持久化队列+持久化消息,则必须等该节点恢复. 所以后来 Rab ...

随机推荐

  1. vim使用快捷键

    vim使用快捷键 索引 1. 关于Vim 1.1 Vim的几种模式 2. 启动Vim 3. 文档操作 4. 光标的移动 4.1 基本移动 4.2 翻屏 4.3 标记 5. 插入文本 5.1 基本插入 ...

  2. UILabel使用技巧

    UILabel的各种属性与方法的使用(转) #import "LabelTestViewController.h" @implementation LabelTestViewCon ...

  3. [ActionScript 3.0] AS3调用百度地图API

    package { import baidu.map.basetype.LngLat; import baidu.map.basetype.Size; import baidu.map.config. ...

  4. editplus格式化xml文档

    使用editplus打开xml文档,发现文件内容没有格式化,非常难看,使用IE9打开这个xml文档是格式化的,但是IE9打开不能编辑. 在网上找了一些资料发现能够通过一个小插件来是editplus格式 ...

  5. 页面中插入flash,并且给flash添加单击事件控制播放,以及获取相关参数.

    <object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="100%" hei ...

  6. DDL(Oracle)

    DDL       数据定义       建表       建视图 建其他 drop create table t (a varchar2 (10));可变字符串最大为10 transaction - ...

  7. python 调用内部类的两种方法

    class Car:#外部类 class Door:#内部类 def open(self): print('open door') class Wheel: def run(self): print( ...

  8. 项目积累——CSS应用

    <tr onmouseover=" this.style.backgroundColor= '#E0FFFF' "  onmouseout="this.style. ...

  9. Appium + Python -------------元素定位

    说在前面 1.https://github.com/appium/python-client/tree/master/test  里面有一些test ,可以看看,研究研究 2.学会使用 uiautom ...

  10. 从手工测试转型web自动化测试继而转型成专门做自动化测试的学习路线。

    在开始之前先自学两个工具商业web自动化测试工具请自学QTP:QTP的学习可以跳过,我是跳过了的.开源web自动化测试工具请自学Selenium:我当年是先学watir(耗时1周),再学seleniu ...