Java或Web中怎样解决路径问题

 我来答
手机用户80519
2013-11-29 · 超过58用户采纳过TA的回答
知道答主
回答量:128
采纳率:0%
帮助的人:146万
展开全部
归根结底,Java本质上只能使用绝对路径来寻找资源。所有的相对路径寻找资源的方法,都不过是一些便利方法。不过是API在底层帮助我们构建了绝对路径,从而找到资源的! 在开发Web方面的应用时, 经常需要获取 服务器中当前WebRoot的物理路径。 如果是Servlet , Action , Controller, 或则Filter , Listener , 拦截器等相关类时, 我们只需要获得ServletContext, 然后通过ServletContext.getRealPath("/")来获取当前应用在服务器上的物理地址。 如果在类中取不到ServletContext时, 有两种方式可以做到: 1. 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的物理路径。 2. 利用Java的类加载机制 调用 XXX.class.getClassLoader().getResource(""); 方法来获取到ClassPath , 然后处理获得WebRoot目录,这种方式只能是该class在WebRoot/WEB-INF/classes下才能生效, 如果该class被打包到一个jar文件中, 则该方法失效。这时就应该用下面一种方式。 根据第二种的思路,我们还可以再扩展一下。不过对于在部署在一台服务器中的应用来说,若还不是你所需请再往下看。 下面是一些得到classpath和当前类的绝对路径的一些方法。你可使用其中的一些方法来得到你需要的资源的绝对路径: 1. DebitNoteAction.class.getResource("") 得到的是当前类FileTest.class文件的URI目录。不包括自己! 如:file:/D:/eclipse/springTest/WebRoot/WEB-INF/classes/ atacarnet/src/com/evi/modules/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路径。
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式