需求:统计某一网站上的访问次数。即当你访问一个网站时,可以显示当前这次访问是第多少次访问。
代码
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对象
主要作用:
- 域对象(共享数据)
- 获取资源在服务器的真实地址
- 获取全局的配置参数
- 获取文件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)