关于Web应用路径设置说明&相对路径与绝对路径的区别


关于Web应用路径设置的说明,也就是绝对路径与相对路径的理解咯。

首先我们来看一个问题:

① 创建Web应用Path,目录结构如图所示
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-fEC0IA7T-1575201170609)(尚硅谷_张春胜_Servlet.assets/1558010305136.png)]
② 在a.html中有超链接<a href=“b.html”>To b.html,TestServlet中转发到a.html
a.html:

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>相对路径与绝对路径</title>
</head>
<body>
	<a href="b.html">To b.html</a>
</body>
</html>

TestServlet:

public class TestServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		request.getRequestDispatcher("/dir/a.html").forward(request, response);
	}

	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {		
			doGet(request,response);
	}

}

index.html:

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<a href="TestServlet">TestServlet</a>
</body>
</html>

③ 如果先直接访问a.html,再通过超链接转到b.html没有问题,在这里就不试了。

④ 如果先通过TestServlet转发到a.html,则浏览器地址栏会变成 http://localhost:8989/Path/TestServlet
在这里插入图片描述
点击TestServlet:
在这里插入图片描述
此时再点击超链接<a href=“b.html”>To b.html就会发生问题,找不到b.html。如图:
在这里插入图片描述

如何解决?

原因是超链接<a href=“b.html”>To b.html使用的是相对路径,浏览器进行解析时,只能以当前浏览器地址栏里的路径为基准。例如,当前浏览器地址栏里的内容是:http://localhost:8989/Path/TestServlet

那么经过浏览器解析后b.html的访问地址就成了:http://localhost:8989/Path/TestServletb.html这显然无法访问到b.html。

完整的url构成如下图:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-HPU2uq7R-1575201170611)(尚硅谷_张春胜_Servlet.assets/1558010582082.png)]

关于相对路径和绝对路径的说明:

相对路径:虚拟路径如果不以“/”开始,就是相对路径,浏览器会以当前资源所在的虚拟路径为基准对相对路径进行解析,从而生成最终的访问路径。此时如果通过转发进入其他目录,再使用相对路径访问资源就会出错。所以为了防止路径出错,我们经常将相对路径转化为绝对路径的形式进行请求。

绝对路径:虚拟路径以“/”开始,就是绝对路径。
① 在服务器端:虚拟路径最开始的“/”表示当前Web应用的根目录。只要是服务端解析的绝对路径,都是以web根目录为起始的。由服务器解析的路径包括:<1> web.xml的配置路径、<2>request转发的路径。
② 在浏览器端:虚拟路径最开始的“/”表示当前主机地址。
例如:链接地址“/Path/dir/b.html”经过浏览器解析后为:
相当于http://localhost:8989/Path/dir/b.html
由浏览器解析的路径包括:
<1>重定向操作:response.sendRedirect("/xxx")
<2>所有HTML标签:<a href="/xxx"> 、<form action="/xxx"> 、link、img、script等
这些最后的访问路径都是 http://localhost:8989/xxx

所以我们可以看出,如果是浏览器解析的路径,我们必须加上项目名称才可以正确的指向资源。http://localhost:8989/Path/xxx

<1>重定向操作:

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

<2>所有HTML标签:<a href="/项目名/xxx">; <form action=“/项目名/xxx">

  • 在浏览器端,除了使用绝对路径之外,我们还可以使用base标签+相对路径的方式来确定资源的访问有效。
  • base标签影响当前页面中的所有相对路径,不会影响绝对路径。相当于给相对路径设置了一个基准地址。
  • 习惯上在html的标签内,声明:
<!-- 给页面中的相对路径设置基准地址 -->
<base href="http://localhost:8080/Test_Path/"/>

接着html中的路径就可以使用相对路径的方式来访问。比如:

<h4> base+相对路径</h4>
<!-- <base href="http://localhost:8080/Test_Path/"/> -->
<a href="1.html">1.html</a><br/>
<a href="a/3.html">a/3.html</a><br/>
<!-- servlet映射到了项目根目录下,可以直接访问 -->
<a href="PathServlet">PathServlet</a><br/>

知道原理了问题还没解决呢?
修改一下a.html的跳转地址就好啦。
a.html:

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>相对路径与绝对路径</title>
<base href="http://localhost:8989/Path/"/>
</head>
<body>
	<a href="dir/b.html">To b.html</a>
</body>
</html>

然后我们再来访问一下:
在这里插入图片描述
刚在这错了,继续访问一下:
在这里插入图片描述
如图:访问成功了,原理就地址栏的url哦。就是项目访问地址+页面相对地址就好了。

有人不理解这个Path哪来的,以前访问的不是自己项目名吗?怎么成Path了?
我告诉你们啊,
这个可以设置的,看这里:
在这里插入图片描述
关于这个路径有时候我就设置成’/’,访问起来就方便了,不过自己熟悉关于web中的url组成怎么喜欢怎么设置。对于学技术这点,我觉得你们不但要知其然,还要知其所以然,有时候底层的铺垫决定了你是否盖起你心中的那座摩天大楼。继续加油吧。

发布了166 篇原创文章 · 获赞 585 · 访问量 6万+

猜你喜欢

转载自blog.csdn.net/zxdspaopao/article/details/103570444
今日推荐