Servletcontext 对象


本文整理自网络,侵删。

ServletContext是一个全局的储存信息的空间,服务器开始就存在,服务器关闭才释放。为了方便大家理解,我们将ServletContext和Cookie、Session做一个简单对比,如下图:




我们可以把ServletContext当成一个公用的空间,可以被所有的客户访问,如上图,A、B、C三个客户端都可以访问。

WEB容器在启动时,它会为每个Web应用程序都创建一个对应的ServletContext,它代表当前Web应用,并且它被所有客户端共享。


由于一个WEB应用中的所有Servlet共享同一个ServletContext对象,因此Servlet对象之间可以通过ServletContext对象来实现通讯。ServletContext对象通常也被称之为context域对象。公共聊天室就会用到它。

当web应用关闭、Tomcat关闭或者Web应用reload的时候,ServletContext对象会被销毁


ServletContext使用方法


1、ServletContext对象如何得到

this.getServletContext(); 
this.getServletConfig().getServletContext();

2、你可以把它想象成一张表,这个和Session非常相似:每一行就是一个属性,如下:

名字(String) 值(Object)


添加属性:setAttribute(String name, Object obj);

得到值:getAttribute(String name),这个方法返回Object

删除属性:removeAttribute(String name)


3、生命周期 

ServletContext中的属性的生命周期从创建开始,到服务器关闭结束。


一个快速入门的案例: 

我们创建Servlet1和Servlet2,分别用于在ServletContext中创建和读取属性: 


Servlet1的doGet方法为:

public void doGet(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {
    response.setContentType("text/html;charset=utf-8");
    PrintWriter out = response.getWriter();
    // 获取ServletContext对象的引用
    // 第一种方法

    ServletContext servletContext = this.getServletContext();
    // 第二种方法
    // ServletContext servletContext2 = this.getServletConfig().getServletContext();
    servletContext.setAttribute("name", "小明");
    out.println("将 name=小明  写入了ServletContext");
}

Servlet2的doGet方法为:

public void doGet(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {
    response.setContentType("text/html;charset=utf-8");
    PrintWriter out = response.getWriter();
    // 取出ServletContext的某个属性
    //1.首先获取到ServletContext
    ServletContext servletContext = this.getServletContext();
    //2.取出属性
    String name = (String)servletContext.getAttribute("name");
    out.println("name="+name);
}

以此访问Servlet1和Servlet2,我们可以分别看到输出如下:






粗看之下,这个运行结果和Session,Cookie的应用似乎没什么区别,但事实上则完全不一样的。只要不关闭Tomcat或者reload该应用,当我们关闭当前的浏览器,或者是换一个浏览器,比如从360浏览器换到了IE浏览器再次访问Servlet2,我们依然可以看到这个结果!这就是和和Session,Cookie最大的不同了。之所以会造成这种不同,是因为ServletContext存在于服务器内存中的一个公共空间,它可以供所有的用户客户端访问。


ServletContext应用


1、多个Servlet可以通过ServletContext对象来实现数据间的共享

类似于Session,通过ServletContext对象我们也可以实现数据共享,但值得注意的是,Session是只能在一个客户端中共享数据,而ServletContext中的数据是在所有客户端中都可以实现数据共享的。


2、实现Servlet的请求转发

阅读剩余部分

相关阅读 >>

Servlet 客户端 http 请求

Servlet 编写过滤器

Servlet 服务器 http 响应

Servlet 表单数据

java:阐述Servlet和cgi的区别?

Servlet http 状态码

Servlet 发送电子邮件

Servlet 生命周期

Servlet和jsp的区别

Servlet 网页重定向

更多相关阅读请进入《Servlet》频道 >>




打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...