java获取webroot路径_[原创] 如何在 Java 代码中获得 WebRoot 的物理路径?(区分 Windows 和 Linux 的情况)...

第一部分:我自己的处理方法

今天要解析 IK Expression 的 IKExpression.cfg.xml 文件,以解析其中系统函数默认配置和用户函数配置,于是又遇到了一个老问题:Java Web 开发中如何获取部署目录下 WEB-INF 中 classes 的物理路径(网上也有同行描述为:获取服务器中当前WebRoot的物理路径)?

闲话不多说,我先附上代码片段:

1 pathStr = this.getClass().getClassLoader().getResource("").getPath();2 //对 Windows 下获取 物理路径 做 特殊处理

3 if("\\".equals(File.separator)) {4 pathStr = pathStr.substring(1).replaceAll("/", "\\\\");5 }

代码很简单,也不用过多的解释了,相信大家都能看懂的。为什么要对 Windows 下的情况做特殊处理呢?因为如果不做这个处理,得到的结果就如下图所示:

3062447dda97a2693b0c3b446c019705.png

大家可以看到所有 File Separator 都是“/”,而实际我们期望的是“\”。博主用的是 Windows 8 64位版, MyEclipse 8.6 开发, Tomacat 部署,配合虚拟机里面的 Ubuntu 测试 Linux 下的运行效果。所以情况可能跟大家的不太一样,大家根据实际情况修改代码吧 o(∩_∩)o

最后的运行效果图如下:

2938fb59d8cffb631b14a1cc4133aadc.png

上图是在 Ubuntu下部署后运行的效果,下图是在 Windows 8 的 MyEclipse 中运行的效果:

5775ca91a7d45ffadff901fc1190b298.png

下面再附上 Ubuntu 中运行的截图:

073da4465817dd3c36ff129ae0d19fbe.png

这种方法是利用Java的类加载机制调用 XXX.class.getClassLoader().getResource(""); 方法来获取到 ClassPath,然后处理获得 WebRoot 目录。这种方式只能是该class在WebRoot/WEB-INF/classes下才能生效,如果该class被打包到一个jar文件中,则该方法失效。

如果有不完善的地方或更好的方法,欢迎批评指正,谢谢 o(∩_∩)o

第二部分:可供大家参考的其他“高端”做法

最后我再附上网上的其他比较“高端”的做法共大家参考:

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

如果在类中取不到ServletContext时,可采用博主使用的方法,或如下方法:采用 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 的物理路径。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值