请求转发与重定向路径
一、请求转发与重定向区别
1、请求转发是在服务器内部跳转,整个过程只有一个请求;重定向属于客户端跳转,产生了新的请求;体现为:请求转发浏览器url不变,转发后可以使用之前的参数,重定向浏览器url变化,不能使用前一次请求的参数。
2、请求转发只能跳转到当前服务器资源,重定向可以跳转到其他的服务器资源。
二、请求转发、重定向路径前是否带‘/’
请求转发与重定向路径前不带‘/’:这种情况都表示当前jsp或者servlet当前路径,是一个相对路径,在同一个服务器下;
请求转发前带‘/’ :/ 表示参照服务器web应用的根路径(就是某个项目的webroot)
重定向前带‘/’ :/ 表示参照web服务器的根路径,会丢失web应用的根路径,解决方案:在 / 前面加上request.getContextPath();或者直接添加项目名称。
若是在jsp使用pageContext.request.contextPath来代替request.getContextPath()
例如:<ahref="{pageContext.request.contextPath}/req.action">
三、举例说明
1 if(u!=null) { 2 // 重定向 3 resp.sendRedirect("/mg/main/main.jsp"); 4 return ; 5 } else { 6 // 这里的横线表示项目名称 不需要自己在写项目的名称,与重定向不一样 7 req.getRequestDispatcher("/login.jsp").forward(req, resp); 8 return ; 9 }
main.jsp 在项目WebRoot/mian 文件夹下面
login.jsp 在项目WebRoot下面
http://localhost:8080/mg/login.jsp 这是项目登陆页面的url作为下面的参考
http://localhost:8080/mg/main/main.jsp 这是项目主页面的url作为下面的参考
对于重定向中的第一个/ :表示的是项目服务器的根目录 表示的是localhost:8080/ 如果不指定mg就无法找到具体项目,出现404无法找到资源路径。
对于请求转发中的第一个/:表示服务器中项目的名称mg 表示”localhost:8080/mg(项目的名)/ 也就是到大了webapp