java(web)相对路径,绝对路径
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java(web)相对路径,绝对路径相关的知识,希望对你有一定的参考价值。
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 等
- 1.System.out.println(ServletActionContext.getServletContext().getRealPath("/"));
- 2.ystem.out.println(Struts2Utils.getParameter("loginName"));
- System.out.println(ServletActionContext.getServletContext().getRealPath("/"));
- System.out.println(Struts2Utils.getParameter("loginName"));
利用了STRUTS2的ServletActionContext类
他是线程安全的 使用了threadlocal
或者利用springside的Struts2Utils类
他封装了struts2的ServletActionContext类
以上是关于java(web)相对路径,绝对路径的主要内容,如果未能解决你的问题,请参考以下文章