在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中List for循环的6种写法总结(推荐)

    这里是Java中List for循环的6种写法总结的完整攻略。 简介 在Java中,我们经常需要对List集合进行遍历。虽然for循环是一种基本的方法,但是我们有多种写法可以使用。这里总结了6种常用的List for循环写法,并且推荐使用其中之一。 1. 基本的for循环 List<String> list = new ArrayList<…

    Java 2023年5月26日
    00
  • java验证用户是否已经登录 java实现自动登录

    下面是关于Java验证用户是否已经登录以及Java实现自动登录的完整攻略。 Java验证用户是否已经登录 要验证用户是否已经登录,可以通过以下步骤实现: 步骤一:获取用户的登录状态 在用户登录成功后,可以将其信息保存在Session中。当需要验证用户是否已登录时,只需获取Session中的用户信息,即可判断用户是否已经登录。以下是示例代码: HttpSess…

    Java 2023年6月16日
    00
  • Java实现递归查询树结构的示例代码

    Java实现递归查询树结构的示例代码的攻略包括以下几个步骤: 定义树结构Node类 首先需要定义一个Node类来存储树节点的相关信息,例如节点id、父节点id、节点名称等。Node类的定义如下: public class Node { private String id; // 节点id private String parentId; // 父节点id p…

    Java 2023年5月23日
    00
  • java面试常见问题之Hibernate总结

    我来详细讲解“Java面试常见问题之Hibernate总结”的完整攻略。 简介 Hibernate是Java平台上的一个ORM框架,它提供了高效、灵活的对象/关系映射解决方案,能够很好地解决Java应用程序中对象持久化的问题。由于Hibernate的应用非常广泛,因此,在Java的面试中也经常会被问及Hibernate相关的问题。 Hibernate常见问题…

    Java 2023年5月20日
    00
  • java实现猜拳游戏试题

    下面我将详细讲解“java实现猜拳游戏试题”的完整攻略。 1. 确定游戏规则 在开始编写程序之前,需要先确定猜拳游戏的规则。通常猜拳游戏有剪刀、石头和布三种手势,其中剪刀克制布,布克制石头,石头克制剪刀。参与游戏的两个玩家选择其中一种手势,如果两个玩家选择的手势相同,则为平局;否则根据手势的胜负关系判断胜负,并输出胜负结果。 2. 编写程序 2.1. 实现游…

    Java 2023年5月23日
    00
  • 如何在Java中优雅地判空详解

    如何在Java中优雅地判空详解 在Java开发中,判断对象是否为空是一个非常常见的操作。但是,如果不注意判空的方式和实现,容易导致代码可读性差、冗长、容易出错等问题。本文将介绍几种优雅的判空方式,帮助Java开发者写出更简洁、易读、易维护的代码。 使用Objects工具类 Java8中新增的Objects类提供了一系列静态方法,用于判断对象是否为空。例如: …

    Java 2023年5月26日
    00
  • java字符流缓冲区详解

    Java字符流缓冲区详解 在Java中,当需要对字符流进行大量读取或写入操作时,使用字符流缓冲区是一种有用的方法。本文将详细介绍Java字符流缓冲区的使用方法。 什么是字符流缓冲? Java字符流缓冲是一个内部缓冲区,用于临时存储从输入流读取的数据或要写入输出流的数据。使用缓冲区可以显著提高读写操作的性能,因为它可以减少对底层I/O的调用次数。 如何使用字符…

    Java 2023年5月27日
    00
  • Java 文件上传的实例详解

    下面就详细讲解一下“Java 文件上传的实例详解”的完整攻略。 简介 Java 文件上传是一项常见的网络应用需求,例如图片上传、文件上传等场景。通过使用 Java 语言和相关的框架,我们可以轻松实现一个强大、安全和高效的文件上传应用。 通用的文件上传实现步骤 对于大部分文件上传场景,我们可以采取以下步骤来实现: 在客户端,通过 HTML 表单或 JavaSc…

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