我有一个登录表单(login.jsp),有两个输入项,分别是用户名和密码。
我使用POST通过Ajax访问登录servlet。
我希望用户登录成功后能够重定向到另一个名为'search.jsp'的页面。如果登录失败,则作为Ajax responseText返回“登录失败”消息,并插入到“login.jsp”页面的段落中。
我已经完成了一切工作,我的登录servlet通过一个独立的bean访问数据库,并返回具有其属性准备就绪的该bean对象。所以从这个方面来说一切都很顺利。
但是,在用户名和密码通过数据库之后,我会使用RequestDispatcher来转发到新的着陆页面(search.jsp)。
以下是我的doPost()代码:
但是,与其将请求和响应转发到新的jsp页面“search.jsp”,整个search.jsp页面都被塞回到原始的login.jsp页面中 - 在登录失败时保持Ajax responseText的html元素中。当从表单操作属性调用servlet时,servlet中的forward()方法有效,但在包含Ajax代码的javascript文件中调用servlet时无效。
我使用POST通过Ajax访问登录servlet。
我希望用户登录成功后能够重定向到另一个名为'search.jsp'的页面。如果登录失败,则作为Ajax responseText返回“登录失败”消息,并插入到“login.jsp”页面的段落中。
我已经完成了一切工作,我的登录servlet通过一个独立的bean访问数据库,并返回具有其属性准备就绪的该bean对象。所以从这个方面来说一切都很顺利。
但是,在用户名和密码通过数据库之后,我会使用RequestDispatcher来转发到新的着陆页面(search.jsp)。
以下是我的doPost()代码:
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String username,password;
username = request.getParameter("p");
password = request.getParameter("q");
try {
LoginService ls = new LoginService(username,password);
User user = ls.getUserDetails();
if(user.getUsername()!=null && user.getPassword()!=null){
FormService filler = new FormService();
Form fields = filler.getFields();
request.setAttribute("user",user);
request.setAttribute("fields1",fields);
request.setAttribute("fields2",fields);
request.setAttribute("fields3",fields);
HttpSession session = request.getSession(true);
//set attribute for the session
session.setAttribute("user",user.getUsername());
//Now, the RequestDispatcher.forward() is not forwarding to the new page!
//The whole 'search.jsp' page is being stuffed back into the 'login.jsp' page
RequestDispatcher rd = request.getRequestDispatcher("search.jsp");
rd.forward(request,response);
return;
}
else{
PrintWriter out = response.getWriter();
out.println("login failed!");
return;
}
} catch (Exception e) {
e.printStackTrace();
}
}
但是,与其将请求和响应转发到新的jsp页面“search.jsp”,整个search.jsp页面都被塞回到原始的login.jsp页面中 - 在登录失败时保持Ajax responseText的html元素中。当从表单操作属性调用servlet时,servlet中的forward()方法有效,但在包含Ajax代码的javascript文件中调用servlet时无效。