如何使用sendRedirect从servlet向jsp发送多个数组

时间:2016-11-18 14:51:40

标签: java jsp servlets

我需要转发两个数组,由servlet处理到jsp页面以显示它们。我使用以下代码成功转发了一个数组:

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

    String n = request.getParameter("name");
    int k = Integer.parseInt(n);
    int array[] = new int[3];
    PrintWriter out = response.getWriter();
    List<RecommendedItem> recommendations = new ArrayList<RecommendedItem>();

    try {
        recommendations = App.getRecommend(k);
    } catch (Exception e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    int i = 0;
    // out.println("we recommend");
    for (RecommendedItem recommendation : recommendations) {
        // out.println(recommendation.getItemID()+" "
        // +recommendation.getValue());
        array[i] = (int) recommendation.getItemID();
        i++;
    }

    String param = Arrays.toString(array);
    param = param.substring(1, param.length() - 1);// removing enclosing []
    String encArray = URLEncoder.encode(param, "utf-8");

    // Send encArray as parameter.
    response.sendRedirect(("output.jsp?fib=" + encArray));
}

但是现在我想将第二个由(int)recommendation.getValue()组成的数组转发给output.jsp。可以使用response.sendRedirect()完成吗?

1 个答案:

答案 0 :(得分:0)

可以通过参数发送您想要的任何字符串。在您的情况下,只需使用第二个编码数组向重定向添加第二个参数,如:

response.sendRedirect(("output.jsp?fib=" + encArray + "&fib2=" + encArray2));

以与fib参数相同的方式获取它。

但是,处理Servlet中值的传输的更好和更好的方法是通过RequestDispatcher。代码:

req.setAttribute("fib", encArray);
req.setAttribute("fib2", encArray2);
req.getRequestDispatcher("output.jsp").forward(req, response);

使用以下命令恢复JSP中的数组:

<% 
   String encArray = (String) request.getAttribute("fib"); 

   // ...

   String encArray2 = (String) request.getAttribute("fib2");
%>
  

注意: 使用第二个选项,您甚至可以设置和恢复Java数组对象(String[]),而无需对其进行编码。 / em>的