请求转发与重定向路径

请求转发与重定向路径

一、请求转发与重定向区别

  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

 

posted @ 2021-01-28 16:37  臭猪  阅读(507)  评论(0编辑  收藏  举报