jsp/servlet中的相对路径

1.基本概念

绝对路径:


绝对路径就是你的主页上的文件或目录,在硬盘上的真正路径(URL或物理路径)。
例如:
绝对物理路径:C:\xyz\test.txt 代表了test.txt文件的绝对路径。
绝对URL路径: http://www.sun.com/index.htm 代表了一个URL绝对路径。

根路径:

对当前路径而言,相对与某个基准目录的路径。

相对路径:

相对当前根路径时,使用的路径。
例如:使用相对路径时,
"/"代表根路径,"./" 代表当前路径,
"../"代表上级目录。

从上面可以看出:绝对路径 = 根路径+相对路径


2.在JSP/Servlet中的相对路径

假设web应用名称为webapp。
我把以 "/webapp" 开头的路径称为相对绝对路径,简称:绝对路径;
其它的路径,称为相对相对路径,简称:相对路径。(有点绕口)



在使用路径访问一个客户端或服务器端的对象之前,首先看一下服务器端和客户端的根路径地址。


服务器端的根路径地址:

服务器端根路径的地址指的是相对于web应用的地址。
即相对于http://192.168.0.1:8080/webapp/
这个地址是由服务器端解析的。
(不同于前台html/jsp和javascript中的相对地址,他们是由客户端浏览器解析的)

我们在客户端或在服务器端访问或使用,服务器端的资源时,
使用的根路径是:http://192.168.0.1:8080/webapp/

比如servlet中的forward:
request.getRequestDispatcher(address);
因为address是在服务器端解析的,所以,要forward到a.jsp应该这么写:
request.getRequestDispatcher("/user/a.jsp");
这个/是当前web应用webapp的路径,
所以其绝对路径就是:/webapp/user/a.jsp

服务器端所有对象的根路径都是:
http://192.168.0.1:8080/webapp/

客户端的根路径地址 :

客户端根路径的地址是相对于web服务器根目录的地址。
即相对于http://192.168.0.1:8080/
这个地址是由客户端浏览器解析的


比如index.jsp中的form表单的action属性的地址是相对于
服务器根目录(http://192.168.0.1:8080/)的。
使用http://192.168.0.1:8080/webapp/index.jsp
访问index.jsp时,如果提交到a.jsp:
(访问客户端的资源)

方式一:
action="/user/a.jsp"
使用相对路径访问方式,
此时"/"代表根路径:http://192.168.0.1:8080/
结果:404错误


方式二:
action="./user/a.jsp"
使用相对路径访问方式,
此时"./" 代表当前路径:http://192.168.0.1:8080/webapp/
结果:正确

方式三:
action="/webapp/user/a.jsp"
使用绝对路径方式
结果:正确

Javascript也是在客户端解析的,所以其相对路径的使用和form表单一样。


3、客户端使用相对路径访问弊端:

情形之一:
如果客户端的jsp页面是通过action/servlet跳转访问的,
则jsp页面的根路径变为访问action/servlet的路径。
导致在JSP/HTML页面中引用CSS/Javascript/Action等属性时,
不能正确访问。


因此在客户端使用的地址最好是绝对路径


4、在客户端获取绝对路径前缀

如果所有链接都使用手动添加"/webapp"作为前缀,难免有些死板。
在jsp页面中,可以使用<%=request.getContextPath()%>获取
<%=request.getContextPath()%>的值就是:/webapp

EL表达式:${pageContext.request.contextPath}的值也是:/webapp

在项目根目录下创建一个文件:/webapp/varfile/include.jsp
在文件中设置一个变量:
<c:set var="ctx" value="${pageContext.request.contextPath}" scope="page" />

在另一个文件中使用:
<%@include file="/webapp/varfile/include.jsp"%>
<link href="${ctx}/resources/style/main.css" rel="stylesheet" type="text/css" />







引用:
http://www.blogjava.net/simie/archive/2007/07/29/133094.html





---------------------------------
服务器端,Servlet的路径,学习:



例如:
Java代码 复制代码 收藏代码
  1. String file = request.getRequestURI();
  2. if (request.getQueryString() != null) {
  3. file += '?' + request.getQueryString();
  4. }
  5. URL reconstructedURL = new URL(request.getScheme(),
  6. request.getServerName(),
  7. request.getServerPort(),
  8. file);
  9. out.println(URL.toString());

posted on 2013-02-21 20:15  蜜雪薇琪  阅读(263)  评论(0编辑  收藏  举报