Java或Web中解决所有路径问题
2011-01-19 13:57 | 1327次阅读 | 【已有2条评论】发表评论
来源:CN-JAVA | 收藏到我的网摘
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/
5. 取得服务器相对路径
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"));
分享到:
相关推荐
此外,本书的配套光盘还免费提供了价值人民币330元的java教学视频,对java语言进行了全面讲解,帮助一些不会java语言的读者快速地从java基础知识的学习中过渡到java web的学习与开发上. 第1部分 xml篇. 第1章 xml...
此外,本书的配套光盘还免费提供了价值人民币330元的java教学视频,对java语言进行了全面讲解,帮助一些不会java语言的读者快速地从java基础知识的学习中过渡到java web的学习与开发上. 第1部分 xml篇. 第1章 xml...
此外,本书的配套光盘还免费提供了价值人民币330元的java教学视频,对java语言进行了全面讲解,帮助一些不会java语言的读者快速地从java基础知识的学习中过渡到java web的学习与开发上. 第1部分 xml篇. 第1章 xml...
此外,本书的配套光盘还免费提供了价值人民币330元的java教学视频,对java语言进行了全面讲解,帮助一些不会java语言的读者快速地从java基础知识的学习中过渡到java web的学习与开发上. 第1部分 xml篇. 第1章 xml...
`[转载]java web开发中的listener和filter`文件可能会介绍`Listener`,它们是另一种类型的Web组件,监听特定的事件,如会话创建或销毁,然后执行相应的操作。 `javax_servlet_Filter`的使用教程可能深入讨论了`...
`core-renderer.jar`库支持大部分HTML和CSS特性,但不支持所有现代Web标准。因此,在处理复杂的HTML时,你可能需要预处理HTML,确保其兼容性。 此外,`iText`库也有许多高级功能,如页面设置、字体管理、表格、列表...
在Java编程环境中,实现文件下载是一项常见的任务,尤其在Web应用程序开发中。下面将详细讲解如何使用Java来实现文件的下载功能。 首先,我们需要理解文件下载的基本原理。当用户通过浏览器点击一个链接时,服务器...
可以通过替换WebSphere自带的AspectJ版本来解决问题。具体操作如下: 1. **备份原有文件**:在进行任何修改之前,请先备份原始的aspectjrt.jar文件,以防万一。 2. **复制新版本文件**:将最新版本的aspectjrt.jar...
本文将根据一位资深Java程序员的经验分享,为初学者提供一条清晰的学习路径,帮助大家在Java之旅中少走弯路,加速成长。 #### Java的三大领域:J2SE、J2ME与J2EE Java自问世以来,其应用范围广泛,涵盖桌面应用、...
【Java J2EE成长之路】是一份综合性的学习资料,涵盖了从Java基础知识到J2EE高级编程的广泛主题。这份资料对于那些希望深入理解Java企业级应用开发...这份资料的分享无疑为Java开发者提供了一条丰富而实用的成长路径。
Servlet和Struts2是两种在Java Web开发中广泛使用的框架,它们在构建动态、交互式的Web应用程序方面扮演着重要角色。Servlet是Java EE规范的一部分,它提供了一种服务器端编程模型,用于处理HTTP请求和响应。而...
开发者在构建和运行项目时,会将这些库加入到类路径中,以确保正确执行所有依赖的类和方法。 这个项目结合了这三个框架,展示了如何在portlet环境中集成现代Java技术,实现业务逻辑、控制流程和数据访问的协调工作...
Apache 开源组织为了解决这一问题,开发了名为 Geronimo 的 J2EE 服务器,它可以作为替代品提供类似 WebLogic 或 JBoss 的功能。不过,在本章的示例中,我们将聚焦于在 WebLogic 上进行安装和配置。 安装 WebLogic ...
- Web服务:在Web服务开发中,Castor可以作为数据交换的工具,方便地将Java对象转换为XML消息。 5. 开发工具支持 `.classpath`和`.project`文件是Eclipse项目配置文件,它们包含了项目依赖和构建路径信息。使用...
通过阅读提供的"ant教程详解--javac,java,jar,war,delete,copy,mkdir...(转载).doc"文档和"ant.pdf",你可以深入理解这些任务的使用方法和实际应用场景,从而更好地将Ant应用于你的Java项目中。
6. **Permissions**: 在Java Applet或Web Start应用中,这个属性可以指定安全策略。 7. **Extension-List**: 如果JAR文件是扩展的一部分,此属性列出依赖的扩展。 8. **Build-Number** 和 **Built-By**: 通常用于...
为了实现这一点,开发者可能采用了跨平台的编程语言,如Java或JavaScript,并可能利用了Web技术,使得软件能够在不同的操作系统上运行。 在运行方面,程序说明提到“本程序放在任意目录下,都可以运行”。这表明该...
4. 结对编程:两名开发者一起工作,一人编写代码,另一人编写测试,可以及时发现和解决问题。 5. 持续集成:频繁将代码合并到主分支,并自动运行测试,确保改动不会引入新的问题。 总结来说,软件测试的基本方法...
- **Context配置**:定义了一个特定的Web应用程序,包括其根路径、文档基础和类加载器设置。 - **Connector配置**:定义了Tomcat如何监听和响应网络请求,包括端口、协议和线程池配置。 - **Realm配置**:用于用户...