问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

J2EE web项目,绝对路径和相对路径如何设置与获取?

发布网友 发布时间:2022-04-09 05:50

我来回答

3个回答

热心网友 时间:2022-04-09 07:19

这是我去年6月份根据一些资料整理和总结的J2EE web项目中解决所有路径问题,希望对你和更多人有帮助:
------------------------------
  Java中使用的路径,分为两种:绝对路径和相对路径。归根结底,Java本质上只能使用绝对路径来寻找资源。所有的相对路径寻找资源的方法,都不过是一些便利方法。不过是API在底层帮助我们构建了绝对路径,从而找到资源的!

  在开发Web方面的应用时, 经常需要获取服务器中当前WebRoot的物理路径。

  如果是Servlet , Action , Controller, 或者Filter , Listener , *等相关类时, 我们只需要获得ServletContext, 然后通过ServletContext.getRealPath("/")来获取当前应用在服务器上的物理地址。

  如果在类中取不到ServletContext时,有两种方式可以做到:

  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.DebitNoteAction.class.getResource("")
  得到的是当前类FileTest.class文件的URI目录。不包括自己!
  如:file:/D:/eclipse/springTest/WebRoot/WEB-INF/classes/
  atacarnet/src/com/evi/moles/atacarnet/action/

  2.DebitNoteAction.class.getResource("/")
  得到的是当前的classpath的绝对URI路径。
  如:file:/D:/eclipse/springTest/WebRoot/WEB-INF/classes/

  3.Thread.currentThread().getContextClassLoader().getResource("")
  得到的也是当前ClassPath的绝对URI路径
  如:file:/D:/eclipse/springTest/WebRoot/WEB-INF/classes/
  推荐使用该方法获取。

  4.DebitNoteAction.class.getClassLoader().getResource("") 或ClassLoader.getSystemResource("")
  得到的也是当前ClassPath的绝对URI路径。
  如:file:/D:/eclipse/springTest/WebRoot/WEB-INF/classes/

  5.取得服务器相对路径
  System.getProperty("user.dir")
  例如:E:\apache-tomcat-5.5.16\apache-tomcat-5.5.16\bin

  6.取得项目中的绝对路径
  一般用request.getRealPath("/")或request.getRealPath("/config/")

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

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

  但如果我要取得不在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"));
-------------------------------
另:Request中getContextPath、getServletPath、getRequestURI、getRequestURL、getRealPath的区别

  假定你的web application 名称为news,你在浏览器中输入请求路径:http://localhost:8080/news/main/list.jsp

  则执行下面向行代码后打印出如下结果:

1、 System.out.println(request.getContextPath());
  打印结果:/news

2、System.out.println(request.getServletPath());
  打印结果:/main/list.jsp

3、 System.out.println(request.getRequestURI());
  打印结果:/news/main/list.jsp

4、System.out.println(request.getRequestURL());
  打印结果:http://localhost:8080/news/main/list.jsp

5、 System.out.println(request.getRealPath("/"));
  打印结果:F:\Tomcat 6.0\webapps\news\test

热心网友 时间:2022-04-09 08:37

System.getProperty("user.dir")
获得项目的相对目录追问谢谢,这样取到的是tomcat的bin路径C:\Program Files\Apache Software Foundation\Tomcat 6.0\bin,能否取到项目的部署路径下呢?

追答你项目是部署到TOMCAT下的赛
你取道TOMCAT的路径了,自己在拼凑下就行了

热心网友 时间:2022-04-09 10:12

String path=Thread.currentThread().getContextClassLoader().getResource("").getPath().substring(1);
System.out.println(path);
获取到的是 D:/apache-tomcat-6.0.30/webapps/Test/WEB-INF/classes/ 路径
之后你自己处理就可以了
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
门?049期父母欲其改娶五字金口决,开是什么特号生肖 支付宝怎么把银行卡的钱转到余额里呢? 下载wampserver5,安装并启动后不能启用apache、mysql的功能,请问这是怎... wampserver安装多个版本phpmysqlapache 四季豆有哪些吃法值得推荐? 四季豆牛肉馅饼的家常做法是什么? 香煎四季豆豆腐饼怎么做好吃 腾讯会议没声音怎么修复-腾讯会议没有声音修复办法 西安市高新区所有幼儿园 西安高新第二初级中学学区有哪些小区 有什么小学生值得看好书 日语二级准考证丢了,如何查询成绩 江阴市佳得利人力资源服务有限公司怎么样? 日语二级准考证丢了,可以那倒成绩单吗? 日语二级证没收到怎么办? 湖州倍宠宠物用品有限责任公司怎么样? 日语等级考试成绩已经发放了,但是我还没去拿成绩单怎么办啊?? 青岛佳得利广告有限公司怎么样? 德清佳得利商贸城发展有限公司怎么样? 无锡市佳得利房地产开发有限公司怎么样? 老师你好,我想问下过去考的日语等级证书丢失,在网上是否还能查到成绩?可否有什么解决方法?谢谢 蒙自佳得利石化经营有限公司佳得利加油站怎么样? 日语等级考试成绩单遗失,请问有什么方法可以补领吗? 深圳市佳得利锡业有限公司怎么样? 猫砂什么最好 最实用 又便宜? 你好 我把日语等级考试的成绩单弄丢了 也是很多年前考的 准考证也没有了 只用身份证号还能找回来么? 蒙自佳得利石化经营有限公司怎么样? 豆腐猫砂哪种牌子好用而且价格便宜 在日本考了N2证书丢了怎么办 苏州工业园区佳得利商贸有限公司怎么样? 我女儿上初一啦,语文文言文不怎么理解,应该看些什么书对她有帮助 给孩子读什么样的古文 有什么好用又便宜的豆腐猫砂? 很喜欢的一件文胸,罩杯合适,可是胸围却小了,请问有什么方法可以改吗? 文胸买小了怎么办? 内衣买小了怎么办? 内衣买小了咋办 内衣小了有什么危害吗? 胸罩小了怎么改大,罩杯正好就是穿了太压人了 超市买文胸小了,没标签了,还可以换么? 文胸小了怎么改大了 今天离春节还有几天啊? 上海各色公交卡功能性? 阳台不贴砖的话该如何处理? 求教。 阳台不贴瓷砖是怎么装修? 阳台墙面不贴瓷砖怎么装修,阳台墙面装修注意事项 普通红砖怎么铺造型 阳台可以不用贴瓷砖,创意设计焕然一新,如何改造阳台是明智之举? 阳台墙上没有贴瓷砖该怎么办即防晒也防潮 阳台除了水泥贴瓷砖还有更有简便的方法么