ServletContext简介
一个项目只有一个ServletContext对象
可以在多个Servlet中来获取这个唯一的对象,使用它可以给多个Servlet传递数据
该对象一直存在,在Tomcat启动时就创建,在Tomcat关闭时才会消失
ServletContext对象的作用是在整个web应用的动态资源之间共享数据
获取ServletContext
ServletContext在ServletConfig中
在GenericServlet中可以直接使用getServletContext()获取
获取getServletContext有多种方式:
ServletConfig中有getServletContext()
GenericServlet中有getServletContext()
HttpSession中有getServletContext()
ServletContextEvent中有getServletContext()
域对象的功能
ServletContext是javaweb四大域对象之一:
pageContext
ServletContext
HttpSession
ServletContext
所有的域对象都有存取数据功能,域对象内部有一个Map,ServletContext用来存取数据的方法:
void setAttribute(String name,Object value):用来存储一个对象,也称之为一个域属性,如果多次使用该方法,并且name相同,则会覆盖
object getAttribute(String name):用来获取ServletContext中的数据,例如String value = (String)servletContext.getAtrribute("name");
void removeAttribute(String name):用来移除ServletContext中的域属性,name不存在,则无任何操作
Enumeration getAttributeNames():获取所有域属性名称
获取应用的初始化参数
Servlet也可以获取初始化参数,但它是局部的参数,也就是说,一个Servlet只能获取自己的初始化参数,不能获取别人的,即该Servlet自己的初始化参数在<servlet>标签下使用<init-param>、<param-name>、<param-value>设置
可以配置公共的初始化参数,为所有Servlet用,这需要使用ServletContext才能使用
配置好参数后调用代码
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//得到ServletContext
ServletContext context = getServletContext();
//调用getInitParameter(String)得到初始化参数
String s = context.getInitParameter("context1");
System.out.println(s);
}
获取资源相关方法
1、获取真实资源路径
使用getRealPath(“文件名”)获取路径
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//获取资源真实路径
String path = this.getServletContext().getRealPath("/index.jsp");
System.out.println(path);
}
2、获取资源流
通过ServletContext获取资源流,即把资源以输入流的方式获取:
InputStream getResourceAsStream(“文件名”)
获取a.txt资源流:InputStream in = servletContext.getResourceAsStream("a.txt");
文件在根目录下
3、获取指定目录下的所有资源路径
使用Set getResourcePaths(“文件夹名”)方法
Set set = context.getResourcePaths(“WEB-INF”);
本方法必须以“/”开头