如何在servlet中恢复控制后恢复该值?

时间:2015-07-03 01:31:53

标签: java jsp servlets

我试图在主servlet中包含几个servlet来完成一些进程并检索值。在这个例子中,我接收到从jsp文件到主servlet的控件。在此servlet之后,发送对下一个servlet的调用,以执行与Java List相关的操作,并在将控制返回到主servlet之后。但是,我无法恢复此List的值。如何从主servlet调用的servlet中恢复值?源代码的一部分是下一个:

(主要Servlet) DeletePolicy.java:

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // TODO Auto-generated method stub
        response.setContentType("text/html");
        PrintWriter printWriter = response.getWriter();

        Client client= Client.create();
        WebResource webResource= client.resource("http://localhost:8080/clientLibrary/webapi/policy");

        //create an object of RequestDispatcher 
        RequestDispatcher rd = request.getRequestDispatcher("GetPolicy"); 

        // send the client data available with req of delete to req of getPolicy with include() 
        rd.include(request, response);

        // To receive the parameter from the second servlet
        List<Policy> policies = (List<Policy>)  request.getAttribute("policies");

        printWriter.print("List of books in Delete: ");

        for(Policy policy : policies) {
             printWriter.println("<li>"+"ID: "+policy.getId()+"<br>"+"Max Number of Books: "+policy.getMax_books()+"<br>"+"Year of Book: "+policy.getYear_book()+"<br>"+"Activated: "+policy.getActivate()+"<br></li><br>");
         }

        printWriter.print("I am comming back in Delete to send a request to Delete method");

        /*ClientResponse rs=webResource.accept(
                   MediaType.APPLICATION_JSON_TYPE,
                   MediaType.APPLICATION_XML_TYPE).
                   delete(ClientResponse.class,input);

        printWriter.print("Delete a policy");*/
    }

/ *包括Jozef Chocholacek提供的解决方案:request.setAttribute(“policies”,policies); GetPolicy.java(Second Servlet):

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    // TODO Auto-generated method stub
    PrintWriter printWriter = response.getWriter();

    Client client= Client.create();
    WebResource webResource= client.resource("http://localhost:8080/clientLibrary/webapi/policy");

    printWriter.println("<u>Searching for current policies...</u><br>");

    ClientResponse rs=webResource.accept(
               MediaType.APPLICATION_JSON_TYPE,
               MediaType.APPLICATION_XML_TYPE).
               get(ClientResponse.class);

    //ClientResponse rs = webResource.type(MediaType.APPLICATION_JSON).delete(ClientResponse.class,input);

    /*Transform json to java object*/
    String jsonPolicy=rs.getEntity(String.class);       
    Gson gson = new Gson();
    Policy[] PolicyA = gson.fromJson(jsonPolicy, Policy[].class);
    List<Policy> policies = Arrays.asList(PolicyA);

    for(Policy policy : policies) {
        System.out.println(policy.getId()+" "+policy.getMax_books()+", "+policy.getYear_book()+", "+policy.getActivate()+", ");
    }

    //Send List to the servlet that is calling
    request.setAttribute("policies", policies);

    /*Display book list in the servlet*/
    printWriter.println("<h1>List of Policies</h1>");

    if (policies.isEmpty()){
        printWriter.println("<html><body>Sorry, we did not have any policy"+"<br>");
    }else{
        printWriter.println("<html><body>The complete list of policies: <br>");
        printWriter.println("<ul>");
        for(Policy policy : policies) {
            printWriter.println("<li>"+"ID: "+policy.getId()+"<br>"+"Max Number of Books: "+policy.getMax_books()+"<br>"+"Year of Book: "+policy.getYear_book()+"<br>"+"Activated: "+policy.getActivate()+"<br></li><br>");
        }
    }
    printWriter.println("</body></html>");       
}

提前谢谢

干杯

1 个答案:

答案 0 :(得分:1)

好吧,在你的第一个servlet(DeletePolicy.java)中使用

List<Policy> policies = (List<Policy>) request.getAttribute("policies");

但第二个servlet(GetPolicies.java)不会将此列表存储到请求中。你必须添加

request.setAttribute("policies", policies);

进入你的第二个servlet。