在Struts2中的结果集类型

在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日

相关文章

  • Java对zip,rar,7z文件带密码解压实例详解

    Java对zip,rar,7z文件带密码解压实例详解 在Java中,可以通过使用第三方库来实现对压缩文件的解压操作。其中,针对带有密码保护的压缩文件,需要借助专门的工具才能解压。本文将介绍如何使用Java对zip、rar、7z文件带密码进行解压的详细攻略。 I. 依赖库 首先,需要引入以下依赖库: <dependency> <groupId…

    Java 2023年5月20日
    00
  • CentOS系统下安装Tomcat7的过程详解

    安装Tomcat7的过程详解 确认环境 在安装Tomcat7之前,需要确认以下环境: 确认系统版本:CentOS 6或7; 确认Java环境配置:Java环境已经正确安装并配置好; 确认网络环境:确认能够访问Tomcat官网。    安装Tomcat CentOS系统下安装Tomcat可以通过以下步骤完成: 1. 下载Tomcat 从Tomcat官方网站下载…

    Java 2023年5月19日
    00
  • java web实现用户权限管理

    Java Web 实现用户权限管理,主要的实现思路就是通过对用户进行访问控制、绑定角色、授权等操作,来达到实现用户权限控制的目的。整个流程主要包含以下几个步骤: 1.设计用户权限表2.设计用户角色与权限表3.设计角色表4.设计角色权限表5.整合权限验证 接下来详细讲解每个步骤的具体实现方法。 设计用户权限表 一个用户可能拥有不同的权限,所以需要在数据库中设计…

    Java 2023年6月15日
    00
  • java连接sql server 2008数据库代码

    下面是Java连接SQL Server 2008数据库的完整攻略。 第一步:导入SQL Server JDBC驱动 在项目中导入SQL Server的JDBC驱动,可以从Microsoft官网下载。 下载完成后,在Java项目中引入JDBC驱动程序。如果使用Maven管理项目,可以在pom.xml文件中添加以下依赖: <dependency> &…

    Java 2023年5月19日
    00
  • JavaSpringBoot报错“HttpMediaTypeNotAcceptableException”的原因和处理方法

    原因 “HttpMediaTypeNotAcceptableException” 错误通常是以下原因引起的: 媒体类型不可接受:如果您的媒体类型不可接受,则可能会出现此错误。在这种情况下,您需要检查您的媒体类型并确保它们可接受。 媒体类型不正确:如果您的媒体类型不正确,则可能会出现此错误。在这种情况下,您需要检查您的媒体类型并确保它们正确。 解决办法 以下是…

    Java 2023年5月4日
    00
  • 详解Java中Thread 和Runnable区别

    当开发多线程程序时,Java中有两种方式可以创建线程:继承Thread类或实现Runnable接口。虽然它们最终实现的目标是相同的,但它们之间仍然存在一些重要区别。本文将详细讲解Thread和Runnable的区别,让您在编写多线程程序时选择最佳方案。 一、继承Thread类 继承Thread类是创建线程的传统方式。这是通过继承Thread类并覆盖其中的ru…

    Java 2023年5月18日
    00
  • Java基础之ArrayList的扩容机制

    Java基础之ArrayList的扩容机制 ArrayList简介 在Java中,ArrayList是一种常见的数据结构之一。它继承了AbstractList这个类,并且实现了List接口。ArrayList是基于数组实现的,可以动态地增加或减少数组的大小,所以可以自动扩容和缩容。 扩容机制 ArrayList的扩容机制指的是当ArrayList内部的元素个…

    Java 2023年5月26日
    00
  • Java基础:流Stream详解

    Java基础:流Stream详解 什么是流Stream? Java中的流(Stream)是指代表数据流通的对象。Stream与java.io包中的流不同,Stream没有io操作,是一种抽象的数据结构,是一种更高级、更便捷、更优雅的处理数据的方式。Stream的目的是通过类似于流水线的方式来处理集合中的元素,通过流的操作,可以将对集合的处理变得更加简单、减少…

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