在Struts2中的结果集类型

yizhihongxing

在Struts2中的结果集类型

在Struts2中,结果集类型为指定的操作返回值(result type)定义了如何呈现响应。Struts2有多种结果集类型,可以满足不同情况下的需求。

常见的结果集类型

以下是Struts2中常见的一些结果集类型:

dispatcher

使用dispatcher结果集类型可以将请求分派回同一个web服务器上的另一个web资源(例如,jsp页面)。当使用dispatcher结果集类型时,Struts2将请求对象放进请求作用域,并将响应直接返回给客户端。

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

redirect

使用redirect结果集类型可以将请求重定向到另一个web资源。当使用redirect结果集类型时,Struts2将在响应中设置HTTP头以指示客户端请求新的URL。

<result name="success" type="redirect">/index.html</result>

stream

使用stream结果集类型可以将读入的二进制数据(如文件)作为流发送到客户端。当使用stream结果集类型时,必须使用contentType属性来指定Content-Type头部。

<result name="success" type="stream">
    <param name="contentType">application/pdf</param>
    <param name="inputName">fileStream</param>
</result>

自定义结果集类型

Struts2还允许用户自定义自己的结果集类型。以下是如何创建自定义结果集类型的步骤:

  1. 继承org.apache.struts2.dispatcher.StrutsResultSupport类并实现doExecute方法。
  2. struts.xml中为你的新结果集类型配置一个结果集。
  3. 在Action类中使用你的新的结果集类型。

下面是创建自定义结果集类型的示例:

public class HelloWorldResultType extends StrutsResultSupport {
    private String helloStr;

    public void setHelloStr(String helloStr) {
        this.helloStr = helloStr;
    }

    public String getHelloStr() {
        return helloStr;
    }

    @Override
    protected void doExecute(String finalLocation, ActionInvocation invocation) throws Exception {
        HttpServletResponse response = ServletActionContext.getResponse();
        response.getWriter().append(helloStr);
    }
}
<result-types>
    <result-type name="hello" class="com.example.HelloWorldResultType"/>
</result-types>

<action name="helloWorld" class="com.example.HelloWorldAction">
    <result name="success" type="hello">
        <param name="helloStr">Hello, World!</param>
    </result>
</action>

在上面的示例中,我们定义了一个新的结果集类型hello,当该结果集类型被调用时,它将在响应对象上输出字符串“Hello, World!”。

另一个示例:在application中存储一些数据,然后使用JSON形式返回给前端:

public class CustomResultType extends StrutsResultSupport {

    private String header;
    private Map<String, Object> applicationData;

    public String getHeader() {
        return header;
    }

    public void setHeader(String header) {
        this.header = header;
    }

    public Map<String, Object> getApplicationData() {
        return applicationData;
    }

    public void setApplicationData(Map<String, Object> applicationData) {
        this.applicationData = applicationData;
    }

    @Override
    protected void doExecute(String resultLocation, ActionInvocation invocation) throws Exception {
        HttpServletResponse response = ServletActionContext.getResponse();
        response.setContentType("application/json;charset=UTF-8");
        PrintWriter out = response.getWriter();
        StringBuilder json = new StringBuilder();
        json.append("{");
        // 发送header
        if (header != null) {
            json.append("\"header\":\"" + header + "\",");
        }
        // 发送application中的数据
        for (Map.Entry<String, Object> entry : applicationData.entrySet()) {
            json.append("\"" + entry.getKey() + "\" : \"" + entry.getValue() + "\",");
        }
        json.deleteCharAt(json.length() - 1);//删除最后一个逗号
        json.append("}");
        out.print(json.toString());
        out.flush();
    }
}
<result-types>
    <result-type name="customResultType" class="com.example.CustomResultType"/>
</result-types>

<action name="helloworld" class="com.example.HelloWorldAction">
    <result name="success" type="customResultType">
        <param name="header">header</param>
        <param name="applicationData">
            <map>
                <entry key="key1"value="value1"></entry>
                <entry key="key2"value="value2"></entry>
            </map>
        </param>
    </result>
</action>

这里定义了一个新的结果集类型customResultType,当该结果集类型被调用时,它将在响应对象上以JSON格式输出application中存储的数据以及自定义的header。

以上就是在Struts2中结果集类型的攻略,希望可以帮助到你。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:在Struts2中的结果集类型 - Python技术站

(0)
上一篇 2023年5月20日
下一篇 2023年5月20日

相关文章

  • 游戏开发常见面试题与知识点整理总结

    游戏开发常见面试题与知识点整理总结 前言 游戏开发是一个涉及众多技术领域的综合性行业,因此在游戏开发岗位的面试中,会涉及到众多的技术领域与知识点。本篇文章将介绍游戏开发常见面试题与知识点,帮助读者了解游戏开发领域的常识,并为游戏开发岗位的应聘者提供参考。 1. 编程基础 作为一个游戏开发者,编程基础是不能缺少的部分。在面试中,经常会涉及到编程相关的面试题,需…

    Java 2023年5月19日
    00
  • Gson解析空字符串发生异常的处理方法

    当使用Gson解析空字符串时,可能会抛出JsonSyntaxException异常,下面是解析空字符串时发生异常的原因:- Gson对空字符串进行反序列化时会出现语法异常,无法将空字符串转换成相应的数据类型;- Gson对于无法反序列化的字符串会抛出JsonSyntaxException异常。 在处理Gson解析空字符串异常时,我们可以考虑以下方法: 方法1…

    Java 2023年5月26日
    00
  • Java实现简单修改文件名的方法分析

    下面是“Java实现简单修改文件名的方法分析”的完整攻略。 1. 概述 在Java中,我们可以使用File类的renameTo()方法来修改文件的名称。renameTo()方法能够将一个文件重命名为一个指定的目录路径或文件路径名。本篇攻略将详细介绍使用Java修改文件名的方法。 2. renameTo()方法的使用 2.1 单个文件重命名 下面是一个单个文件…

    Java 2023年5月19日
    00
  • Spring boot security权限管理集成cas单点登录功能的实现

    一、安装配置CAS Server 下载CAS Server 从官方网站(https://apereo.github.io/cas/)下载最新版CAS Server。 配置CAS Server 使用maven编译cas-server-webapp,并将war文件部署到Tomcat或Jetty中。 对于CAS Server的配置,主要需要进行以下修改: (1) …

    Java 2023年5月20日
    00
  • java读取txt文件并输出结果

    下面是“Java读取txt文件并输出结果”的完整攻略: 1. 读取txt文件 1.1 创建File对象 首先,我们需要创建一个File对象,用来指定要读取的txt文件的路径及文件名。例如,读取名为example.txt的文件,代码如下: File file = new File("example.txt"); 1.2 创建FileRead…

    Java 2023年5月26日
    00
  • java转换时区时间过程详解

    Java转换时区时间过程详解 什么是时区? 时区指的是地球上各个区域所采用的标准时间,以协调世界时(UTC)为基准,把24个时区划分出来。每个时区相差一个小时,总共是24小时。 Java中时间和时区的表示 在Java中,时间和时区的表示是通过java.time包中的Java 8 Date/Time API来实现的。该API是基于JSR-310的国际标准,提供…

    Java 2023年5月20日
    00
  • Java实现广度优先遍历的示例详解

    Java实现广度优先遍历的示例详解 什么是广度优先遍历 广度优先遍历(Breadth First Search, BFS)是一种图形的遍历算法,其遍历能力基于层次高效地访问相邻节点,并按顺序访问节点。这种方式即宽度优先,图形遍历的起点为根节点,相关的数据结构是队列。 广度优先遍历的应用 广度优先遍历算法在许多领域都有应用,比如: 寻找最短路径 二叉树搜索 网…

    Java 2023年5月19日
    00
  • Java对MySQL数据库进行连接、查询和修改操作方法

    关于“Java对MySQL数据库进行连接、查询和修改操作方法”的完整攻略,我们可以以下列步骤进行: 1. 下载MySQL的JDBC驱动器 Java需要使用MySQL连接器(JDBC驱动器)才能连接MySQL服务器。你可以从MySQL官网上找到驱动器并下载。 下载的链接是:https://dev.mysql.com/get/Downloads/Connecto…

    Java 2023年5月20日
    00
合作推广
合作推广
分享本页
返回顶部