2015-11-26 2 views
2

Я пытаюсь передать JsonObject в jsp. Однако, я думаю, что я не могу получить JsonObject, используя метод getAttribute. Как сделать это доступным.Я не могу получить объект json из сервлета в jsp. Как я могу сделать?

Ниже приведен код сервлета.

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

Вы получаете nullpointerexception в json.get ("name"). ToString(); –

+0

Если объект json один раз, как с потоком, вы должны использовать response.forward (req, res); лучший подход, вместо установки jsonObject в сеансе. –

ответ

0

@The Neo Noir Develper

Даже я изменил редирект перенаправлять Она не работает и делает ту же ошибку.

Вот код сервлета ниже.

  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

Здесь просто образец библиотеки Google Gson. Вы можете скачать, что Лив here или here

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

Не могли бы вы, пожалуйста, попробуйте использовать следующий код в сервлет вместо 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

Есть несколько вещей неправильно в вашем коде. Помимо использования скриптов.

Anyhoo, во-первых, вы уверены, что ваша сессия переносится? Я говорю это, потому что вы используете перенаправление вместо простого RequestDispatcher Forward. Перенаправление создает новый запрос.

Я думаю, вы должны установить этот объект в запросе и использовать RequestDispatcher. Аналогично, на стороне JSP вы должны использовать объект запроса, чтобы вернуть атрибут.

Без подробной информации о том, как создается сеанс, было бы трудно определить, поддерживается ли сеанс вообще или нет.

Смежные вопросы