如何在 Struts 1 中获取 JSON 响应





3.00/5 (2投票s)
使用 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>
这就是您的操作类,我只是将 string
和 int
的值放入 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 应用程序,您可以发送 queryParams
和 path
。queryParams
将被映射到操作表单。
查询参数将如下所示
receivedMessage=Hello
客户端收到的响应将如下所示
{
"Sent Message": "Hello"
"Number": 10
"Response Message": "Your Message has been received"
}
关注点
这里的限制是,当客户端发送请求时,它仅限于通过查询参数发送请求参数,因为 Struts 1 无法处理请求,如果数据以 JSONObjects
的形式发送。虽然我观察到它确实将数据内容传递给过滤器类,但之后,过滤器无法从 struts-config.xml 解析操作映射,因为它总是期望其参数中的 "ActionForm
" 对象,而不是任何其它对象。