十、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. C++ operator 知识点 2

    http://blog.csdn.net/szlanny/article/details/4295854 operator它有两种用法,一种是operator overloading(操作符重载),一 ...

  2. Linux中记录终端(Terminal)输出到文本文件(转载)

    一,如何把命令运行的结果保存到文件当中? 这个问题太简单了,大家都知道,用 > 把输出转向就可以了 例子: [lhd@hongdi ~]$ ls > ls.txt [lhd@hongdi ...

  3. java普通servlet三层开发模式图

  4. 新找到的一款字体 fantasque-sans-mono

    http://www.ipreferjim.com/2015/03/your-ides-font-matters-fantasque-sans-mono/

  5. Collection集合List、Set

    Collection集合,用来保存一组数据的数据结构. Collection是一个接口,定义了所有集合都应该包含的特征和行为 Collection派生出了两类集合 List和Set List接口:Li ...

  6. PHP中$_FILES的使用及注意事项

    $_FILES: 经由 HTTP POST 文件上传而提交至脚本的变量.类似于旧数组 $HTTP_POST_FILES 数组(依然有效,但反对使用).$_FILES数组内容如下: $_FILES['m ...

  7. 生成ldf数据库文件

    .在我的电脑中删除LOG文件 c.附加数据库: 企业管理器--服务器--数据库--右键--附加数据库 此法将生成新的LOG,大小只有500多K

  8. java类总结

    1.java类与类之间存在六种关系:继承,实现,依赖,关联,聚合组成 2.一个类可以继承另外一个类,并在此基础上添加自己的特有的功能. 3.一个类的方法中操作另外一个类的对象,这种情况称为第一个类依赖 ...

  9. java static 方法使用笔记

    有入参的static方法,可以正常使用 static的作用是申明:这是类的静态方法,什么时候都可以调用,可以传入入参,也可以不传. 上代码: 1.带静态方法的类: public class MakeP ...

  10. PHP截取IE浏览器并缩小原图的方法

    这篇文章主要介绍了PHP截取IE浏览器并缩小原图的方法,涉及PHP调用com组件实现图像截取的相关技巧,需要的朋友可以参考下 本文实例讲述了PHP截取IE浏览器并缩小原图的方法.分享给大家供大家参考, ...