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的路径,学习:
例如:
绝对路径:
绝对路径就是你的主页上的文件或目录,在硬盘上的真正路径(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的路径,学习:
![](http://dl.iteye.com/upload/attachment/0078/8664/68bbd9b5-8543-38f1-bdd7-6b9a52184f9a.png)
例如:
- String file = request.getRequestURI();
- if (request.getQueryString() != null) {
- file += '?' + request.getQueryString();
- }
- URL reconstructedURL = new URL(request.getScheme(),
- request.getServerName(),
- request.getServerPort(),
- file);
- out.println(URL.toString());