天天看点

Javaweb项目中的路径问题

最近在完成一个作业的时候,需要读取一个在javaWeb的项目中的XML文件。老是弄不好,便去网上找了方法,有用!一开始也没深究,完成了作业后,有精力深究了一下。如今写出来,供大家参考。

Javaweb项目中的路径问题

我的项目目录如图所示,我使用的是Tomcat 8.0作为服务器,servlet 3.0

首先考虑在普通java类当中获取UserList.xml的路径,首先要了解两个基本知识:

System.out.println(new File("/").getAbsolutePath());//E:\
System.out.println(new File(".").getAbsolutePath());//E:\javaee项目\ContactListB\.
           

“/”代表了当前项目路径的根目录,就好比上面代码所示,我的workspace是在E:\javaee项目,所以在普通java类当中就定位在根目录所在位置---E:/.

"."代表了当前项目位置,相对于java命令运行目录。这不难得到,就是E:\javaee项目\ContactListB\.。也就是说打印“.”的绝对路径,得到的就是java命令运行目录!我们可以做个实验

Javaweb项目中的路径问题

这是我们的实验目录,我们可以看到有个名为“00.txt”的文件在extractWord的目录下,我们在Eclipse中可以通过“./00.txt”或者“00.txt”进行访问(最好加上“.”),那么如果我们进入命令行会怎样呢?

Javaweb项目中的路径问题

我们可以看到,访问不到路径。这是因为,在命令行下,java默认命令运行目录(因为该目录下面存放了我们编译好的.class文件)为:

E:\javaee项目\extractWord\bin
           

而不是先前我们在eclipse下面所看到的 E:\javaee项目\ContactListB\ . 

现在我们设定classpath,将classpath设定为E:\javaee项目\extractWord\bin后,再去运行

Javaweb项目中的路径问题

如图所示我们又可以得到在Eclipse下面得到的路径了,这就是java 命令运行目录。而我们可以得出Eclipse帮助我们set classpath了,所以我们才会在cmd上得到的结果与Eclipse上不一样。这就是-java命令目录的意思。

接下来我们回到最初的问题,如果在普通java类当中,获得想要的文件路径呢?知道“.”的意思之后,再加上想对应的路径,就可以轻松获取文件了。

那么,如何在Servlet当中,获取javaweb项目当中的文件路径呢?众所周知,Servlet的程序是放入服务器中运行的,而

给服务器使用的:   / 表示在当前web应用的根目录(webRoot下),意思就是如果想要进去WebRoot目录,就是”/WebRoot”就行了
           
给浏览器使用的: /  表示在webapps的根目录下
           

而在servlet 3.0使用注释代替了web.xml,使得不用写xml文件就可以运行servlet,所以我们不用将javaWeb项目拷贝纸TomCat的Webapps下面,也可以直接运行,(可以放,也可以不放)

System.out.println(new File(".").getAbsolutePath());
System.out.println(new File("/").getAbsolutePath());
System.out.println(this.getServletContext().getRealPath(""));
           

在servlet上面运行如上代码,得到如下结果:

D:\Eclipse\eclipse-jee-neon-R-win32-x86_64\eclipse\.
D:\
E:\javaee项目\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps\MyFirstJaveProject\
           

如果我们使用“ .”或者"/",得到的都是eclipse软件路径和eclipse软件所在的根目录。

可以看到第三个方法this.getServletContext().getRealPath(""),

这个方法就是得到ServletContext的路径,而ServletContext是对于一个项目的全文,是一个唯一路径。可以看出如果我们不将JavaWeb项目拷贝到TomCat服务器下面,Eclipse会自动在Workspace下面相应的文件下创建一个名为wtpwebapps的文件夹,这个文件夹的作用就相当于TomCat服务器下面的webapps,所以我们就找到了相对应的文件路径

对于在src下面的资源文件,在wtpwebapps(webapps)下面的classes文件夹里面
对于在其他文件下面的资源文件,根据标准的WEB项目文件去找即可
           

<hr>

类文件路径的获取:

System.out.println("类文件路径:"+testPath.class.getResource("/"));
System.out.println("类文件路径:"+testPath.class.getResource("."));
           

结果如图所示:

Javaweb项目中的路径问题

使用“/”获取到的路径是的最末端是bin目录