-1

以下是我想要通过会话的两个 servlet。

问题是会话传递是在导航到 SuccessPage servlet 时完成的,而不是在它转到 Failure servlet 时完成的。

登录servletdoGet()方法:

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws    
ServletException, IOException{
    PrintWriter out=response.getWriter();
    response.setContentType("text/html");
    String userName=request.getParameter("userName");
    String userPass=request.getParameter("userPassword");
    String userRePass=request.getParameter("userRePassword");
    try{
        String query="Select VendorName from vendorinfo where VendorPass=?";
        connection1=Connection_Class.getInstance().getConnection();
        ptmt=connection1.prepareStatement(query);
        ptmt.setString(1,userPass);
        rs=ptmt.executeQuery();
        if(rs.next()&& userName.equalsIgnoreCase(rs.getString("VendorName"))){
        HttpSession session=request.getSession(true);
        session.setAttribute("loggedVendor",rs.getString(1));
        //this is working fine...im able to get the userName in the next servlet
        ServletContext context = getServletContext();
        RequestDispatcher dispatcher=context.getRequestDispatcher("/SuccessPage");
        dispatcher.forward(request,response);
        }
        else{  //this is not working .....whats the problem here ?
            request.setAttribute("wrongUser",userName);
            ServletContext context=getServletContext();
            RequestDispatcher dispatcher=context.getRequestDispatcher("/Failure");
            dispatcher.forward(request,response);
        }
    }
    catch(SQLException e){
        e.printStackTrace();
    }
}

失败的servletdoGet()方法:

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws  
ServletException, IOException {
/*all i want to do here is that I want to get the userName from the previous servlet but its 
not displaying that and its displaying null */
    response.setContentType("text/html");
    PrintWriter out=response.getWriter();
    out.println("<body bgcolor=#F3EEF0><h1>");
    out.println("<center>");
    HttpSession session=request.getSession(false);
    out.println("This is a failure page");
    out.println(session.getAttribute("wrongUser"));
    out.println("</center></h1></body>");
}

代码有问题吗?

4

1 回答 1

1

您将带有键“wrongUser”的数据放入请求中,而不是第一个 servlet 中的会话:

 request.setAttribute("wrongUser",userName);

并从失败 Servlet 中的会话中检索它:

session.getAttribute("wrongUser");

在两个地方都使用“会话”或在两个地方使用“请求”。因此,如果您使用 request.setAttribute(),请使用 request.getAttribute()。如果您使用 session.setAttribute(),请使用 session.getAttribute()。

建议:使用request,这样你就不会用很多随意的方式开始加载session。您不需要超出此请求/响应周期范围的此值。

于 2013-05-28T10:10:41.277 回答