1、绝对路径
绝对路径:以 “ / ” 开头的路径,是完整的路径。
在绝对路径中, “ / ” 的含义有两种解释:
(1)如果是服务器端解析, “ / ” 代表相对于当前web应用的绝对路径,即:协议名://服务器名(主机地址):端口号/项目名/,例如:http://localhost:8080/MyTest/。
(2)如果是浏览器端解析(出现在地址栏里的路径), “ / ” 代表相对于当前服务器的绝对路径,即:协议名://服务器名(主机地址):端口号/,例如:http://localhost:8080/。
常见的两种绝对路径的例子就是转发和重定向。
转发:当浏览器向服务器发送请求的时候,服务器自己不处理,而是调用其他的web资源进行处理。 | ||||
重定向:当浏览器向服务器发送请求的时候,服务器返回给浏览器一个特殊的响应,这个特殊的响应告诉浏览器再向另一个地址发送一个请求。 | ||||
转发和重定向的区别: | 发生在浏览器还是服务器 | 浏览器的请求次数 | 浏览器地址栏是否发生变化 | 浏览器能否感知到 |
转发[request] | 发生在服务器端 | 1 | 不发生变化 | 感知不到 |
重定向[response] | 发生在浏览器端 | 2 | 发生变化 | 能感知到 |
2、相对路径
相对路径:不以 “ / ” 开头的路径,是相对于当前web资源目录的路径。
(相对路径的写法参考博文:HTML相对路径写法)
3、举例
假设在当前动态web项目MyTest中,项目根目录webContent下有两个页面src.html和des.html。
src.html中,通过超链接访问项目中的Servlet,此时a标签的地址由浏览器端解析,路径的第一个 “ / ” 代表http://localhost:8080/,如果直接写 " /MyServlet " 就会报404错误。
<a href="/MyTest/MyServlet">主页</a><!-- /MyTest/MyServlet等价于http://llocalhost:8080/MyTest/MyServlet -->
在MyServlet中做如下处理,将请求转发到des.html做处理,此时转发器中的地址由服务器解析,路径的第一个 “ / ” 代表http://localhost:8080/MyTest/。
如果是重定向,重定向中的地址由浏览器解析,路径的第一个 “ / ” 代表http://localhost:8080/,如果直接写 " /des.html " 就会报404错误。
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.getRequestDispatcher("/des.html").forward(request, response); //转发 /des.html 等价于 http://localhost:8080/MyTest/des.html
// response.sendRedirect("/MyTest/des.html"); //重定向 /MyTest/des.html 等价于 http://localhost:8080/MyTest/des.html
}
转自:web应用路径问题(相对路径,绝对路径,动态获取路径)