2012-12-09 154 views
0

我想創建一個應用程序,它將從servlet中獲取JSON對象以反序列化它,然後使用它的變量執行其他操作。從Servlet中獲取JSON對象Java

我的servlet已經在doPost方法如下代碼:

protected void doPost(HttpServletRequest request, HttpServletResponse response) 
      throws ServletException, IOException { 

     ObjectOutputStream os; 
     os = new ObjectOutputStream(response.getOutputStream()); 

     String s = new String("A String"); 

     Gson gson = new Gson(); 
     String gsonObject= gson.toJson(s); 

     os.writeObject(gsonObject); 
     os.close(); 

    } 

現在,該servlet運行時,我可以通過瀏覽器訪問它,如果我張貼在doGet方法相同的代碼,這將下載一個servlet文件,這不是我想要的。

我應該在我的第二個應用程序中使用哪個連接到servlet的對象,以便稍後操作它?

在此先感謝。

+0

你的第二個應用程序是什麼?呈現一個html頁面或從Java代碼讀取和處理? – vels4j

回答

0

你的servlet:

protected void doPost(HttpServletRequest request, HttpServletResponse response) 
      throws ServletException, IOException { 
    String s = new String("A String"); 
String json = new Gson().toJson(s); 
this.response.setContentType("application/json"); 
this.response.setCharacterEncoding("UTF-8"); 
Writer writer = null; 
try { 
     writer = this.response.getWriter(); 
     writer.write(json); 
} finally { 
    try { 
     writer.close(); 
    } 
    catch (IOException ex) { 
    } 
} 
} 
+0

非常感謝,沒有完全解決我的問題,但它幫助了很多,並且實際上讓它工作。 – ChrisA

0

如果下載servlet文件而不是在瀏覽器中顯示它,很可能您沒有在響應中設置內容類型。如果你正在寫一個JSON字符串作爲servlet響應,你必須使用

response.setContentType("text/html"); 
response.getWriter().write(json); 

請注意您需要一些變化的順序,其「text/html的」,而不是「HTML /文本」

0

IFI正確地理解問題,那麼你可以使用,java.net.HttpURLConnectionjava.net.URL對象來創建到這個servlet的連接,並讀取你的第二個servlet上述JSON的servlet流的JSON。