使用PrintWriter对象将Java对象的List对象发送到JSP?

时间:2016-01-21 09:07:54

标签: java json jsp servlets

在继续之前,我意识到几年前有一个类似的问题(Passing a List from Servlet to JSP)。我意识到可以设置我试图作为会话属性传递的列表,但出于好奇,我想知道是否可以使用PrintWriter对象将数据发送回JSP页面。

JSP

<script type="text/javascript">
        function getEngineSchemes(engineID) {
            $.get('SchemeTypeServlet', {
                action: "getSchemes",
                engineID: engineID
            },
            function(data, status){

            }).fail(function() {
                alert("Error obtaining schemes for engine with engine id: " + engineID);
            });
        }
    </script>
</body> 

的Servlet

@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    //Set type of response
    response.setContentType("text/html");
    response.setCharacterEncoding("UTF-8");
    //get parameters that may be passed from client to determine which methods should be called
    String action = request.getParameter("action");

    if(action.equalsIgnoreCase("getSchemesForEngine")) { 
        Integer engineID = Integer.parseInt(request.getParameter("engineID"));
        List<String> schemeNames = getSchemeNamesForEngine(engineID);

        response.getWriter(). //insert code to send object back to JSP
        response.getWriter().flush();
    }       

选项

我认为可能合理的一个解决方案是创建一个JSONObject并且有一些类似

的内容。
response.setContentType("application/json");
JSONObject json = new JSONObject();
     for(String name : schemeNames) {
            json.put(engineID, name);
         }
    response.getWriter().write(json.toJSONString());
    response.getWriter().flush();

我还没有测试过上面的代码,但我只是想知道这是否是我问题的最佳解决方案,或者我是否过于复杂?也许对我的问题有一个更简单的解决方案。

1 个答案:

答案 0 :(得分:0)

我认为你脑子里的东西搞砸了。首先,您不能将文本或任何类型的数据从servlet发送到jsp。正确的方法是使用会话并使用response.sendRedirectRequestDispatcher.forward方法。但是这将忽略之前对servlet的Writer对象所做的任何调用。