Board logo

标题: Java或web中解决所有路径问题 [打印本页]

作者: qingqing3721    时间: 2011-5-9 07:39     标题: Java或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/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路径。
  如:file:/D:/eclipse/springTest/WebRoot/WEB-INF/classes/
  ?? 取得效劳器相对路径
  System. getProperty("user. dir")
  例如:E:\apache-tomcat-5. 5. 16\apache-tomcat-5. 5. 16\bin
  我推荐运用Thread. currentThread(). getContextClassLoader(). getResource("")来得到以后的classpath的绝对路径的URI表示法
  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"));文章由 italywa.tk 静脉曲张袜效果怎么样 整理,收集辛苦,希望能保留出处。




欢迎光临 编程开发论坛 (http://bbs.lihuasoft.net/) Powered by Discuz! 6.0.0