码迷,mamicode.com
首页 > 编程语言 > 详细

java(web)相对路径,绝对路径

时间:2016-03-19 22:47:56      阅读:331      评论:0      收藏:0      [点我收藏+]

标签:

1、定义

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

  相对路径:相对与某个基准目录的路径。包含Web的相对路径(HTML中的相对目录),例如:在
Servlet中,"/"代表Web应用的根目录。和物理路径的相对表示。例如:"./" 代表当前目录,
"../"代表上级目录。这种类似的表示,也是属于相对路径。

 

2、JSP/Servlet中的相对路径写法

  2.1带有"/"的相对路径

  要点:确定是服务器调用  还是  浏览器调用

  (1)服务器端带有"/"的相对路径(服务器调用)

    指的是相对于你的web项目的地址,这个地址是在服务器端解析的(不同于html和javascript中的相对地址,他们是由客户端浏览器解析的)也就是说这时候
在jsp和servlet中的相对地址应该是相对于你的web项目,即相对于http://localhost:8080/webapp/的。

 

  例如:request.getRequestDispatcher("/reg/reg.jsp").forward(request,response)

这里的地址就是服务器端调用,“/”相对于当前的web应用webapp,
其绝对地址就是:http://localhost:8080/webapp/reg/reg.jsp

  (2)客户端带有"/"的相对路径(浏览器调用)

   所有的html页面中的相对地址都是相对于服务器根目录(http://localhost:8080/)的,
而不是(跟目录下的该Web应用的目录)http://localhost:8080/webapp/的。
 Html中的form表单的action属性的地址应该是相对于服务器根目录(http://localhost:8080/)的

例如:如果提交到toreg.jsp为:action="/webapp/reg.jsp"或action="<%=request.getContextPath()%>"/reg.jsp;
  提交到servlet为actiom="/webapp/regservlet"  
   Javascript也是在客户端解析的,所以其相对路径和form表单一样。
 

  因此,一般情况下,在JSP/HTML页面等引用的CSS,Javascript.Action等属性前面最好都加上
<%=request.getContextPath()%>,以确保所引用的文件都属于Web应用中的目录。
另外,应该尽量避免使用类似".","./","../../"等类似的相对该文件位置的相对路径,这样
当文件移动时,很容易出问题。

 2.2不带"/"的相对路径

例如,假如当前的页面路径是http://localhost:8080/myWebApp/login.jsp那么在这个页面访问"main.jsp"即是访问http://localhost:8080/myWebApp/main.jsp

也就是说,使用不带"/"的相对路径  那么访问的是  当前页面路径  所属 目录下的文件路径(这个特征无论是服务器端还是客户端都适用)

  

3. 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()
     )

3.3 在SSH各个层次获得项目根目录 REQUEST 等

Java代码 
  1. 1.System.out.println(ServletActionContext.getServletContext().getRealPath("/"));     
  2. 2.ystem.out.println(Struts2Utils.getParameter("loginName"));    
  3.     System.out.println(ServletActionContext.getServletContext().getRealPath("/"));  
  4. System.out.println(Struts2Utils.getParameter("loginName"));  


利用了STRUTS2的ServletActionContext类
他是线程安全的 使用了threadlocal

或者利用springside的Struts2Utils类
他封装了struts2的ServletActionContext类

java(web)相对路径,绝对路径

标签:

原文地址:http://www.cnblogs.com/Lanyuxuan/p/5296047.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!