javaweb转发与重定向的区别

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
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值