Servlet中获取类路径下资源

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在同包下,所以可以采用相对路径。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值