在Java代码(非JSP及Action,Servlet,Controller)中获得WebRoot的物理路径

在开发Web方面的应用时, 常常须要获取 server中当前WebRoot的物理路径;

假设是Servlet , Action , Controller, 或则Filter , Listener , 拦截器等相关类时。 我们仅仅须要获得ServletContext。 

然后通过ServletContext.getRealPath("/")来获取当前应用在server上的物理地址.


假设在类中取不到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的物理路径 


依据另外一种的思路,我们还能够再扩展一下。只是对于在部署在一台server中的应用来说,已经足够了。
posted @ 2017-06-06 13:48  jzdwajue  阅读(94)  评论(0编辑  收藏  举报