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

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

最近在做JavaWeb项目,总是出现各种的路径错误,而且发现不同情况下 /  所代表的含义不同,导致在调试路径上浪费了大量时间。

在JavaWeb项目中尽量使用绝对路径  因为使用绝对路径是绝对不会出错的,而使用相对路径可能会出现错误。


首先 说下在JavaWeb项目中的绝对路径和相对路径的含义

绝对路径: 相对于当前Web应用根路径的路径  也就是任何路径都必须要带上contextPath =  http://localhost:8080/WebProject/

相对路径: 相对于当前目录的路径为相对路径 通常直接用/ 来表示


因为使用相对路径 中的 / 在JavaWeb中的含义在不同的情况下含义不同,所以使用相对路径时可能会出现问题

下面就分析 / 在JavaWeb含义

JavaWeb项目中 /  的不同含义

JavaWeb项目中的 / 可能表示如下含义

当前Web应用的根路径(也就是绝对路径)  http://localhost:8080/WebProject/

有以下情况

> 请求转发时  

request.getRequestDispatcher("/message/a.jsp").forward(request,response);
>  web.xml 文件中映射Servlet 访问路径

 <servlet-mapping>
    <servlet-name>UserServlet</servlet-name>
    <url-pattern>/UserServlet</url-pattern>
  </servlet-mapping>

> 各种定制标签中的 /


当前Web站点的根路径  http://localhost:8080/

有以下情况

> 超链接

<a href=""></a>
> 表单中的action
<form action="" method="post"></form>
> 请求重定向的时候

response.sendRedirect("");


综合上述情况,我们应该在web项目开发中使用绝对路径也就是应该带上contextPath

而contextPath可以由request.getContextPath 或者 application.getContextPath 来获取


所以当遇到超链接  表单中的action 或者 请求重定向的时候,应该在其前面加上contextPath 而不能直接使用相对路径 / 

为了保险起见,大家对项目中出现任何的访问路径,比如css 或者js代码的调用的路径都可以使用绝对路径来防止出现问题