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

问题描述:

我需要将两个数组转发到一个jsp页面来显示它们。我已经成功地使用下面的代码转发单个阵列:如何使用sendRedirect从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()完成吗?

可以通过参数发送任何你想要的字符串。在你的情况下,只需添加第二个参数,你重定向你的第二个编码阵列,像:

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[] )而不需要对其进行编码。