servlet请求转发、重定向路径

时间:2022-08-08 21:07:16

一、重定向:通知浏览器重新发送至xxx的请求。

1、发生场景:

response.sendRedirect("xxx");

2、参数问题:

重定向只是告诉浏览器发送请求URL,没有携带任何参数。

3、绝对路径:

(1)例如:报错×

response.sendRedirect("/xxx");
其中的“/”表示“http://服务器ip:端口/”,比如:http://localhost:8080/。【注意,用该方法访问会报错404,因为访问结果的url是:http://localhost:8080/xxx,在这里没有声明项目名。】

 

(2)列如:正确√

response.sendRedirect(request.getContextPath()+"/xxx");

如果是服务器重定向用“request.getContextPath()”来获取绝对路径。需要改成response.sendRedirect("/项目名/xxx")

 

二、请求转发:服务器ProjectA将请求转发给服务器ProjectA其他的应用程序。

1、发生场景:

request.getRequestDispatcher("xxx.jsp").forward(request,response);

2、参数问题:

服务器内部的转发,可以将Request域的参数转发到下一个服务端程序。

3、路径:

例如:正确√

request.getRequestDispatcher("/xxx.jsp").forward(request,response);

其中的“/”表示“http://服务器ip:端口/项目名/”,按照该方式访问的url就是:http://localhost:8080/Project1/xxx.jsp。

 

如果是服务器内部跳转使用如下方式:报错×

request.getRequestDispatcher("/项目名/xxx.jsp").forward(request, response);
访问的url就变成:http://localhost:8080/Project1/Project1/xxx.jsp【同样404报错】

 

三、总结:

1、重定向的 / 表示:http://服务器ip:端口/

2、请求转发的 / 表示:http://服务器ip:端口/项目名

说明:重定向是浏览器发来的,只知道发到某个服务器,但是不知道发到服务器的哪个project,所以需要自己用代码声明;而请求转发是服务器某个project内部的转发,转来转去都是在某个project内部,所以不需要手动声明项目名。

 

补充:jsp页面绝对路径用${pageContext.request.contextPath}

<script type="text/javascript"src="${pageContext.request.contextPath}/jquery-3.1.1.js"></script>