2015-11-26 59 views
2

我想將JsonObject傳遞給jsp。不過,我認爲我無法使用getAttribute方法獲取JsonObject。我應該如何做到這一點。我無法將json對象從servlet轉換爲jsp。我能怎麼做?

下面有一個Servlet代碼。

import java.io.IOException; 
import java.io.PrintWriter; 
import java.util.Iterator; 

import javax.servlet.ServletException; 
import javax.servlet.annotation.WebServlet; 
import javax.servlet.http.HttpServlet; 
import javax.servlet.http.HttpServletRequest; 
import javax.servlet.http.HttpServletResponse; 
import javax.servlet.http.HttpSession; 

import com.google.gson.JsonObject; 
import com.google.gson.JsonParser; 

@WebServlet("/ShapeRendererFileManager") 
public class ShapeRendererFileManager extends HttpServlet { 
    private static final long serialVersionUID = 1L; 
    HttpSession session; 

//Send Json to jsp 
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 
    response.setContentType("text/html;charset=euc-kr"); 
    session = request.getSession(true); 
    //System.out.println(request.getParameter("tmp").toString()); 
    JsonObject jsonObject = new JsonObject(); 
    jsonObject.addProperty("name", "jinny"); 
    jsonObject.addProperty("title", "web"); 

    session.setAttribute("jsonObject", jsonObject); 
    response.sendRedirect("index.jsp"); 
    } 
} 

下面是一個jsp代碼。

<%@page import="com.google.gson.JsonObject"%> 

    <%@page import="com.google.gson.JsonElement"%> 

    <%@page import="com.google.gson.JsonArray"%> 
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 
<html> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=EUC-KR"> 
<title>start page</title> 
</head> 
<% 
    request.setCharacterEncoding("euc-kr"); 
    response.setContentType("text/html;charset=euc-kr"); 
    String tmp = ""; 
    JsonObject json = (JsonObject)session.getAttribute("jsonObject"); 
    tmp = json.get("name").toString(); //error at this line 
%> 
<body> 
<script> 
    $(function(){ 
     document.getElementByName("formtag").action="ShapeRendererFileManager"; 
     document.getElementById("formtag").submit(); 
    }) 
</script> 

<h1><%= tmp %></h1> 
<form name="formtag" action="" method="post"> 
</form> 

</body> 
</html> 

在此先感謝。

+0

你可以顯示JSON格式嗎? – SpringLearner

+0

您是否在json.get(「name」)。toString();上獲得nullpointerexception? –

+0

如果json對象是流的一次,那麼應該使用response.forward(req,res);一個更好的方法,而不是在會話中設置jsonObject。 –

回答

0

@The新比諾Develper

即使我改變重定向轉發它不工作,使同樣的錯誤。

下面是下面的servlet代碼。

  protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 
    response.setContentType("text/html;charset=euc-kr"); 
    session = request.getSession(true); 
    //System.out.println(request.getParameter("tmp").toString()); 
    JsonObject jsonObject = new JsonObject(); 
    jsonObject.addProperty("name", "jinny"); 
    jsonObject.addProperty("title", "web"); 


    session.setAttribute("jsonObject", jsonObject); 

    RequestDispatcher rd = request.getRequestDispatcher("index.jsp"); 
    rd.forward(request, response); 
} 

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

    response.setContentType("text/html;charset=euc-kr"); 
    session = request.getSession(true); 
    //System.out.println(request.getParameter("tmp").toString()); 
    JsonObject jsonObject = new JsonObject(); 
    jsonObject.addProperty("name", "jinny"); 
    jsonObject.addProperty("title", "web"); 


    session.setAttribute("jsonObject", jsonObject); 

    RequestDispatcher rd = request.getRequestDispatcher("index.jsp"); 
    rd.forward(request, response); 

    //response.sendRedirect("index.jsp"); 

} 

下面是jsp代碼。

<%@ page language="java" contentType="text/html; charset=EUC-KR" 
    pageEncoding="EUC-KR" %> 
    <%@page import="com.google.gson.JsonObject"%> 
    <%@page import="com.google.gson.JsonElement"%> 
    <%@page import="com.google.gson.JsonArray"%> 
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 
<html> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=EUC-KR"> 
<title>start page</title> 
</head> 
<% 
    request.setCharacterEncoding("euc-kr"); 
    response.setContentType("text/html;charset=euc-kr"); 
    JsonObject json = (JsonObject)session.getAttribute("jsonObject"); 
    String tmp = json.get("name").toString(); //error at this line 
%> 
<body> 
<!-- <div id="main_page"> 
</div> 
<script data-main="main" src="libs/require-2.1.11.js"></script> --> 

<script> 
    $(function(){ 
     document.getElementByName("formtag").method="POST"; 
     document.getElementByName("formtag").action="ShapeRendererFileManager"; 
     document.getElementById("formtag").submit(); 
    }); 
</script> 

<h1><%= tmp %></h1> 
<form name="formtag" action="" method="post"> 
</form> 

</body> 
</html> 
1

這裏只是一個使用谷歌Gson庫的示例。您可以下載的lib herehere

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

    HashMap<Object, Object> obj=new HashMap<>(); 
    obj.put("name", "Janny"); 
    obj.put("title", "Coder"); 

    String jsonObject=new Gson().toJson(obj); 
    System.out.println(jsonObject); 
    response.setContentType("application/json"); 
    response.setCharacterEncoding("UTF-8"); 
    session.setAttribute("jsonObject",jsonObject); 
    request.getRequestDispatcher("index.jsp").forward(request, response); 
} 

無論如何,你可以使用Ajax來循環的數據,或使用JSTL!

0

能否請您嘗試使用下面的代碼在你的servlet代替的sendRedirect

RequestDispatcher rd = request.getRequestDispatcher("index.jsp"); 
rd.forward(request, response); 

,並檢查JSONObject的在你的JSP爲空要麼你得到空或不是從會話屬性,

JsonObject json = (JsonObject)session.getAttribute("jsonObject"); 

做完上述變更後,如果您再次得到錯誤,請發佈錯誤堆棧。

0

你能給嘗試改變你的迴應的contect類型

response.setContentType("application/json"); 
0

有多種事情錯在你的代碼。除了使用scriptlet。

Anyhoo,首先,你確定你的會議正在結轉?我這樣說是因爲您使用重定向而不是簡單的RequestDispatcher Forward。重定向會創建一個新的請求。

我認爲你應該在請求中設置這個對象並使用RequestDispatcher。同樣,在JSP方面,您應該使用請求對象來獲取屬性。

沒有關於會話如何創建的很多信息,很難確定會話是否完全維護。

相關問題