2012-07-20 62 views
0

我試圖在不使用任何框架的情況下實現REST類型體系結構。所以我基本上是從我的客戶端調用一個正在執行doPost()的JSP到提供服務的遠程服務器上。現在我能夠以JSON格式將數據從客戶端傳遞到服務器,但我不知道如何讀取響應。有人能幫我解決這個問題嗎?從JSP中的doPost()返回

客戶端:

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服務。如果您有任何其他建議,請大家分享...謝謝你,

中的doPost
+0

你問的是如何從請求中獲取json字符串或者如何反序列化json字符串? – 2012-07-20 11:20:44

+0

我想知道如何從請求中獲取JSON字符串?...從遠程計算機上的另一個servlet中獲取... – Fox 2012-07-20 11:23:30

+0

響應正文將包含您的json響應。從fidresponse中讀取響應主體。 (我還不確定我是否理解你的問題) – 2012-07-20 11:26:06

回答

0

你只需要做:

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數據

+0

它是System.out.println(...)?? – Fox 2012-07-20 11:34:14

+0

no ... PrintWriter out = response.getWriter(); – 2012-07-20 11:37:53

+0

我真的想把JSON放回我的客戶端servlet。我試過你的解決方案。它只是打印到控制檯上。你知道如何使用fidresponse對象在客戶端使用鍵來訪問該值嗎? – Fox 2012-07-20 11:46:48

0

執行後,您可以準備好這樣的回覆。

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; 
} 

這裏其餘部分將包含您的JSON響應字符串。 你也可以使用StringBuffer。

+0

我應該在服務器端做什麼?我只是打印它? – Fox 2012-07-20 11:36:24

+0

是的,在服務器中,你可以打印它在JSON格式。 – 2012-07-20 11:37:48

相關問題