关于request.getRequestDispatcher("######").forward(req, resp)

原创 2017年01月03日 10:02:47

java web 报错:java.lang.IllegalStateException: Cannot forward after response has been committed…

不知不觉又掉进一个坑里面…反思之后,觉得还是总结不到位,因为最终结局的时候会突然想起来自己以前已经知道这么回事。。。感觉好蠢……


比如:(一些逻辑省略…)

	public void checkPass(HttpServletRequest req, HttpServletResponse resp,UserService userService)  {
		 User user = null;
		
         String name = req.getParameter("username");
         String pass = req.getParameter("pass");
         
         log.debug("pass"+pass);
         
         //***************获取user逻辑省略***************
         //
         if(user == null){
        	 loginMsg = "账号不存在";
			 req.getSession().setAttribute("loginMsg", loginMsg);
			 try {
				req.getRequestDispatcher("login.jsp").forward(req, resp);
			} catch (ServletException | IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
         }
         else{
        	 if(!user.getPassword().equals(pass)){
        		 loginMsg = "密码错误";
    			 req.getSession().setAttribute("loginMsg", loginMsg);
    			 try {
					req.getRequestDispatcher("login.jsp").forward(req, resp);
				} catch (ServletException | IOException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
        	 }
        	 else{
        		 req.getSession().setAttribute("user", user);
        		
					try {
						req.getRequestDispatcher("index.jsp").forward(req, resp);
					} catch (ServletException | IOException e) {
						// TODO Auto-generated catch block
						e.printStackTrace();
					}
			
        	 }
        	//若不注释掉,这一句始终会执行,那么这个方法就会执行两次forward(),就会报错
//        	 try {
//				req.getRequestDispatcher("login.jsp").forward(req, resp);
//			} catch (ServletException | IOException e) {
//				// TODO Auto-generated catch block
//				e.printStackTrace();
//			}
         }
	}




版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

Tomcat8.x Servlet内部跳转机制 req.getRequestDispatcher("...").forward(req, resp);

// Servlet内部跳转的源代码片段 req.getRequestDispatcher("...").forward(req, resp); // req.getRequestDispatche...

request.getRequestDispatcher().forward(request,response)和response.sendRedirect()的区别

在进行web开发时,跳转是最常见的,今天我,
  • uk8692
  • uk8692
  • 2013年10月19日 04:13
  • 5615

request.sendRedirect(重定向)和request.getRequestDispatcher(请求转发)

JSP中response.sendRedirect()与request.getRequestDispatcher().forward(request,response)这两个对象都可以使页面跳转。 ...

细谈getRequestDispatcher()与sendRedirect()的区别

问题?细谈getRequestDispatcher()与sendRedirect()的区别 首先我们要知道: (1)request.getRequestDispatcher()是请求转发,...
  • Mr_li13
  • Mr_li13
  • 2015年12月21日 19:33
  • 2609

req.getRequestDispatcher和resp.sendRedirect的区别

1、index.jsp到main.jsp: String path = request.getContextPath(); String basePath = request.getSch...

getRequestDispatcher(path).forward(),,执行完,后面的代码居然还会执行!!!

尽管HttpServletResponse.sendRedirect方法和RequestDispatcher.forward方法都可以让浏览器获得另外一个URL所指向的资源,但两者的内部运行机制有着很...

request.getRequestDispatcher()的两个方法forward()/include()!!!

RequestDispatcher rd = request.getRequestDispatcher("/MyServlet");请求转发: rd.forward( request , respon...

getRequestDispatcher()用法介绍

ServletContext.getRequestDispatcher(String url)中的url只能使用绝对路径;  而ServletRequest.getRequestDispatch...

spring mvc使用@InitBinder 标签对表单数据绑定

在SpringMVC中,bean中定义了Date,double等类型,如果没有做任何处理的话,日期以及double都无法绑定。 解决的办法就是使用spring mvc提供的@InitBinder标...

WIN7快捷键大全

  以下是官方发布的Windows 7操作系统快捷键的应用解释:1. 轻松访问键盘快捷方式  按住右Shift 八秒钟: 启用和关闭筛选键  按左 Alt+左 Shift+PrtScn(或 PrtSc...
  • Ivanluc
  • Ivanluc
  • 2009年12月08日 14:42
  • 668
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:关于request.getRequestDispatcher("######").forward(req, resp)
举报原因:
原因补充:

(最多只允许输入30个字)