练习使用大管家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