ServletContext简述
ServletContext简介
ServletContext叫做servlet上下文对象,上下文在初中就接触到了,上下文的意思,顾名思义,承上启下,在全局都起到一个中心的作用,在服务器每个项目创建的时候都会初始化一个ServletContext上下文对象,我们也叫ServletContext叫做域对象,是在一个区域内所有的servlet都可以共享这个域对象中的资源,因此多用于资源共享。
ServletContext的生命周期
ServletContext在项目创建的时候都会有一个ServletContext上下文对象,一直存在于项目中,在项目被移除,或者服务器被正常关闭的时候会被销毁。
ServletContext的获取方法
ServletContext的获取方式有两种:
第一种:通过servletConfig来获取ServletContext 调用的api为getServletConfig().getServletContext();
第二种:通过在GenericServlet中直接封装好的getServletContext()方法
两种方式在获取的方式上面是一致的。
ServletContext的作用
1,获取全局的初始化参数
我们在一个项目中的web.xml文件中设置的全局的初始化参数可以在任意的servlet来调用API来访问。
<context-param>
<param-name>db</param-name>
<param-value>orcale</param-value>
</context-param>
通过调用 getInitParameter(String name) 来获取全局的初始化参数
如果有多组参数,可以调用Enumeration getInitParameterNames()来获取多组数据,然后利用迭代器来遍历。
2,获取全局资源
全局资源都可以在每个servlet中获取。
3,资源共享
资源共享就是ServletContext最重要的功能了。
我们在这里验证一下资源共享的使用流程,创建三个servlet 一个设置ServletContext的属性,一个来获取ServletContext的属性,另一个来移除ServletContext中设置的属性。
//setServlet中来设置ServletContext中的属性
ServletContext sc = getServletContext();
sc.setAttribute("username", "djm");
sc.setAttribute("password", "123");
设置完之后在getServlet中获取ServletContext中的属性
ServletContext sc = getServletContext();
String nameVal = (String)sc.getAttribute("username");
String passVal = (String) sc.getAttribute("password");
System.out.println("name"+nameVal+" password"+passVal);
在第三个servlet中移除设置的属性值
如果移除之后在获取设置的ServletContext中的属性就会为null了
ServletContext sc = getServletContext();
sc.removeAttribute("password");
ServletContext常用的API
InputStream getResourceAsStream(String filepath)
应用场景:当我们在提供下载的时候,在服务器上存在的资源,可以通过输入流的方式来将服务器的文件来读取到输入流中。然后可以通过response将输入流中的数据通过输出流来写到前台页面。
String getMimeType(String 文件名)
应用场景:可以获取到一个文件的mime类型是什么类型。
mime类型: text/css text/js text/html …大类型/小类型。