ServletContext介绍和使用

生活中,最使人疲惫的往往不是道路的遥远,而是心中的郁闷;最使人痛苦的往往不是生活的不幸,而是希望的破灭;最使人颓废的往往不是前途的坎坷,而是自信的丧失;最使人绝望的往往不是挫折的打击,而是心灵的死亡。所以我们要有自己的梦想,让梦想的星光指引着我们走出落漠,走出惆怅,带着我们走进自己的理想。

导读:本篇文章讲解 ServletContext介绍和使用,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com,来源:原文

ServletContext简介

        ServletContext是一个全局的储存信息的空间,服务器开始就存在,服务器关闭才释放。这个ServletContext是所有Servlet所共享的,作用范围是整个服务器。

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

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

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

        ServletContext有2种获取方式,分别是

ServletContext介绍和使用         我们查看下源码 

ServletContext介绍和使用

        发现第二种获取方法就是和第一个一样的,无论使用哪种都行。

        ServletContext主要有以下作用

  • 读取web.xml中配置的上下文参数,context-param,这个是属于所有Servlet共享的,而不是某个Servlet单独的
  • 获取当前工程路径
  • 获取工程部署服务器后的绝对路径
  • 像Map一样进行全局的数据存储,多个Servlet共享数据

 ServletContext使用

        我们这里使用ServletContext的全局共享数据的特性,我们来做一个网址访问计数器,原理就是在ServletContext中设置一个全局的参数,每个Servlet被访问时,都将这个参数+1。我们创建2个Servlet进行测试。并且提取了一个静态方法。代码如下

import javax.servlet.*;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.*;
import java.io.IOException;
import java.io.PrintWriter;

@WebServlet("/test01")
public class ServletTest01 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //获取ServletContext
        ServletContext servletContext = this.getServletContext();
        //得到全局参数count
        Integer count = ServletUtils.getTotalVisitCount(servletContext);
        //设置MIME和编码
        response.setContentType("text/html;charset=utf-8");
        //获取输出流
        PrintWriter writer = response.getWriter();
        //像游览器写出内容
        writer.write("我是Servlet01,<h1>服务器一共被访问"+count+"次</h1>");
    }

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

    }
}
import javax.servlet.*;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.*;
import java.io.IOException;
import java.io.PrintWriter;

@WebServlet("/test02")
public class ServletTest02 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //获取ServletContext
        ServletContext servletContext = this.getServletContext();
        //得到全局参数count
        Integer count = ServletUtils.getTotalVisitCount(servletContext);
        //设置MIME和编码
        response.setContentType("text/html;charset=utf-8");
        //获取输出流
        PrintWriter writer = response.getWriter();
        //像游览器写出内容
        writer.write("我是Servlet02,<h1>服务器一共被访问"+count+"次</h1>");
    }

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        this.doGet(request,response);
    }
}
import javax.servlet.ServletContext;

public class ServletUtils {

    public static Integer getTotalVisitCount(ServletContext servletContext) {
        //得到全局参数count
        Object count = servletContext.getAttribute("count");
        //判读count是否存在,存在就+1,否则创建count。
        if (count != null) {
            servletContext.setAttribute("count", (Integer) count + 1);
            count = (Integer)count + 1;
        } else {
            servletContext.setAttribute("count", 1);
            count = 1;
        }
        return (Integer) count;
    }
}

        我们启动服务器分别访问/test01和/test02,看网页输出情况

ServletContext介绍和使用

ServletContext介绍和使用

       


        我们先后访问2个不同的Servlet,发现确实已经实现网址统计的功能,我们多刷新一下试试

ServletContext介绍和使用


        我们发现确实每次刷新都会增多,到此我们已经实现了该功能,ServletContext可以做的功能很多,当我们需要使用到全局属性时使用ServletContex就行了,我们看下ServletContext的方法名其实就能把功能猜的差不多,不会时网上搜索对应的教程就行了,如果想深入理解,那么就看源码吧!!!

ServletContext介绍和使用

        ServletContext方法非常多,上面是一部分,基本可以满足我们所有需求。最后,我们必须记住ServletContext是全局共享的!!!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/140321.html

(0)
飞熊的头像飞熊bm

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!