前言
在JavaWeb开发中,常常涉及到关于路径的问题。例如请求的转发、重定向、超链接等等,都需要明确写出相对应的位置信息。在这个里面,常用到两种路径:绝对路径与相对路径。
在这里先给出结论:在JavaWeb开发中,建议使用绝对路径。**使用相对路径可能会有问题, 但使用绝对路径肯定没有问题.**比如,在由Servlet转发到JSP页面时,此时,浏览器地址栏上显示的是Servlet的路径。如果该JSP页面中的超链接是相对于该JSP页面的地址,则可能会出现路径混乱的问题。
1. 绝对路径与绝对路径
绝对路径定义:在Web开发中,将相对于当前WEB应用的根路径的路径,称为绝对路径。即任何的路径都必须要带上contextPath
假设Web应用的项目名为helloworld,则有:
http://localhost:8989/helloworld/index.jsp 是绝对路径
而
http://localhost:8989/index.jsp不是绝对路径。
因为http://localhost:8989/helloworld是当前web应用helloworld的根路径。
总结下,绝对路径的基本样式为:
http://localhost:8989/contextPath(当前WEB应用的上下文路径)/xxx
- 如何编写绝对路径?
在路径的前面加上contextPath路径即可。如超链接里面:
<a href = "TestServlet">to test</a>
改为绝对路径为:
<a href = "<% request.getContextPath()%>"/TestServlet</a>
在重定向中,使用绝对路径的实现方法:
response.sendRedirect(request.getContextPath()+"/path/hello.jsp");
相对路径定义:默认从当前目录开始的目录路径称为相对路径。
2. JavaWEB开发中的“/”代表什么?
- / 什么时候代表当前 WEB 应用的根目录?WEB应用的根路径为:http://localhost:8989/contextPath/
①:当请求转发时,“/”代表的是WEB应用的根目录
request.getRequestDispatcher("/path/index.jsp").forward(request,response);
②:在web.xml文件中映射Servlet访问路径时,“/”代表的是WEB应用的根目录
<servlet-mapping>
<servlet-name>HelloServlet</servlet-name>
<url-pattern>/helloServlet</url-pattern>
</servlet-mapping>
- / 什么时候代表站点的根目录?WEB站点的根路径:http://localhost:8989/
① 超链接:
<a> href="/TestServlet"> To B Page</a>
② 表单中的action
<form action = "/login.jsp">
③ 请求重定向的时候
response.sendRedirect("/a.jsp");
- 总结:
若 / 需交由Servlet容器来处理,则/代表的是Web应用的根目录。
若 / 需交由浏览器来处理,则代表站点的根目录。