java web 中java获取项目src路径径和webroot路径问题

关于java和web工程项目中各种路径的获取总结_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
关于java和web工程项目中各种路径的获取总结
阅读已结束,下载文档到电脑
想免费下载本文?
定制HR最喜欢的简历
下载文档到电脑,方便使用
还剩4页未读,继续阅读
定制HR最喜欢的简历
你可能喜欢2435人阅读
Tomcat6.0(8)
Servlet(6)
JavaSe(34)
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(&
&) + 1)) + &doc/db.properties&)));
System.out.println(p.getProperty(&driverName&));
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:538094次
积分:5636
积分:5636
排名:第4635名
原创:110篇
转载:10篇
评论:74条
(2)(1)(1)(1)(2)(2)(1)(2)(1)(1)(2)(3)(2)(4)(5)(15)(2)(6)(4)(4)(7)(8)(4)(3)(31)(4)(1)(1)博客访问: 511662
博文数量: 144
博客积分: 7010
博客等级: 少将
技术积分: 1435
注册时间:
IT168企业级官微
微信号:IT168qiye
系统架构师大会
微信号:SACC2013
分类: 系统运维
&&&& 在进行Java EE Web开发时,我们可以选用很多的框架,相信很多同胞们在使用这些框架时都有过被文件路径问题困绕过。我在此所说的相对路径和绝对路径都是针对Web项目的,而不是相对于某个操作系统。&&&& Java EE里的Web项目有个相对独立的最高目录WebRoot,我们估且认为它是根目录/。Web项目成品中的其它目录都是相对与此目录的子目录。在开发时,我们可能会用到一些框架,比如struts,spring等。使用这些框架,我们需要配制相应的xml文件,至少也会配制web.xml文件。使用Struts时,在struts-conf.xml中映射Action是最常见的配制,所有的映射,都以“/”开头,那么这里的“/”指的是那个目录呢?我想此时你也猜到了,那就是对就用不可见相对独立的WebRoot,应用中“/action”就相当于是系统目录中的”WebRoot/action",知道这一点,就不会在为Action映射老是不可用发愁了。在某个文件夹下的Action动作,映射时只要用”/“来代替”WebRoot“即可,比如我们对”WebRoot/admin/manager/login.do"在Struts-config.xml中作映射,可在相应Action的path中设置"path=/admin/manager/login"即完成的映射。在其它.xml文件中,映射都是这样做的。&&&& 前面提到对应用不可见的“WebRoot",因为每个项目都有WebRoot,那就不好在用它来表示项目的最高目录,此时的解决方案就是用项目名来代替应用的"WebRoot",这就是我们在实际应用中看到”myNews/admin/manager/login.jsp",而不是“WebRoot/admin/manager/login.jsp"。以上这两段文字主要说了”绝对路径“的问题,相信明白了这点,相对路径也就用不了多说,不过相对路径一般不要用在映射文件中,这样容易出错。不过在jsp页面中,本人认为在能用相当路径的情况下尽量使用相对路径,因为有些时候如果使用绝对路径,如果不能区分是配制文件还是实际应用,往往是很容易出错的,常常会在实际应用中用到配制文件中”/“错误的代替了”项目名”,要命的是这个时候很可能转到一个空白页面,并且不报任何错误。这也是推荐使用相对路径的原因所在。&&&&& 不过,我发现并不是必须用“绝对路径”的方式来做映射,但也不是“相对路径”,如果映射目录结构层次在两层内(如WebRoot/admin/login.do")可在配制文件中直接用“path=/login”来映射,这样做可能需要在指定“input”属性。不过,按绝对路径的方式来映射,无论层次多深,都是不会出问题的,前提是其它地方都正确无误。&&&&&
阅读(7168) | 评论(0) | 转发(0) |
相关热门文章
给主人留下些什么吧!~~
请登录后评论。获取web服务器下的文件路径
- learnmore的实验田 - ITeye博客
博客分类:
获取web服务器项目的真实物理路径
request.getSession().getServletContext().getRealPath("/");
一 相对路径的获得
   说明:相对路径(即不写明时候到底相对谁)均可通过以下方式获得(不论是一般的java项目还是web项目)
  
&&&&&& String relativelyPath=System.getProperty("user.dir");
   上述相对路径中,java项目中的文件是相对于项目的根目录
   web项目中的文件路径视不同的web服务器不同而不同(tomcat是相对于 tomcat安装目录\bin)
  二 类加载目录的获得(即当运行时某一类时获得其装载目录)
   1.1)通用的方法一(不论是一般的java项目还是web项目,先定位到能看到包路径的第一级目录)
  
   InputStream is=TestAction.class.getClassLoader().getResourceAsStream("test.txt");
   (test.txt文件的路径为 项目名\src\test.类TestAction所在包的第一级目录位于src目录下)
  
   上式中将TestAction,test.txt替换成对应成相应的类名和文件名字即可
   1.2)通用方法二 (此方法和1.1中的方法类似,不同的是此方法必须以'/'开头)
   InputStream is=Test1.class.getResourceAsStream("/test.txt");
   (test.txt文件的路径为 项目名\src\test.txt,类Test1所在包的第一级目录位于src目录下)
  
  三 web项目根目录的获得(发布之后)
   1 从servlet出发
   可建立一个servlet在其的init方法中写入如下语句
   ServletContext s1=this.getServletContext();
   String temp=s1.getRealPath("/"); (关键)
   结果形如:D:\工具\Tomcat-6.0\webapps\002_ext\ (002_ext为项目名字)
   如果是调用了s1.getRealPath("")则输出D:\工具\Tomcat-6.0\webapps\002_ext(少了一个"\")
   2 从httpServletRequest出发
   String cp11111=request.getSession().getServletContext().getRealPath("/");
   结果形如:D:\工具\Tomcat-6.0\webapps\002_ext\
  四 classpath的获取(在Eclipse中为获得src或者classes目录的路径)
   方法一
&&&&&& Thread.currentThread().getContextClassLoader().getResource("").getPath();
&&&&&& eg:
   String t=Thread.currentThread().getContextClassLoader().getResource("").getPath();
   System.out.println("t---"+t);
   输出:t---/E:/order/002_ext/WebRoot/WEB-INF/classes/
  
   方法二
&&&&&& JdomParse.class.getClassLoader().getResource("").getPath() (JdomParse为src某一个包中的类,下同)
&&&&&& String p1=JdomParse.class.getClassLoader().getResource("").getPath();
   System.out.println("JdomParse.class.getClassLoader().getResource--"+p1);
   输出: JdomParse.class.getClassLoader().getResource--/E:/order/002_ext/WebRoot/WEB-INF/classes/
  另外,如果想把文件放在某一包中,则可以 通过以下方式获得到文件(先定位到该包的最后一级目录)
   eg String p2=JdomParse.class.getResource("").getPath();
   System.out.println("JdomParse.class.getResource---"+p2);
   输出: JdomParse.class.getResource---/E:/order/002_ext/WebRoot/WEB-INF/classes/jdom/ (JdomParse为src目录&&& 下&&& jdom包中的类)
在jsp和class文件中调用的相对路径不同。 在jsp里,根目录是WebRoot 在class文件中,根目录是WebRoot/WEB-INF/classes 当然你也可以用System.getProperty("user.dir")获取你工程的绝对路径。
另:在Jsp,Servlet,Java中详细获得路径的方法!
1.jsp中取得路径:
以工程名为TEST为例:
(1)得到包含工程名的当前页面全路径:request.getRequestURI()
结果:/TEST/test.jsp
(2)得到工程名:request.getContextPath()
结果:/TEST
(3)得到当前页面所在目录下全名称:request.getServletPath()
结果:如果页面在jsp目录下 /TEST/jsp/test.jsp
(4)得到页面所在服务器的全路径:application.getRealPath("页面.jsp")
结果:D:\resin\webapps\TEST\test.jsp
(5)得到页面所在服务器的绝对路径:absPath=new java.io.File(application.getRealPath(request.getRequestURI())).getParent();
结果:D:\resin\webapps\TEST
2.在类中取得路径:
(1)类的绝对路径:Class.class.getClass().getResource("/").getPath()
结果:/D:/TEST/WebRoot/WEB-INF/classes/pack/
(2)得到工程的路径:System.getProperty("user.dir")
结果:D:\TEST
3.在Servlet中取得路径:
(1)得到工程目录:request.getSession().getServletContext().getRealPath("") 参数可具体到包名。
结果:E:\Tomcat\webapps\TEST
(2)得到IE地址栏地址:request.getRequestURL()
结果:http://localhost:8080/TEST/test
(3)得到相对地址:request.getRequestURI()
结果:/TEST/test
注意事项:如果你使用WebSphere服务器,并且使用从类加载器获得路径的方法,肯定不是你想要的路径,如 Thread.currentThread().getContextClassLoader().getResource("").getPath();
这个方法得到的路径绝对不是你想要的项目的classpath,如果你是一个web工程,当然可以在servlet中通过request对象来获得项目的根路径,如request.getSession().getServletContext().getRealPath("/") ,但是如果你在一个普通类中,并且项目中使用到了spring框架的话,你可以在普通类中实现ServletContextAware接口,把ServletContext注入到类中,并且通过getRealPath("/");方法获得项目的根路径
浏览: 379737 次
来自: 上海
ireport分页的话代码写起来有些复杂,我以前试过,比较简单 ...
不复制粘贴能死?
nice,problem solved,thanks!
引用的jar包需要怎么加在命令里面?十多个呢,为什么配在MAN ...
看到你的问题,有帮助,我之前都是手动的clear项目下的cla ...java 读取src目录下的配置文件 -
- ITeye博客
目前的代码如下:
import java.io.F
import java.io.FileInputS
import java.io.FileNotFoundE
import java.io.IOE
import java.io.InputS
import java.io.UnsupportedEncodingE
import java.net.URLD
import java.util.I
import java.util.P
import java.util.S
import java.util.logging.L
import java.util.logging.L
public class Test {
public static void main(String args[]) {
Test test = new Test();
InputStream in = null;
Properties props = new Properties();
in = test.getClass().getResourceAsStream("/mypropertiestest.properties");
props.load(in);
} catch (IOException e) {
e.printStackTrace();
} finally {
if (in != null) {
in.close();
} catch (IOException ex) {
Logger.getLogger(Test.class.getName()).log(Level.SEVERE, null, ex);
Set set = props.keySet();
Iterator it = set.iterator();
System.out.println("Begin ...");
while (it.hasNext()) {
String key = (String) it.next();
System.out.println(key + "=" + props.getProperty(key));
System.out.println("End");
import java.io.F
import java.io.FileInputS
import java.io.FileNotFoundE
import java.io.IOE
import java.io.InputS
import java.io.UnsupportedEncodingE
import java.net.URLD
import java.util.I
import java.util.P
import java.util.S
import java.util.logging.L
import java.util.logging.L
* @author zcb
public class Test {
public static void main(String args[]) {
Test test = new Test();
InputStream in =
Properties props = new Properties();
//第一种方法,取得src下的属性文件,成功
in = test.getClass().getResourceAsStream("/mypropertiestest.properties");
//第二种方法,取得src下的属性文件,相对第一种少了个“/”,注意:error,不行,此时取得的路径是到classes文件夹
System.out.println("path:"+test.getClass().getResource("mypropertiestest.properties").getPath());
in = test.getClass().getResourceAsStream("mypropertiestest.properties");
//第三种种方法,通过绝对路径,取得src下的属性文件,成功,但对apusic服务器不大理想,属性文件要拷贝到项目外面
String filepath = test.getClass().getResource("/").getPath()
+ java.io.File.separator + "mypropertiestest.properties";
filepath = filepath.substring(1).replaceAll("%20", " ");//or filepath = filepath.replaceAll("%20", " ");
filepath = URLDecoder.decode(filepath, "UTF-8");
} catch (UnsupportedEncodingException ex) {
Logger.getLogger(Test.class.getName()).log(Level.SEVERE, null, ex);
in = new FileInputStream(new File(filepath));
} catch (FileNotFoundException ex) {
Logger.getLogger(Test.class.getName()).log(Level.SEVERE, null, ex);
props.load(in);
} catch (IOException e) {
e.printStackTrace();
} finally {
if (in != null) {
in.close();
} catch (IOException ex) {
Logger.getLogger(Test.class.getName()).log(Level.SEVERE, null, ex);
//输出属性文件中的信息
Set set = props.keySet();
Iterator it = set.iterator();
System.out.println("Begin ...");
while (it.hasNext()) {
String key = (String) it.next();
System.out.println(key + "=" + props.getProperty(key));
System.out.println("End");
在windows下测试通过,Linux没测试,需要进一步研究。
补充:使用ClassLoader.getSystemResourceAsStream("/mypropertiestest.properties")和Thread.currentThread().getContextClassLoader().getResourceAsStream("/mypropertiestest.properties")读取src下的属性文件,通过测试,在windows和Linux下的tomcat和apusic都能成功。
浏览 29727
regedit_123
浏览: 220740 次
来自: 杭州
引用[u][/u]
[flash=200,200][flash=200,200][ ...
星水冰云 写道 帮了我大忙了 我这都五年前的文章了,能够帮上真 ...}

我要回帖

更多关于 java获取项目src路径 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信