一、要求
1.新建一个类ShowTimesServlet继承HttpServlet,重写doGet和doPost方法。
2.在doPost方法中调用doGet方法,在doGet方法中实现统计网站被访问次数的功能,用户每请求一次servlet,使访问次数times加1。
3.获取ServletContext,通过它的功能记住上一次访问后的次数。
二、实现
1.ServletContext简介
ServletContext官方叫servlet上下文。服务器会为每一个工程创建一个对象,这个对象就是ServletContext对象。这个对象全局唯一,而且工程内部的所有servlet都共享这个对象。所以叫全局应用程序共享对象。
2. 作用
①是一个域对象
②可以读取全局配置参数
③可以搜索当前工程目录下面的资源文件
④可以获取当前工程名字
3.域对象方法
setAttribute(key,value);key是String类型,value是Object类型;往域对象里面添加数据,添加时以key-value形式添加getAttribute(key);根据指定的key读取域对象里面的数据removeAttribute(key);根据指定的key从域对象里面删除数据
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;import java.io.IOException;import java.io.PrintWriter;@WebServlet(name = "ShowTimesServlet",urlPatterns="/ShowTimesServlet")public class ShowTimesServlet extends HttpServlet { private static final long serialVersionUID = 1L; protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { //获得Context ServletContext context = getServletContext(); //从context中获取访问次数 Integer times = (Integer) (context).getAttribute("times"); if (times == null) { times = 1; } else { times = times + 1; } //设置编码 resp.setContentType("text/html;charset=UTF-8"); //得到输出流对象 PrintWriter out=resp.getWriter(); out.println("当前页面被访问了"); out.println(""+times+"次"); //设置属性,将times保存到当前的上下文中 context.setAttribute("times",times); } protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { //调用doGet处理方法 doGet(req, resp); }}
三、结果
注意访问路径,一定要和@WebServlet中设置的urlPatterns路径保持一致,且urlPatterns路径中一定要带有斜杠。
访问两次的结果为:
来源地址:https://blog.csdn.net/qq_57342311/article/details/127912021