1. 在jsp文件或Servlet中,可以通过getServletContext().getRealPath("/")来获取项目根目录的绝对路径。
1 <body> 2 <h1>jsp文件中获得项目根目录绝对路径</h1> 3 <% 4 String realPath=getServletContext().getRealPath("/");//项目绝对路径 5 %> 6 项目根目录的绝对路径为:<%=realPath %> 7 </body> 8 </html>
访问结果:
项目根目录的绝对路径为:D:\Program Files\Java\tomcat6.0.1\webapps\tests\
在Servlet中可以使用同样的方法,得到同样的结果,毕竟jsp文件中的内容在本质上跟Servlet是一回事。getServletContext().getRealPath("/")很好用,但仅仅适用于jsp文件和Servlet中,因为这是一个Servlet API。
2. Java桌面程序中,可以通过(new File("")).getAbsolutePath()获取项目根目录(非Tomcat下)。
1 package chloe.aboutpath; 2 3 import java.io.File; 4 public class PathTest 5 { 6 static String abspath; 7 static public String getPath() 8 { 9 10 File file=new File(""); 11 abspath=file.getAbsolutePath(); 12 return abspath; 13 } 14 public static void main(String args[])throws Exception 15 { 16 System.out.println(getPath()); 17 } 18 }
运行结果为:
D:\CHLOE\IT\java\eclipse_workspace\tests
3. 在Tomcat下运行的类中,(new File("")).getAbsolutePath()获得的路径是Tomcat安装路径下的bin文件夹下,将获得的路径字符串去掉最后的"bin"再添上"webapps\\项目文件夹名"即可。
经过测试代码的运行,我发现只要是在Tomcat环境中运行的代码,如Jsp、Servlet、Servlet调用的Java类、Servlet调用的Java类所调用的Java类等等,由(new File("")).getAbsolutePath()获得路径均为Tomcat根目录下的bin文件夹下,测试代码与PathTest.java中的基本一样,这里不再赘述。
总结:
在大多数情况下,我们都是用Java开发Web程序。根据我个人习惯,如果在jsp文件或者Servlet中需要用到项目的根目录,则采用getServletContext().getRealPath("/"),因为这个最方便,不需要进一步处理,如果在Servlet调用的其他普通类中需要获得项目根目录,则使用(new File("")).getAbsolutePath(),再稍作处理。另外,jsp文件中资源的相对路径在没有特别声明的情况下是相对于本文件所在的位置,可以通过在路径字符串的前端加上".."进入上一级文件夹后继续定位,如"../ckeditor/ckeditor.js";默认情况下,指定form的action为某Servlet时,应该使用"/servlet/Servletname",因为默认生成Servlet时,在web.xml的servlet-mapping项中均是这种形式。