Servlet中获取类路径下资源
类路径对一个javaweb应用而言,就是WEB-INF/classes下和WEB-INF/lib目录下的所有jar文件。
将一个javaweb项目发布到Tomcat服务器中,src目录不再存在,src下的资源都会出现在WEB-INF目录下的classes目录中。现在我们要获取这个目录下的资源,有两种方式:
(1) 使用ClassLoader对象获取;
(2) 使用Class对象获取;
这两个类中都有获取类路径的方法,下面我们来分别讲解这两种方法,具体如下:
(1)使用ClassLoader对象获取类路径下资源
首先,要获取类路径下的资源,要先获取ClassLoader对象。ClassLoader对象可以通过Class对象来获取。
1) 在应用的src目录下,新建一个test.txt文件;
2) 新建一个Servlet类,来获取test.txt文件
public class ClassPathServlet extendsHttpServlet {
publicvoid doGet(HttpServletRequest request, HttpServletResponse response)
throwsServletException, IOException {
//1.获的ClassLoader对象
ClassLoaderclassLoader=this.getClass().getClassLoader();
//2.调用ClassLoader对象的getResourcAsStream()方法
InputStream input=classLoader.getResourceAsStream("test.txt");
//读取输入流内容,转换成字符串返回
String value=IOUtils.toString(input);
System.out.println(value);
}
}
通过ClassLoader的getResourceAsStream(Stringpath)方法,获得了指定路径的对应输入流,现在想要在控制台将该流打印成字符串,需要使用工具包:commons-io-1.4.jar(该jar包源代码中已存在)。然后使用该jar包中的帮助类IOUtils,将输入流转换成字符串并返回。
注意:在上面的讲解中,我们获取test.txt文件的输入流使用的是该文件的相对路径,即classLoader.getResourceAsStream(“test.txt”);它相对的是classes的根路径。
(2)使用Class对象获取类路径下资源
Class类中也有一个方法是可以获取类路径下资源。示例如下:
1) 在应用的src目录下,新建一个test.txt文件;
2)新建一个Servlet类,来获取test.txt文件
public class ClassServlet extends HttpServlet{
publicvoid doGet(HttpServletRequest request, HttpServletResponse response)
throwsServletException, IOException {
Class clazz=this.getClass();
InputStreaminput=clazz.getResourceAsStream("/test.txt");
String value=IOUtils.toString(input);
System.out.println(value);
}
}
注意:(1)Class对象的getResourceAsStream(String path)方法中,如果path参数不是以”/”开头,即表示采用的是相对路径,相对当前类所在的类路径,这里相对的是ClassServlet所在的类路径。
(2)如果path参数是以“/”开头,则表示是在classes根路径下查找text.txt文件。
(3)如果test.txt文件处于src目录下的cn.itcast.web.servlet包下,那么在ClassServlet类中使用Class类来获取test.txt文件的输入流,可以采用如下方式:
InputStream input=clazz.getResourceAsStream(“/cn/itcast/web/servlet/test.txt”);
或:InputStreaminput=clazz.getResourceAsStream(“test.txt”);
因为test.txt与ClassServlet在同包下,所以可以采用相对路径。