Javaweb 开发相对与绝对路径的区别

来源:互联网 发布:iptables端口转发 编辑:程序博客网 时间:2024/05/22 09:43

最初学习 Javaweb 的时候,常常被路径问题所难倒,因为自己嫌麻烦(程序猿共性)不想写绝对路径,所以时常将链接写为相对路径。问题来了,当没有涉及到请求转发时,一切都好好的,很舒服,然而当使用到请求转发后,我的相对路径的链接似乎都失去了效果,就连 css 都失去了效果 ...... 

这另当时的我百思不得其解,于是我决定换为重定向试试,发现一切都很正常,然而为什么转发就出现了问题呢???

重新写了很多测试代码后,发现都出现同样的问题,万份苦恼之时,突然想起我似乎忽略了地址这个东西,再重新反复测试过后终于得到了解答。

首先我们来了解一下什么是相对路径和绝对路径:

在我们的链接中,以"/"开头的,为绝对路径;没有以"/"开头的则为相对路径

对于绝对路径的转发和重定向这里就不多解释了,在我的博客(点击打开链接)里有写到。这里要说的是相对路径的问题。

假定我的 Test 项目里有这么几个文件 ----------- 

WebContent/a.jsp , WebContent/test/b.jsp , src/TobServlet.java (url-pattern:/ToB)

a.jsp

<a href="ToB" >ToB</a>

b.jsp

<a href="../a.jsp" >ToA</a>


TobServlet.java

protected void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {request.getRequestDispatcher("test/b.jsp").forward(request, response);}
1、打开 a.jsp,地址栏:http://localhost:8080/Test/a.jsp ;
2、点击 ToB 后跳转至 b.jsp,地址栏:http://localhost:8080/Test/ToB ; (相信这一点大家都能理解)
3、点击 ToA 后 报错 ,地址栏:http://localhost:8080/a.jsp ;
报错代码 404 ,则为未找到页面报错。
看到这里相信大家也多少明白了些,我们在 1 、2 步时并没有发现异常,但在第三步时报错,切地址栏并非我们预想的那样跳转到 
http://localhost:8080/Test/a.jsp 。直到这里,我们很容易发现,相对路径其实是相对于地址栏而言,而并非相对于文件所在位置。
因此,在这里我们必须将 b.jsp 中的链接改为: /Test/a.jsp (使用绝对路径)。
总结:
当我们在使用相对路径时,一定要考虑到是否有请求转发到此页面,那时的路径是什么,整个项目路径是否一致。考虑到这些,是否觉得使用相对路径居然比绝对路径还难用呢?故建议大家在开发时,尽量使用绝对路径,少用相对路径。

 
原创粉丝点击