Web开发过程中绝对路径,相对路径,虚拟路径这三个概念还是相当绕人的。
1. 绝对路径:就是你的主页上的文件或目录在硬盘上真正的路径。比如,你的Perl 程序是存放在 c:/apache/cgi-bin 下的,那么 c:/apache/cgi-bin 就是 CGI-BIN 目录的绝对路径。
2. 相对路径就是指由这个文件所在的路径引起的跟其它文件(或文件夹)的路径关系。使用相对路径可以为我们带来非常多的便利。、
相对路径的一些有关表示。
"."——代表目前所在的目录。
../表示源文件所在目录的上一级目录,../../表示源文件所在目录的上上级目录,以此类推。
/../include.php 就表示所在文件向一级目录(第一个杠就表示是在根目录下)
下一级目录:
比如:引用下一级目录
引用下级目录的文件,直接写下级目录文件的路径即可。
假设"script.js"路径是:/webroot/pages/js/script.js
假设index.html路径是:/webroot/pages/index.html
在index.htmll加入script.js超链接的代码应该这样写:
<script src="js/script.js" />
3. 虚拟路径
在为服务器端组件编程时,你很可能要从相对于web根的路径来取得某个文件的真实路径,但此文件实际上在站点的一个虚拟路径上。
JSP/Servlet中获得当前应用的相对路径和绝对路径
3.1 JSP中获得当前应用的相对路径和绝对路径
根目录所对应的绝对路径:request.getRequestURI()
文件的绝对路径 :application.getRealPath(request.getRequestURI());
当前web应用的绝对路径 :application.getRealPath("/");
取得请求文件的上层目录:
new File(application.getRealPath(request.getRequestURI())).getParent()
3.2 Servlet中获得当前应用的相对路径和绝对路径
根目录所对应的绝对路径:request.getServletPath();
文件的绝对路径 request.getSession().getServletContext().getRealPath(request.getRequestURI())
当前web应用的绝对路径 :servletConfig.getServletContext().getRealPath("/");
(ServletContext对象获得几种方式:
javax.servlet.http.HttpSession.getServletContext()
javax.servlet.jsp.PageContext.getServletContext()
javax.servlet.ServletConfig.getServletContext()
)
Web开发工作中客户端访问的时候所有的页面的根目录都是(例如:http://202.200.80.0/)的,而不是(http://202.200.80.0/webapp/)的。所以在页面直接要使用路径是可能加上:
- src="<%=request.getContextPath() %>/upload/${finfo.fileName }"
- <form action="<%=request.getContextPath() %>/smart/filehome.jsp" method="post" enctype="multipart/form-data">
这样就可以保证所有引用的文件同在Webapp/下。即Web应用的目录下。