【JavaWeb学习,快一起呀,干!】第三章 Servlet 核心接口(3)—— 网站访问计数实现

开门见山的说

逸夫楼今天废了?屋漏偏逢连夜雨,道是无情却有情。凎!

ServletContext 对象一个很神奇的东西,一个 Web 应用只会有一个。

我们可以把 ServletContext 对象理解为容器内一个共享空间,可以存储具有应用级别作用域的数据。而 Web 应用中的各个组件都可以共享这些数据。举个栗子,炮姐和她的妹妹们。

这些共享数据以 key/value 的形式存储在 ServletContext 对象中,并以 key/value 的形式存储在 ServletContext 对象中,并以 key 作为属性名被访问。

ServletContext 接口存取应用域属性的方法

· setAttribute(String name, Object object) 把一个对象和属性名绑定,存放至 ServletContext 中,参数 name 指定属性名,参数 object 表示共享数据

· getAttribute(String name) 根据参数给定的属性名,返回一个 Object 类型的对象

· getAttributeNames() 返回一个 Enumeration 对象,该对象包含了所有存放在 ServletContext 中的属性名

· removeAttribute(String name) 根据参数指定的属性名,从 ServletContext 对象中删除匹配的属性

啥是作用域?

呸,应用域。

应用域两层含意:

· 一是表示由 Web 应用的生命周期构成的时间段

· 二是表示在 Web 应用范围内的可访问性

来,我们做个东西,网站访问计数

【代码】ContextAttributeServlet.java
【JavaWeb学习,快一起呀,干!】第三章 Servlet 核心接口(3)—— 网站访问计数实现_第1张图片
【运行结果】
【JavaWeb学习,快一起呀,干!】第三章 Servlet 核心接口(3)—— 网站访问计数实现_第2张图片
很有用的小东西。

对于存储在 ServletContext 对象中的属性 count,不同的 Servlet 都可以通过 ServletContext 对象进行修改,并且一方的修改会影响另一方获取的数据。

所以!注意!多线程访问的情况下,注意数据的同步问题!

好了,最后是代码

【ContextAttributeServlet.java】

import java.io.IOException;

import java.io.PrintWriter;

import javax.servlet.ServletContext;

import javax.servlet.ServletException;

import javax.servlet.annotation.WebServlet;

import javax.servlet.http.HttpServlet;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

/**

  • Servlet implementation class ContextAttributeServelt

*/

@WebServlet("/ContextAttributeServelt")

public class ContextAttributeServelt extends HttpServlet {

   private static final long serialVersionUID = 1L;

  

/**

 * @see HttpServlet#HttpServlet()

 */

public ContextAttributeServelt() {

    super();

    // TODO Auto-generated constructor stub

}

   /**

    * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)

    */

   protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

         // 设置响应到客户端的文本类型

         response.setContentType("text/html;charset=UTF-8");

         // 获取 ServletContext 对象

         ServletContext context = super.getServletContext();

         // 从 ServletContext 对象获取 count 属性存放的计数值

         Integer count = (Integer)context.getAttribute("count");

         if (count == null) {

                count = 1;

         } else {

                count = count + 1;

         }

         // 将更新后的数值存储到 ServletContext 对象的 count 属性中

         context.setAttribute("count", count);

         // 获取输出流

         PrintWriter out  = response.getWriter();

         // 输出计数信息

         out.println("

本网站目前访问人数是: " + count + "

"); }

}

你可能感兴趣的:(javaweb,servlet,学习,计算机,程序员)