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

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

 

1.服务器端的地址

 

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

 

其用到的地方有:

 

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

 

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

 

2.客户端的地址

 

所有的htmljavascript页面中的相对地址,,这个地址是在客户端浏览器解析的,都是相对于服务器根目录,及相对于(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

  提交到servletactiom"/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目录

 

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

 

2) spring框架的思路,WEB-INF/web.xml中,创建一个webAppRootKeyparam,指定一个值(默认为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是默认的相对目录,比如你说要取得srccom目录的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"));

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值