【问题标题】:Return from doPost() in JSP从 JSP 中的 doPost() 返回
【发布时间】:2012-07-19 15:45:54
【问题描述】:

我正在尝试在不使用任何框架的情况下实现 REST 类型的架构。所以我基本上是从我的客户端调用一个 JSP,它正在对提供服务的远程服务器执行doPost()。现在我能够以 JSON 格式将数据从客户端传递到服务器,但我不知道如何读取响应。有人可以帮我解决这个问题吗?

客户端:

 protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    ....
    ....
    HttpPost httpPost = new HttpPost("http://localhost:8080/test/Login");
    ArrayList<NameValuePair> postParameters = new ArrayList<NameValuePair>();

    //Send post it as a "json_message" paramter.
    postParameters.add(new BasicNameValuePair("json_message", jsonStringUserLogin)); 
    httpPost.setEntity(new UrlEncodedFormEntity(postParameters));
    HttpResponse fidresponse = client.execute(httpPost);

   ....
   ....
 }

服务器端:

 protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
  String jsonStringUserLogin = (String)request.getParameter("json_message");
  ....
  ....
  request.setAttribute("LoginResponse", "hello");
  // Here I need to send some string back to the servlet which called. I am assuming 
  // that  multiple clients will be calling this service and do not want to use 
  // RequestDispatcher as I need to specify the path of the servlet. 

  // I am looking for more like return method which I can access through 
  // "HttpResponse" object in the client.

  }

我刚开始使用 servlet,想自己实现一个 REST 服务。如果您有任何其他建议,请分享...谢谢,

【问题讨论】:

  • 你是问如何从request中获取json字符串还是如何反序列化json字符串?
  • 我想知道如何从请求中获取 JSON 字符串?...从远程计算机上的另一个 servlet...
  • 响应正文将包含您的 json 响应。从 fidresponse 中读取响应正文。 (我还不确定我是否理解你的问题)
  • @subirkumarsao 我已经编辑了我的帖子。我基本上是在设置一个名为“LoginResponse”的属性。如何从我的 fidresponse 对象访问它?

标签: java http jsp rest servlets


【解决方案1】:

在 doPost 你只需要做:

response.setContentType("application/json; charset=UTF-8;");
out.println("{\"key\": \"value\"}"); // json type format {"key":"value"}

这会将 json 数据返回给客户端或 servlet..

使用 jquery ajax 读取返回的数据 ...
在客户端使用 jquery 执行以下操作:

$.getJSON("your servlet address", function(data) {
                    var items = [];
                    var keys= [];
                    $.each(data, function(key, val) {
                        keys.push(key);
                        items.push(val);

                    });
                    alert(keys[0]+" : "+items[0]);           
                }); 

在 servlet 上你知道如何读取 json 数据

【讨论】:

  • 是 System.out.println(...) 吗??
  • 我实际上希望 JSON 回到我的客户端 servlet 上。我试过你的解决方案。它只是打印到控制台上。你知道我如何使用 fidresponse 对象使用客户端中的键来访问值吗?
  • PrintWriter out = response.getWriter();此语句将从触发请求的位置写回数据,而不是在控制台上。
【解决方案2】:

执行完帖子后,您可以像这样准备回复。

HttpEntity entity  = fidresponse.getEntity();
BufferedReader br = new BufferedReader(new InputStreamReader(entity.getContent()));

String l = null;
String rest = "";
while ((l=br.readLine())!=null) {
  rest=rest+l;
}

这里的 rest 将包含您的 json 响应字符串。 您也可以使用 StringBuffer。

【讨论】:

  • 服务器端应该怎么做?我只是打印它吗?
猜你喜欢
  • 2019-03-04
  • 2021-12-26
  • 2012-07-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-01-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多