有时候,我们希望读取web应用中的一些资源文件,比如配置文件、图片等等。为此,在ServletContext接口中提供了一些读取web资源的方法,这些方法是依靠Servlet容器来实现的。Servlet容器根据资源文件相对于web应用的路径,返回关联资源文件的IO流、资源文件在文件系统的绝对路径等。下面我们来一一了解这些方法,具体如下:
天富娱乐注册最新网址
假如现在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 {
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应用的根目录,也可以不以“/“开始,但是建议大家一斜线开始,这样比较规范一些。
天富娱乐登录体育真人
ServletContext不仅可以获取资源的真实路径,还可以获取资源流,即将资源以输入流的方式获取,下面通过一个案例来详细了解该方法的使用,具体如下:
(1)修改PathServlet,在该类的doGet()方法中添加如下代码,如例1-3所示:
例1-3 StreamServlet.java
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)))创建一个输入流。
天富娱乐注册最新网址
使用ServletContext可以获取指定目录下的所有资源路径,例如获取WEB-INF目录下的所有资源路径:
(1)修改PathServlet,在该类的doGet()方法中添加如下代码,如例1-4所示:
例1-5 getResourcePaths()方法使用
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目录下的资源路径。而且,该方法的参数一定要以”/”开头,否则会报错。
本文版权归传智播客英亚国际体育app官网下载学院所有,欢迎转载,转载请注明作者出处。谢谢! 作者:传智播客英亚国际体育app官网下载学院 首发:http://tianfu2024.sbs/javaee