全国咨询/投诉热线:400-618-4000

Java培训之ServletContext读取web应用中的资源文件

更新时间:2016年07月25日18时01分 来源:传智播客Java培训学院 浏览次数:

有时候,我们希望读取web应用中的一些资源文件,比如配置文件、图片等等。为此,在ServletContext接口中提供了一些读取web资源的方法,这些方法是依靠Servlet容器来实现的。Servlet容器根据资源文件相对于web应用的路径,返回关联资源文件的IO流、资源文件在文件系统的绝对路径等。下面我们来一一了解这些方法,具体如下:

1.获取真实路径

假如现在web应用下有一个test.txt文件,想要在Servlet中获取这个资源文件,就可以使用ServletContext的相关方法来获取。下面我们通过一个案例来了解这个方法该如何使用,详情请参考ServletContext获取资源方法案例详解,点击此处 下载源代码,如下所示:
(1)创建web应用,Example15,该应用下新建一个Servlet类,PathServlet,主要代码如例1-1所示:
例1-1 PathServlet.java
public class PathServlet extends HttpServlet {
    public void doGet(HttpServletRequest request, HttpServletResponse response)
           throws ServletException, IOException {
//”/”表示web应用的根路径
      System.out.println("ServletContext get real path:");
        ServletContext servletContext=this.getServletContext();
        String path=servletContext.getRealPath("/");
        System.out.println(path);
        String indexPath=servletContext.getRealPath("/index.jsp");
        System.out.println(indexPath);
    }
}
(2)PathServlet在web.xml文件中配置的访问路径是:“/PathServlet”。
(3)将web应用Example15发布到Tomcat服务器,然后启动Tomcat服务器,在浏览器地址栏上输入:http://localhost:8080/Example15/PathServlet,控制台打印结果,如图1-1所示:

图1-1 控制台打印结果
由图1-1可知,ServletContext接口的getRealPath(String path)方法返回的是资源文件在服务器文件系统上的真实路径。参数path代表资源文件的虚拟路径,它应该以正斜线(/)开始,“/“表示当前web应用的根目录,也可以不以“/“开始,但是建议大家一斜线开始,这样比较规范一些。

2.获取资源流

ServletContext不仅可以获取资源的真实路径,还可以获取资源流,即将资源以输入流的方式获取,下面通过一个案例来详细了解该方法的使用,具体如下:
(1)修改PathServlet,在该类的doGet()方法中添加如下代码,如例1-3所示:
例1-3 StreamServlet.java
  //使用ServletContext获取资源流
        System.out.println("ServletContext get inputstream:");
        InputStream input=servletContext.getResourceAsStream("/index.jsp");
        System.out.println(input);
(2)重新启动Tomcat服务器,在浏览器地址栏上输入:http://localhost:8080/Example15/StreamServlet,控制台显示结果如图1-2所示:

图1-2 控制台打印结果
由图1-2可知,ServletContext接口的getResouceAsStream(String path)方法可以获取path指定资源的流,path路径可以不以“/”开头,类似于getRealPath(String path)方法。其实这个方法也可以理解为,先获得资源的真实路径,再使用InputStream input=new FileInputStream(new File(servletContext.getRealPath(path)))创建一个输入流。

3.获取指定目录下的所有资源路径

使用ServletContext可以获取指定目录下的所有资源路径,例如获取WEB-INF目录下的所有资源路径:
(1)修改PathServlet,在该类的doGet()方法中添加如下代码,如例1-4所示:
例1-5 getResourcePaths()方法使用
//使用ServletContext获取指定目录下所有资源路径
        System.out.println("ServletContext get all path:");
        Set<String> paths=servletContext.getResourcePaths("WEB-INF");
        System.out.println(paths);
 (2)重新启动Tomcat服务器,在浏览器地址栏再次访问http://localhost:8080/Example15/PathServlet,控制台打印结果如图1-3所示:

图1-3 控制台打印结果
由图1-3可知,通过ServletContext接口的getResourcePaths(String path)方法,将WEB-INF目录下的所有资源路径都获取到了,该方法的返回值是一个Set集合,需要注意的是WEB-INF目录下的lib和classes都是目录,但是通过getResourcePaths()方法不会进一步会获得lib和classes目录下的资源路径。而且,该方法的参数一定要以”/”开头,否则会报错。

本文版权归传智播客Java培训学院所有,欢迎转载,转载请注明作者出处。谢谢!
作者:传智播客Java培训学院
首发:http://www.itcast.cn/javaee

javaee

python

web

ui

cloud

test

c

netmarket

pm

Linux

movies

robot

uids

北京校区

    14天免费试学

    基础班入门课程限时免费

    申请试学名额

    15天免费试学

    基础班入门课程限时免费

    申请试学名额

    15天免费试学

    基础班入门课程限时免费

    申请试学名额

    15天免费试学

    基础班入门课程限时免费

    申请试学名额

    20天免费试学

    基础班入门课程限时免费

    申请试学名额

    8天免费试学

    基础班入门课程限时免费

    申请试学名额

    20天免费试学

    基础班入门课程限时免费

    申请试学名额

    5天免费试学

    基础班入门课程限时免费

    申请试学名额

    0天免费试学

    基础班入门课程限时免费

    申请试学名额

    12天免费试学

    基础班入门课程限时免费

    申请试学名额

    5天免费试学

    基础班入门课程限时免费

    申请试学名额

    5天免费试学

    基础班入门课程限时免费

    申请试学名额

    10天免费试学

    基础班入门课程限时免费

    申请试学名额