您的位置:首页 > 编程语言 > Java开发

java web中相对路径和绝对路径的获取

2017-07-19 08:11 417 查看

1.关于JSP/Servlet中的相对路径和绝对路径。

 

1.服务器端的地址

 

指的是相对于你的web应用的地址,这个地址是在服务器端解析的,也就是说这时候在jsp和servlet中的相对地址应该是相对于你的web应用,即相对于http:
//192.168.30.147/webapp/的。

 

其用到的地方有:

 

forward:servlet中的request.getRequestDispatcher(address);这个address是在服务器端解析的。

 

  所以,你要forward到a.jsp应该这么写:request.getRequestDispatcher(“/user/a.jsp”)这个/相对于当前的web应用webapp,其绝对地址就是:http://192.168.30.147/webapp/user/a.jsp。sendRedirect:在jsp中<%response.sendRedirect("/rtccp/user/a.jsp");%>

 

2.客户端的地址

 

所有的html和javascript页面中的相对地址,,这个地址是在客户端浏览器解析的,都是相对于服务器根目录,及相对于(http://192.168.30.147/)的。

 

其用到的地方有:

Html中的form表单的action属性的地址应该是相对于服务器根目录(http://192.168.30.147/)的。所以,如果提交到a.jsp为:action="/webapp/user/a.jsp"或action="<%=request.getContextPath()%
>"/user/a.jsp;

  提交到servlet为actiom="/webapp/handleservlet" Javascript也是在客户端解析的,所以其相对路径和form表单一样。

  因此,一般情况下,在JSP/HTML页面等引用的CSS,Javascript.Action等属性前面最好都加上

<%=request.getContextPath()%>,以确保所引用的文件都属于Web应用中的目录。另外,应该尽量避免使用类似".","./","../../"等类似的相对该文件位置的相对路径,这样当文件移动时,很容易出问题。

 

3.JSP中获得当前应用的相对路径和绝对路径

 

根目录所对应的绝对路径:request.getRequestURI()

文件的绝对路径 :application.getRealPath(request.getRequestURI());

当前web应用的绝对路径
:application.getRealPath("/"); 

取得请求文件的上层目录:

new File(application.getRealPath(request.getRequestURI())).getParent()

 

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

)

 

2.java类中获取路径

 

1) 利用Java的类加载机制 调用XXX.class.getClassLoader().getResource("");方法来获取到ClassPath
,然后处理获得WebRoot目录

 

(这种方式只能是该class在WebRoot/WEB-INF/classes下才能生效, 如果该class被打包到一个jar文件中,
则该方法失效。这时就应该用下面一种方式)

 

2) spring框架的思路,在WEB-INF/web.xml中,创建一个webAppRootKey的param,指定一个值(默认为webapp.root)作为键值

 

然后通过Listener ,
或Filter , 或Servlet执行String webAppRootKey = getServletContext().getRealPath("/");

 

并将webAppRootKey对应的webapp.root分别作为Key , Value写到System
Properties系统属性中。之后在程序中通过System.getProperty("webapp.root")来获得WebRoot的物理路径

 

下面是一些得到classpath和当前类的绝对路径的一些方法。你可使用其中的一些方法来得到你需要的资源的绝对路径:

 

1.得到当前类FileTest.class文件的URI目录,不包括自己:

 

DebitNoteAction.class.getResource("")

如:

file:/D:/eclipse/springTest/WebRoot/WEB-INF/classes/atacarnet/src/com/evi/modules/atacarnet/action/

 

2.得到当前ClassPath的绝对URI路径

 

this.getClass().getResource("/")

this.getClass().getClassLoader().getResource("")

Thread.currentThread().getContextClassLoader().getResource("")

ClassLoader.getSystemResource("")

  如:file:/D:/eclipse/springTest/WebRoot/WEB-INF/classes/

 

(推荐使用Thread.currentThread().getContextClassLoader().getResource("")来得到当前的classpath的绝对路径的URI表示法)

 

3.取得服务器相对路径

 

System.getProperty("user.dir")

  如:E:\apache-tomcat-5.5.16\apache-tomcat-5.5.16\bin

 

4.取得项目中的绝对路径

 

request.getRealPath("/")

request.getRealPath("/config/")

  (但现在不提倡使用request.getRealPath("/")了,大家可试用ServletContext.getRealPath("/")方法得到Web应用程序的根目录的绝对路径)

 

5.要取得src的文件非常容易,因为src是默认的相对目录,比如你说要取得src下com目录的test.java文件,你只需要这样就够了

 

File f = new File(com/test.java);

8.但如果我要取得不在src目录或者WebRoot目录下的文件呢,而是要从src或者WebRoot同级的目录中取呢,比如说doc吧

 

  我的硬方法是这样实现的: 

 

String path = this.getServletContext().getRealPath("/");

 

Properties p = new Properties();

 

p.load(new FileInputStream(new File(path.substring(0,(path.lastIndexOf("\\WebRoot") + 1)) + "doc/db.properties")));

 

System.out.println(p.getProperty("driverName"));

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: