65.9K
CodeProject 正在变化。 阅读更多。
Home

如何在 Struts 1 中获取 JSON 响应

starIconstarIconstarIconemptyStarIconemptyStarIcon

3.00/5 (2投票s)

2016 年 1 月 15 日

CPOL

2分钟阅读

viewsIcon

39597

使用 Struts 1 返回 JSON 对象的最简单方法

引言

有时,您需要通过 Web 服务将您的移动或其它 Web 应用程序与您之前的 Web 应用程序集成,首先想到的就是获取一种易于解析和操作的简单 JSON 类型数据,并且不会给现有架构带来额外的负担。

如果您的遗留系统是基于 Struts 1 构建的,而 Struts 1 在这些天里使用得越来越少,尤其是在 Struts 2 发布之后;几乎每个人都迁移到了 Struts 2,因为它比 Struts 1 更加灵活。最重要的是,Struts 2 拥有 JSON 插件,并且构建 API 更加容易。

背景

Struts 1 比较僵化,您无法立即集成 API,尤其是在返回 JSON 格式的响应时,Struts 1 通常会针对每个操作返回一个 JSP 文件响应。

Using the Code

现在,我将把一个简单的请求映射到一个操作,然后进一步映射到一个 JSP 文件。然后,我将操作 JSP 文件以获得所需的格式。

struts-config.xml 中,操作将像往常一样进行。如下所示。

<action path="/callAction" type="com.myProjects.myActionClass">
<forward="success" path="/output.jsp"></forward>
</action> 

这就是您的操作类,我只是将 stringint 的值放入 JSONObject 中,然后将该 JSONObject 放入 session 中,我可以在 JSP 文件中检索它。

import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import org.apache.commons.lang.StringUtils;
import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.validator.DynaValidatorForm;
import org.json.simple.JSONObject;

public class myAction extends Action
{
   public ActionForward execute ( 
        ActionMapping mapping, ActionForm form, HttpServletRequest request,
        HttpServletResponse response ) throws IOException, ServletException
    {
        JSONObject returnObject = JSONObject();
        DynaValidatorForm myForm = (DynaValidatorForm) form;
        String receivedMessage = (String) myForm.get( "receivedMessage" );
        String responseMessage = "Your Message has been received";
        int number = 100
        returnObject.put("Sent Message", receivedMessage);
        returnObject.put("Response Message", responseMessage);
        returnObject.put("Number", number);
         
        return mapping.findForward( "success");
    }
}

现在 output.jsp 将如下所示

<%@ page language="java" 
contentType="application/json; charset=UTF-8" pageEncoding="UTF-8"%>

<%@page import="org.json.simple.JSONObject"%>

<%
	JSONObject obj = (JSONObject)request.getSession().getAttribute("json");
%>

<%=obj%>

第一行将告诉客户端浏览器期望 JSON 格式的内容。
现在,从 restClient 应用程序,您可以发送 queryParamspathqueryParams 将被映射到操作表单。

查询参数将如下所示

receivedMessage=Hello

客户端收到的响应将如下所示

{
"Sent Message": "Hello"
"Number": 10
"Response Message": "Your Message has been received"
}

关注点

这里的限制是,当客户端发送请求时,它仅限于通过查询参数发送请求参数,因为 Struts 1 无法处理请求,如果数据以 JSONObjects 的形式发送。虽然我观察到它确实将数据内容传递给过滤器类,但之后,过滤器无法从 struts-config.xml 解析操作映射,因为它总是期望其参数中的 "ActionForm" 对象,而不是任何其它对象。

© . All rights reserved.