练习使用大管家servletContext
- 
1.ServletContext介绍 
 ServletContext官方叫servlet上下文。
- 
2. 域对象 
 “域对象”是服务器在内存中创建的存储空间,域对象:PageContext(页面)、Request(请求)、Session(服务的session,有时限)、ServletContext(整个服务器)。ServletContext就是一个域对象,用于在不同的Servlet之间传递与共享数据。凡是域对象都有如下3个方法: 
| 方法名称 | 作用 | 
|---|---|
| setAttribute(String name,Object value) | 向域对象里面以key-value形式添加数据 | 
| getAttribute(String name) | 根据指定的key读取域对象里面的数据 | 
| removeAttribute(String name) | 根据指定的key从域对象里面删除数据 | 
- 
3.ServletContext 何时创建,何时销毁? 
 web容器在启动的时候,会为容器中每个web应用都创建一个对应的ServletContext对象,它代表了当前的web应用;一个web应用只对应一个ServletContext,所以ServletContext的作用范围是整个web应用。 
 web应用从服务器移除托管,或者是关闭服务器时销毁。
- 
4. ServletContext 的作用范围 
 只要在同一个项目里面,都可以存取。但是App1项目存,在App2项目取,是取不到的?因为它们的ServletContext对象不同。
  
 注意:ServletContext实例包含了本web应用中所有servlet共享的资源信息。通过提供一组方法给servlet使用,用来和servlet容器通讯,比如获取文件的MIME类型、分发请求、记录日志等。
- 
二、实现不同Servlet之间共享数据 
在一个Servlet中保存的数据,可以在另外一个servlet中拿到。
 方法:
 (1)设置数据的API:setAttribute(“键”,“值”);
 (2)获取数据的API:getAttribute(“键”);
 (3)删除数据的API:removeAttribute(“键”);
- 创建HelloServlet.java
public class HelloServlet extends HttpServlet {
   
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        ServletContext servletContext = this.getServletContext();
        servletContext.setAttribute("username","zhangsan"); //将一个数据保存在了ServletContext中
    }
}
- 创建GetServlet.java
public class GetServlet extends HttpServlet {
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        ServletContext servletContext = this.getServletContext();
        String username = (String)servletContext.getAttribute("username");
        response.setContentType("text/html");
        response.setCharacterEncoding("utf-8");
        response.getWriter().print("名字:"+username);
    }
}
- web.xml
<servlet>
    <servlet-name>HelloServlet</servlet-name>
    <servlet-class>cn.sdcit.HelloServlet</servlet-class>
</servlet>
<servlet-mapping>
    <servlet-name>HelloServlet</servlet-name>
    <url-pattern>/set</url-pattern>
</servlet-mapping>
<servlet>
    <servlet-name>GetServlet</servlet-name>
    <servlet-class>cn.sdcit.GetServlet</servlet-class>
</servlet>
<servlet-mapping>
    <servlet-name>GetServlet</servlet-name>
    <url-pattern>/get</url-pattern>
</servlet-mapping>
验证1:
先访问/set存入数据到ServletContext;
 再访问/get从ServletContext取出数据。
验证2:
如果没有存入数据,只能取出null
