web开发中正确使用绝对路径与相对路径

在web开发中,经常会涉及到路径问题。如何正确使用绝对路径与相对路径,是每一位web开发者必须掌握的事情。

1.相对路径

相对路径就是站在我自己的角度来找资源,写法如下:

"./a.jsp"	//找同级目录
"../a.jsp"	//找上级目录
"./images/pic.jpg"	//找同级文件夹内的资源

2.绝对路径

绝对路径就是以” / “开头 的路径,即从根目录出发,当然这里的根目录也是有坑的,详见第4点

3.原则:尽量使用绝对路径,不写相对路径

由于web开发的时候多使用页面的转发与跳转,同一个资源的相对路径也会随着页面的uml地址而发生变化。大约就是,如果有一个页面,他的路径是 /a.jsp 它引用了其同级目录 b.jsp 的资源,此时相对路径写为 ./b.jsp 。正常访问 a.jsp 的时候,资源的确能被加载出来,但是,如果是通过其他方式(如 a.jsp 上层目录中有一个 c.jsp ,通过转发跳转到 a.jsp )来访问 a.jsp,那么 ./b.jsp 资源就无法被加载(404 not found),原因就是浏览器会在 c.jsp 所在的同级目录去找 b.jsp ,当然是找不到啦~~

4.正确使用绝对路径

第二点提到,绝对路径是以” / “为开头的,但是” / “表示的意义也不尽相同

"/" == "http://localhost:8080/"		//浏览器眼里

"/" == "http://localhost:8080/myProject/"		//web应用眼里

4.1 正所谓情人眼里出西施,辣么,谁是浏览器眼里的”情人“呢?即,什么时候” / “代表” http://localhost:8080/ “呢?

1.jsp里面都是(包括但不局限于以下两种)
	a.超链接:<a href = "/a.jsp">点我点我</a>
	
	b.form表单:<form action = "/a.jsp">

2.servlet里
	a.重定向的时候:response.sendRedirect("/a.jsp")

为了不出错,以上情况在路径前面要加上:request.getContextPath(),变成如下样子:

	a.超链接:<a href = "request.getContextPath()/a.jsp">点我点我</a>
	
	b.form表单:<form action = "request.getContextPath()/a.jsp">

	c.重定向的时候:response.sendRedirect("request.getContextPath()/a.jsp")

4.2 作为web应用的”西施“,就独得恩宠,可以直接使用。包括但不仅限于下列三种情况:

1.servlet里的转发:request.getRequestDispatcher("/a.jsp")

2.web.xml里<servlet-mapping>中url映射
	<servlet-mapping>
		<servley-name>MyJSP</servley-name>
		<url-pattern>/a.jsp</url-pattern>
	</servlet-mapping>

3.自定义标签中

5.总结

在web应用中,不要尝试使用相对路径,当使用绝对路径的时候,看清使用的情况,遇到资源加载不出来的问题时,添加request.getContextPath()试试,没准你的使用情况恰好是浏览器眼中的”西施“。

发布了34 篇原创文章 · 获赞 65 · 访问量 3734

猜你喜欢

转载自blog.csdn.net/baidu_41860619/article/details/103568529
今日推荐