最近在做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);
- <servlet-mapping>
- <servlet-name>UserServlet</servlet-name>
- <url-pattern>/UserServlet</url-pattern>
- </servlet-mapping>
> 各种定制标签中的 /
当前Web站点的根路径 http://localhost:8080/
有以下情况
> 超链接
- <a href=""></a>
- <form action="" method="post"></form>
- response.sendRedirect("");
综合上述情况,我们应该在web项目开发中使用绝对路径也就是应该带上contextPath
而contextPath可以由request.getContextPath 或者 application.getContextPath 来获取
所以当遇到超链接 表单中的action 或者 请求重定向的时候,应该在其前面加上contextPath 而不能直接使用相对路径 /
为了保险起见,大家对项目中出现任何的访问路径,比如css 或者js代码的调用的路径都可以使用绝对路径来防止出现问题