JavaWeb中的绝对路径和相对路径问题

在开发的时候,因为路径,往往会造成很多问题。所以开发时,JavaWeb尽可能的用绝对路径

a.jsp

<span style="font-family:KaiTi_GB2312;font-size:18px;"><strong><body>
	<h1>A page</h1>
	<a href="pathProblem/b.jsp">To B page</a>
</body></strong></span>

b.jsp

<span style="font-family:KaiTi_GB2312;font-size:18px;"><strong><body>
	<h1>B page</h1>
	Citys:<%= request.getAttribute("citys") %>
	<a href="c.jsp">To C page</a>
</body></strong></span>

c.jsp

<span style="font-family:KaiTi_GB2312;font-size:18px;"><strong><body>
	<h1>C page</h1>
	<a href="../a.jsp">To A page</a>
</body></strong></span>

上面3个jsp,都是相对路径,可以正常访问

但是,通过转发和重定向后

a.jsp

<span style="font-family:KaiTi_GB2312;font-size:18px;"><strong><body>
	<h1>A page</h1>
	<a href="testServlet">To B page</a>
</body></strong></span>

b.jsp

<span style="font-family:KaiTi_GB2312;font-size:18px;"><strong><body>
	<h1>B page</h1>
	Citys:<%= request.getAttribute("citys") %>
	<a href="c.jsp">To C page</a>
</body></strong></span>

c.jsp

<span style="font-family:KaiTi_GB2312;font-size:18px;"><strong><body>
	<h1>C page</h1>
	<a href="../a.jsp">To A page</a>
</body></strong></span>

testServlet

<span style="font-family:KaiTi_GB2312;font-size:18px;"><strong>@WebServlet("/testServlet")
public class testServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;

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

		//1.模拟从数据库中查询数据
		List<String> citys = Arrays.asList("BJ","SH","GZ");
		request.setAttribute("citys", citys);
		// 根目录下pathProblem 目录 下的b.jsp
		request.getRequestDispatcher("/pathProblem/b.jsp").forward(request, response);
	}

}</strong></span>

a.jsp 可以访问 b.jsp,但是b.jsp却不能访问c.jsp?

因为在 a.jsp
转发到 b.jsp后,路径( http://localhost:8080/Session/testServlet ),从b.jsp 再去c.jsp时,因为 b->c 是相对路径,所以 b 会认为 c.jsp 和当前WEB应用的根目录 ( /Session)处于同一目录,找不到,所以就会访问失败。这就出现了路径错乱的问题。

 总结:

1.绝对路径的问题

1). 开发时建议编写 "绝对路径" :写绝对路径肯定不会出问题,但是写相对路径有时候就会出现问题

在由 Servlet 转发到 JSP 页面时,此时浏览器地址栏上显示的是Servlet 的路径,而若 JSP 的页面的超链接还是相对于该 JSP

页面的地址,则可能会出现路径混乱的问题.

根目录

-/a.jsp

-path

-/b.jsp

-/c.jsp

a.jsp -> Servlet 转发 -> b.jsp (有超链接,连接到和b.jsp 同目录下c.jsp 这时就会出现问题)->页面混乱

2).编写绝对路径可以避免上述问题:

绝对路径: 相对当前 Web 应用的根路径(ContextPath)的路径,即任何路径都必须带上ContextPath.

http://localhost:8080/Session/a.jsp √.   ContextPath -> Session

http://localhost:8080/a.jsp         ×.   当前站点  ->  http://localhost:8080/

3).JavaWeb 中的 ‘/‘ 到底代表什么?

①.有时候代表的是: 当前WEB应用的根路径(http://localhost:8080/ContextPath/) :若 ‘/‘ 需要交给Servlet 来处理

>请求转发时,request.getRequestDispatcher("/xxxx").forward(,,);

>web.xml 中 映射Servlet

<servlet-mapping>

<servlet-name>TestServlet</servlet-name>

<url-pattern> /TestServlet </url-pattern>

</servlet-mapping>

>各种定制标签中的 /

②.有时代表的是当前WEB站点的根路径(http://localhost:8080/):若 ‘/‘ 交给浏览器处理

>超链接:<a href="/XXXX">

>表单中的action <form action="/login.jsp">

>做请求重定向的时候,response.sendRedirect("/a.jsp");

如何完成编写绝对路径:

若‘/‘代表的是站点的根目录,在其前面加上ContextPath 就可以了,而ContextPath 可以由request.getContextPath() 或

application.getContextPath() 得到

<a href="/TestPath">B page</a> 就无法访问Servlet

改为 <a href="<%=request.getContextPath()%>/TestPath"> B page </a>

response.sendRedirect(request.getContextPath()+"/pathProblem/b.jsp");

时间: 2024-10-06 14:29:38

JavaWeb中的绝对路径和相对路径问题的相关文章

在开发中关于javaweb中的路径问题小结

转自http://blog.csdn.net/yinyuehepijiu/article/details/9136117 在javaweb项目中添加配置文件,满足连接数据库配置参数以及其他自定义参数存放,可自己写一个配置文件**.properties,把项目所需的自定义配置信息以名值对的形式写入文件.在项目工程目录下的WebRoot\WEB-INF\classes目录下新建一个conf文件夹专门存放配置文件,然后把**.properties配置文件放到conf中,部署时IDE会自动将其复制到相应

javaWeb中的/路径问题

在写javaweb的时候,在写路径的时候,/有时候表示站点根目录,有时候表示当前web应用根目录,究竟如何区分呢? 首先,我们建议开发的时候,跳转之类的都是用绝对路径(注意:不是物理路径),而不是使用相对路径,因为使用相对路径很容易出现问题.现在这里科普下绝对路径,相对路径和物理路径的区别.1.绝对路径:指的是相对于当前web应用的路径:2.相对路径:指的是相对于当前页面目录的相对路径:3.物理路径:指的是当前页面在磁盘的全路径.因为javaweb开发一般使用mvc模式,jsp页面一般都是通过后

JavaWeb 项目中的绝对路径和相对路径以及问题的解决方案

最近在做JavaWeb项目,总是出现各种的路径错误,而且发现不同情况下 /  所代表的含义不同,导致在调试路径上浪费了大量时间. 在JavaWeb项目中尽量使用绝对路径  因为使用绝对路径是绝对不会出错的,而使用相对路径可能会出现错误. 首先 说下在JavaWeb项目中的绝对路径和相对路径的含义 绝对路径: 相对于当前Web应用根路径的路径  也就是任何路径都必须要带上contextPath =  http://localhost:8080/WebProject/ 相对路径: 相对于当前目录的路

关于javaWeb中的路径问题总结

路径分绝对路径和相对路径,不管是在html还是jsp还是java中,都一样. 1 "/"开头的就是绝对路径.而且,填写绝对路径,一定要在服务器中启动,否则找不到路径! 2 没有"/"开头的就是相对路径.其中"./"表示当前目录下寻找,"../"表示上一级目录下,而当前目录下"./"可以省略不写! 3 对于在服务器中启动的项目文件,其路径一般都填绝对路径. 4 其中要注意的是: 5 重定向是相当于浏览器而言,

JavaWeb中的关于html、jsp、servlet下的路径问题

1 前言 本文将对近期项目练习中出现的关于文件路径的问题进行分析和总结,主要涉及html页面中的href及ajax指向路径.jsp页面中href指向路径及servlet转发或重定向路径等内容,本文的分析及总结将尽量做到知其然知其所以然. 注:本文中的项目练习,是通过IDEA的MAVEN插件,部署到TOMCAT完成的.**所有html.jsp页面都在webapp文件夹下,所有src中的java文件会由maven自动编译为class文件,放在WEB-INF文件夹下.** 2 html页面标签内的路径

[原创]java WEB学习笔记35:java WEB 中关于绝对路径 和相对路径问题

本博客为原创:综合 尚硅谷(http://www.atguigu.com)的系统教程(深表感谢)和 网络上的现有资源(博客,文档,图书等),资源的出处我会标明 本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱好者,互联网技术发烧友 微博:伊直都在0221 QQ:951226918 ---------------------------------

JavaScript中获取当前项目的绝对路径

最近在做JavaWeb项目相关的东西,几乎每天都遇到很多问题,主要是因为自己对JavaWeb方面的知识不是很清楚,尽量把自己在项目中遇到的问题都记录下来,方便以后查阅. 在我们的项目中有这样的需要,当在页面停留时间过长时,自动调回主页面first.jsp,所以我就写了个load.js代码文件,然后在每个jsp页面上都引用它,这样就出现了问题,因为每个页面不都是在WebRoot的根目录下的,有可能是在其子目录下,如下图所示: 所以对于每个jsp页面所跳转回主页面first.jsp的路径就不相同,所

使用OpenFiler来模拟存储配置RAC中ASM共享盘及多路径(multipath)的测试

第一章 本篇总览 之前发布了一篇<Oracle_lhr_RAC 12cR1安装>,但是其中的存储并没有使用多路径,而是使用了VMware自身提供的存储.所以,年前最后一件事就是把多路径学习一下,本文介绍了OpenFiler.iSCSI和多路径的配置. 本文内容:   第二章 安装OpenFiler OpenFile是在rPath Linux基础上开发的,它能够作为一个独立的Linux操作系统发行.Openfiler是一款非常好的存储管理操作系统,开源免费,通过web界面对存储磁盘的管理,支持现

网站中图片的相对路径与绝对路径

1.相对路径 网站中加载图片所用到的相对路径,相对路径是以网页所在位置为参考的. ../代表上一级目录 src="../../photo/1.png"; src="images/1.jpg"; 2.绝对路径