javaweb转发与重定向的区别
题主在完成用户登录模块时,在对两者概念模糊导致报错:
转发:
(浏览器调用jsp容器中的方法调用目标页面,浏览器不知道,所有地址栏的地址不会发生变化) request.getRequestDispatcher("/login.jsp").forward(request,response);
重定向:
(通知浏览器发送一个新的页面请求,地址栏会发生变化)
response.sendRedirect(request.getContextPath() + “/index.jsp”);
代码:
request.setCharacterEncoding("utf-8");
// 解决response输出页面中文乱码
response.setContentType("text/html;charset=utf-8");
// 校验验证码
String check_code = request.getParameter("checkcode");
String checkcode_session = (String) request.getSession().getAttribute("checkcode_session");
request.getSession().removeAttribute("checkcode_session"); // 移除session内存储的验证码
if (!check_code.equalsIgnoreCase(checkcode_session)) {
// 验证码错误
request.setAttribute("msg", "验证码输入错误!");
request.getRequestDispatcher("/login.jsp").forward(request, response);// 转发
return; // 停止执行
}
if (check_code.equalsIgnoreCase(checkcode_session)) {
String username = request.getParameter("username");
String password = request.getParameter("password");
User user = urs.isExsitUser(username, password);
// 根据返回的结果做出判断
if (user != null) {
//登录成功
//判断用户是否选择自动登录
String autoLogin = request.getParameter("autoLogin");
if(autoLogin!=null){
//新建cookie存储username和password
Cookie username_cookie = new Cookie("username",user.getUsername());
Cookie password_cookie = new Cookie("password",user.getPassword());
//设置cookie的持久化时间和路径
username_cookie.setMaxAge(60*100);
username_cookie.setPath(request.getContextPath());
password_cookie.setMaxAge(60*100);
password_cookie.setPath(request.getContextPath());
//发送cookie
response.addCookie(username_cookie);
response.addCookie(password_cookie);
}
// 重定向到首页 将返回的user放到session域中
request.getSession().setAttribute("user", user);
response.sendRedirect(request.getContextPath() + "/index.jsp");
} else {
// 重定向到登录页面 将错误信息写到页面
request.setAttribute("cw", "用户名或密码错误!");
request.getRequestDispatcher("/login.jsp").forward(request, response);// 转发
//response.sendRedirect(request.getContextPath() + "/login.jsp");
}
@批注:题主在将错误信息保存在request域中后,使用了重定向,导致在页面中取不到错误信息。
-------------------
---------
[1]: http://math.stackexchange.com/
[2]: https://github.com/jmcmanus/pagedown-extra "Pagedown Extra"
[3]: http://meta.math.stackexchange.com/questions/5020/mathjax-basic-tutorial-and-quick-reference
[4]: http://bramp.github.io/js-sequence-diagrams/
[5]: http://adrai.github.io/flowchart.js/
[6]: https://github.com/benweet/stackedit