JavaWeb-重定向,请求转发及路径问题

重定向

sendRedirect(xxx)

重定向是客服端行为 ,流程是

  1. 客户端发送http请求给服务器
  2. 服务器接收请求后发送302状态码和新的请求地址给客户端
  3. 客户端接收到302状态码后,会自动发送新的http请求到新的请求地址

所以重定向一共有两次请求,地址栏会发生变化,因为是新的请求所以request不能传递

请求转发 

request.getRequestDispatcher("xxxxx").forward(request,response );

请求转发是服务器行为,流程是

  1. 客户端发送http请求给服务器
  2. 服务器接收请求后在内部自己转发到新的地址
  3. 服务器返回响应给客户端

所以请求转发只有一次转发,地址栏不会变,一直都是第一次的地址,request可以传递

路径问题

  • 重定向因为是从客户端发来的,所以只知道发到那个服务器,不知道发给那个项目,所以重定向的"/"表示"http:服务器ip:8080/"
  • 请求转发因为服务器内部自己转发,因此知道发给那个项目,所以请求转发的"/"表示"http:服务器ip:8080/项目名/"
  • 重定向没有"/"表示在当前目录,请求转发没有"/"表示相对于当前资源的相对路径

额外记录一下

<%
    String path = request.getContextPath();
    String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<base href="<%=basePath%>">

在jsp中加入这段代码,表示当前的基础路径为"http:服务器ip:8080/项目名/",对后面的路径提交很方便友好

猜你喜欢

转载自blog.csdn.net/qq_40866897/article/details/88679493
今日推荐