无法将hashset参数从jsp传递给servlet(没有会话)

时间:2013-12-26 08:36:30

标签: jsp servlets

我遇到了jsp-servlet的问题。你能帮帮忙吗? 有:LoginServlet.java,AddServlet.java,add.jsp,login.jsp。

  1. login.jsp,用户输入登录名和密码值并通过action.post转到LoginServlet.java
  2. LoginServlet.java get& check parameters,添加到请求属性:登录并清空HashSet 并转发到add.jsp

     protected void doPost(HttpServletRequest request,
                HttpServletResponse response) throws ServletException, IOException {
    
        request.getSession(false);
    
        response.setContentType("text/html;charset=UTF-8");
    
        // Получаем параметры авторизации
        String username = request.getParameter("user");
        String password = request.getParameter("password");
    
        // Проверяем имя пользователя и пароль
        if ("admin".equals(username) && "123".equals(password)) {
    
            request.setAttribute("dreamBasket", new HashSet());
            request.setAttribute("user", username);    
    
            RequestDispatcher rd = request.getRequestDispatcher(response
                    .encodeURL("add.jsp"));
            rd.forward(request, response);
    
        }
    }
    
  3. add.jsp,输入另一个参数并通过action.post转到AddServlet.java

        protected void doGet(HttpServletRequest request,
                HttpServletResponse response) throws ServletException, IOException {  
            request.getSession(false);
    
        String dr = request.getParameter("dream");
    
        HashSet dreamBasket = (HashSet) request.getAttribute("dreamBasket"); //NP!
    
        if (dr != null) {
            dreamBasket.add(dr.toString());
        }  
    

    }

  4. 但是:AddServlet.java无法看到登录和HashSet属性( 如何将login和HashSet值传递给AddServlet.java?

1 个答案:

答案 0 :(得分:0)

不,这不是您在Servlet中获取值的方式。

当您在Servlet中设置请求范围属性时,您将在JSP中获取它们,因为您使用forward(request, response);

使用相同的请求和响应参数转发请求

现在,从JSP发布到Servlet时,Servlet容器将创建一个新请求,因此您设置的值将丢失。

侧面注意:只要您不打算在转发的Set中使用它,我认为没有任何理由创建新的请求范围JSP