在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的物理路径