ServletContext对象的应用及其相关知识点

需求:统计某一网站上的访问次数。即当你访问一个网站时,可以显示当前这次访问是第多少次访问。

 代码

package com.lagou;
/**
 * 需求:编写CountServlet,实现对该网站的访问次数统计
 * 分析:通过ServletContext对象,实现该功能
 *      1.继承HttpServlet抽象类
 *      2.重写init()方法,定义计数器。并配置在项目启动时,执行init()方法
 *      3.重写doPost()和doGet()方法。
 *          3.1获取
 */

import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

public class CountServlet extends HttpServlet {

    @Override
    public void init() throws ServletException {

        //设置访问次数为0,即获取到ServletContext对象并调用setAttribute方法设置数值(域对象共享数据)
        getServletContext().setAttribute("count",0);
    }

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

        //设置编码方式
        resp.setContentType("text/html;charset=utf-8");

        //第一步:从ServletContext域中获取计数,取数据
            //1.获取域对象
        ServletContext servletContext = req.getServletContext();
//        ServletContext servletContext = this.getServletContext();  //获取ServletContext域对象的第二种方式
            //2.调用域对象方法,获取数据
        int count = (int)servletContext.getAttribute("count");

        //第二步:将数据返回给浏览器并显示
        count++;
        resp.getWriter().write("<h3>我的博客</h3>");
        resp.getWriter().write("<div> 你是第" + count + "次访问该网站..." + "</div>");

        //第三步:向ServletContext域对象中写入数据
        servletContext.setAttribute("count",count);

    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doGet(req, resp);
    }
}

相关知识点总结:

ServletContext对象:web容器(tomcat)在启动时,它会为每个web项目承建一个对应的ServletContext对象


主要作用:

  1. 域对象(共享数据)
  2. 获取资源在服务器的真实地址
  3. 获取全局的配置参数
  4. 获取文件MIME类型

获取ServletContext对象

1. 通过request对象获得
  ServletContext sc = request.getServletContext();
2. 继承HttpServlet后,可以直接调用
  ServletContext sc = this.getServletContext();

 域对象共享数据的API方法

1. 存储数据
void setAttribute(String name,Object value)
2. 获取数据
Object getAttribute(String name)
3. 删除数据
void removeAttribute(String name)

  

原文地址:https://www.cnblogs.com/aloneme/p/14286544.html