绝对路径,就是以“/”开头的路径。实际开发中,“/”所代表的含义不同,但主要分以下两种情况:
1. Servlet内部配置路径
servlet内部的含义就是:在浏览器看不到,全是在后台处理的部分。包含以下2点:
a. web.xml中 Servlet 配置的路径
<servlet>
<servlet-name>helloWorld</servlet-name>
<servlet-class>com.owen.HelloWorldServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>helloWorld</servlet-name>
<url-pattern>/helloWorld</url-pattern>
</servlet-mapping>
<url-pattern>
必须以 /
开头,因为这里的 /
表示应用的名称。比如我们的应用名是 demo,那访问我们应用的 url 地址就是:http:// www.example.com/demo
。
只有 http:// www.example.com/demo/helloWorld
才能访问到对应的 Servlet
b. forward转发的路径
req.getRequestDispatcher("/view/user_info.jsp").forward(req, resp);
这时候跳转的页面 /view/user_info.jsp
也必须添加 /
,它代表的含义也一样,是我们应用的名称。
总之
在应用内部,
/
代表的就是应用的名称
2.页面配置的路径
a. form的action路径配置
假设应用的名称是 demo,url 是 http:// www.example.com/demo
。下面是登陆表单
<form action="login" method="post">
<input type="submit" value="提交">
</form>
那么用户提交的时候,会将表单提交到 http:// www.example.com/demo/login
当然,如果把应用名称也加上这么写也是可以的
<form action="/demo/login" method="post">
<input type="submit" value="提交">
</form>
b. 页面资源引用
同样,只要是页面中引入的东西(常常需要引入CSS,JS,图片等),都要如此写,比如
<script type="text/javascript" src="${pageContext.request.contextPath}/pages/event/js/addevent.js"></script>
c. jsp/servlet的重定向 redirect
首先必须理解重定向的概念:重定向其实向服务器发送了2次请求,第一次把请求url告诉给服务器,服务器看到这个请求的状态码,马上明白该url是需要浏览器来重新去请求的 url,于是呢把该 url 显示在浏览器的地址栏内,再次向服务器请求(第二次了吧),服务器响应,然后返回。
很明显,只要和页面打交道的,/
都代表服务器根目录,需要在后面添加应用名以区分是哪个应用的请求。所以重定向的 /
表示服务器根目录
再代码中,可以这么写
resp.sendRedirect(req.getContextPath() + "/index.jsp");
总结
页面中的 / 代表服务器根目录,web.xml中 / 代表应用根目录。
请求重定向的 / 代表服务器根目录,请求转发的 / 代表应用根目录。
反正就是前端的 / 表示服务器根目录,后端的 / 表示应用根目录