javaweb开发的路径问题

 

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"));

时间: 2024-09-26 09:54:15

javaweb开发的路径问题的相关文章

JavaWeb开发使用Cookie创建-获取-持久化、自动登录、购物记录、作用路径_java

1.cookie是啥?随手百度了网友的说说 简单的说,Cookie就是服务器暂存放在你计算机上的一笔资料,好让服务器用来辨认你的计算机.当你在浏览网站的时候,Web服务器会先送一小小资料放在你的计算机上,当下次你再光临同一个网站,Web服务器会先看看有没有它上次留下的Cookie资料,有的话,就会依据Cookie里的内容来判断使用者,送出特定的网页内容给你. 2.cookie在哪里? 3.cookie可以删除吗? 4.cookie实现原理 第一次请求浏览器,在浏览器的cookie存储区,没有co

Javaweb开发环境Myeclipse6.5 JDK1.6 Tomcat6.0 SVN1.8配置教程_java

Javaweb开发环境的配置也是比较繁琐的一件事情,虽然理论上使用记事本,完全可以写出一个Javaweb工程, 但是在团队大型开发的Javaweb过程中,你必须配置好Eclipse.SVN.Tomcat与JDK1.6,当然还有Mysql数据库,不过数据库配置的事情属于后台内容,本文仅讨论前台开发环境的配置. 之所以选择Myeclipse6.5是因为其他高版本的Myeclipse实在是太卡,编辑小型程序还好,编辑大型程序完全吃不消,Eclipse的功能毕竟简陋,所以还是选择了旧版本.经典版本Mye

JavaWeb开发入门第二篇Tomcat服务器配置讲解_java

一.Tomcat服务器端口的配置 Tomcat的所有配置都放在conf文件夹之中,里面的server.xml文件是配置的核心文件. 如果想修改Tomcat服务器的启动端口,则可以在server.xml配置文件中的Connector节点进行的端口修改 例如:将Tomcat服务器的启动端口由默认的8080改成8081端口 Tomcat服务器启动端口默认配置 <Connector port="8080" protocol="HTTP/1.1" connectionT

java web-海康视频javaweb开发调用NetVideoActiveX23.cab预览返回41资源分配错误

问题描述 海康视频javaweb开发调用NetVideoActiveX23.cab预览返回41资源分配错误 如题!海康视频javaweb开发调用NetVideoActiveX23.cab预览返回41资源分配错误,跪求各路大神帮忙.....急!!! 解决方案 http://bbs.csdn.net/topics/390879798

java web-求问有关于javaweb开发初始流程的小问题

问题描述 求问有关于javaweb开发初始流程的小问题 被老板吊了,要我几天内完成对接口文档,以及接口面向数据库的操作,可能就是后台的一些维护小工作,能做到对数据简单的增删改查.本人真的新人,刚来几天,语言基础是0.求大神简单的跟我分析分析流程吧.框架是springmvc,mybaties,ajax+jsp.我现在一头雾水也不知道他到底想让我干嘛,就一直跟我说接口接口.我现在还不明白在databus文档里是直接操作xml文档呢,还是直接去修改数据库.这个增删改要怎么搞. 解决方案 没怎么看懂你想

javaweb开发中如何实现将数据库表中的某一状态自动置为Y或N

问题描述 javaweb开发中如何实现将数据库表中的某一状态自动置为Y或N 现在我做的毕业设计有这样一个需求:学生缴学费有一个缴费时间和到期时间,到期时间就是有效期.比如说我交学费,有效期是一年,交了学费后,交费状态就是Y,怎样实现一年有效期结束之后自动将学生表中学生的交费状态置为N?javaweb开发用的框架是SSM和easyui. 诚心请教各位大牛们!感激不尽~~~ 解决方案 有三个 字段 缴费时间.到期时间.缴费状态,默认情况下 缴费状态就是N(未缴费)缴费后状态在程序中修改成Y(已缴费)

javaweb开发工具有哪些?j2ee中那些技术规范较为主流?

问题描述 javaweb开发工具有哪些?j2ee中那些技术规范较为主流? 目前已下载jdk,tomcat,Dreamweaver,myeclipse.技术规范打算先学servlet,jsp. 解决方案 Eclipse IDE for Java EE Developers 254 MB.在eclipse官方下载http://download.eclipse.org/或者myeclipse.冉要Licence破解,相对好用一点.如果开发的话,还要安装以下插件:1.maven插件2.svn插件3.gi

request-我是做javaWEB开发的,请问一下页面的跳转问题

问题描述 我是做javaWEB开发的,请问一下页面的跳转问题 当我进入一个网站,在a.jsp页面,点击登录按钮跳转到login.jsp,填写账号密码之后又返回了a.jsp页面,那我怎么就返回a.jsp的呢,是传参的吗,还是什么?如:当我在b.jsp页面点击登录,同样填写账号密码之后又是怎样返回b.jsp的呢 解决方案 你点确定按钮的时候,指向那个页面?应该有个跳转成功和跳转失败页面吧. 解决方案二: 看你用的是Struts还是Servlet咯,如果是Struts的话,在Struts.xml配置文

javaweb 打印-在浏览器客户端打印服务器数据库了的数据(java-web开发)

问题描述 在浏览器客户端打印服务器数据库了的数据(java-web开发) 诸位,小弟现在做一个java-web项目,项目要求做一个"在浏览器客户端打印服务器数据库数据"的功能.我试过PageOffice,但是不尽人意.现在在网上搜了一些说法,说是在服务器用第三方软件生成数据报表,然后转成pdf,然后在客户端打印这个pdf.敢问各路大神,这个思路可行吗?如果可行,请问,这里面的每一步应该怎么做呢?如果不行,又有其他什么你的高招呢?希望大家可以给小弟解答,万分感激.