Servlet总结——ServletContest对象

本文介绍了ServletContest的概念和用途,重点讲解了如何使用ServletContext进行数据共享,实现网站计数器功能。通过ServletContext,可以在不同Servlet间通信,实现请求转发,读取初始化参数和资源文件。同时,文中给出了网站计数器的实例,展示了如何利用全局Servlet初始化参数来统计页面访问次数。
摘要由CSDN通过智能技术生成


ServletContest概述

一、提出问题

两个问题:

  1. 大家在访问某个网站的时候,往往都会看到网站的首页面显示您是第几位浏览者(网站计数器),这是怎么实现的?
  2. 我们在访问某个bbs网站的时候,往往会显示有多少人在线,这是怎么实现的?

可能我们会想到的常规实现思路:数据库或者文件。这种做法比较简单,但是却会对数据库或者文件访问过于频繁,开销比较大。

解决之道是用ServletContext

二、ServletContext概述

1、什么是ServletContext

在这里插入图片描述
你可以把它想象成一个公用的空间,可以被所有的客户访问,也就是说A客户端可以访问D,B客户端可以访问D,C客户端也可以访问D。

  • WEB容器在启动时,它会为每个Web应用程序都创建一个对应的ServletContext,它代表当前Web应用。并且它被所有客户端共享。
  • ServletContext对象可以通过ServletConfig.getServletContext()方法获得对ServletContext对象的引用,也可以通过this.getServletContext()方法获得其对象的引用。
  • 由于一个WEB应用中的所有Servlet共享同一个ServletContext对象,因此Servlet对象之间可以通过ServletContext对象来实现通讯。ServletContext对象通常也被称之为context域对象。公共聊天室就会用到它。
  • 当web应用关闭、Tomcat关闭或者Web应用reload的时候,ServletContext对象会被销毁

2、怎么使用ServletContext

① 获取ServletContext对象

  1. 通过request对象获取:
    request.getServletContext();

  2. 通过HttpServlet获取:
    this.getServletContext();

② 域对象:共享数据

  1. SetAttribute(String name, Object value); 向ServletContext中存数据
  2. getAttribute(String name); 从ServletContext中取数据
  3. removeAttribute(String name); 从ServletContext中移除数据

注:ServletContext对象范围:所有用户的数据

TestServlet_1

@WebServlet("/Servlet1")
public class TestServlet_1 extends HttpServlet {
   
	
	@Override
	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");
	}
}

TestServlet_2

@WebServlet("/Servlet2")
public class TestServlet_2 extends HttpServlet {
   
	
	@Override
	public void doGet(HttpServletRequest request, HttpServletResponse response)
	        throws ServletException
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值