绝对路径:根据给出的请求可以准确定位到资源的路径。Web 应用的绝对路径,则是指带请求协议的路径。
绝对路径:带访问协议的路径是绝对路径 http://127.0.0.1/requestPath/hello.do
请求路径 = |----------- 访问路径 ----------|-资源名称-|绝对路径 = 参照路径 + 相对路径
相对路径:仅根据请求路径无法准确定位资源的路径。相对路径必须要结合其参照路径才可组成可以准确定位资源的绝对路径。
根据相对路径是否以斜杠开头,且出现的文件位置的不同,其默认的参照路径是不同的。
Web路径
* 不带"/"的相对路径 其参照路径为当前的访问路径,而不是被访问资源的所在路径* 带"/"的相对路径
前台路径:在JSP、html中的路径,由浏览器解析。其参照路径为:web服务器根 http://127.0.0.1/
后台路径:Java代码、xml文件中的路径,是服务器解析。其参照路径为:当前Web应用的根 http://127.0.0.1/06-requestPath/
后台路径特例:
对于后台路径的参照路径有一个特例:当代码中使用 response 的 sendRedirect () 方法进行重定向时,其参照路径不是 web 应用的根路径,而是 web 服务器的根路径。
执行 response.sendRedirect("/hello.jsp"); 将会报 404 错误。因为其参照路径是 Tomcat 的根,而非当前项目的根。所以若要使用重定向,要么写无斜杠的相对路径:
response.sendRedirect("hello.jsp");
要么在路径上添加上项目名称:
response.sendRedirect(request.getContextPath + "/hello.jsp");
JSP 的 <base/> 标签:(jsp页面中路径跳转第一次正确,反复跳转出现 404 错误)
若不使用斜杠开头的请求,则需要使用 JSP 的 <base/> 标签。页面中的 <base/> 标签,会在当前页面的资源请求路径前自动加上 <base/> 标签所代表的路径,将相对路径变为带访问协议的绝对路径。
该方式实际上是修改了不带斜杠的相对路径的参照路径,将由原来的当前访问路径作为参照路径,改为了以 basePath 为参照路径。
所以这种方式要求页面中的请求不能以斜杠开头。
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">
<title>My JSP 'index.jsp' starting page</title>
</head>
<body>
<a href="test/hello.do">我是一个演示表</a>
</body>
</html>
希望对你有帮助,祝你有一个好心情,加油!
转载请注明出处,谢谢。