使用ServletContext统计用户访问网页的次数

ServletContext 域对象对应一个web项目,所有的servlet都可以访问到

@WebServlet(urlPatterns = "/demo06")
public class CountUsers extends HttpServlet {
    //init方法只会执行一次,只能重写空参方法,如果重写带参Init方法,会报空指针异常
    @Override
    public void init() throws ServletException {

    ServletContext context = getServletContext();

    context.setAttribute("count",1);
}

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

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    /*
    * 统计用保护访问的次数
    * 第一次访问,赋值为1,init方法只会执行一次
    * 以后每一次访问都活调用doget方法
    *
    *
    * */
    ServletContext context = getServletContext();
    int count = (int)context.getAttribute("count");
    response.getWriter().write("welcome"+count);

    count++;
    context.setAttribute("count",count);


    }
}
统计网站访问次数有多种实验方法和案例: ### 实验方法 - **JavaScript 实现**:可使用 JavaScript 统计 HTML 页面访问次数。不过这种方法功能比较单一和简单,若想要强大的统计效果,建议使用成熟的统计工具,如站长统计或腾讯统计等[^1]。 - **ServletContext 统计**:利用 ServletContext 统计一个网站访问总量,而非分 IP 地址统计。这是一个固定的模型,先获取值,接着对值进行判断,根据值是否存在进行不同处理,然后输出结果并保存值。具体操作是通过 `getAttribute(java.lang.String name)` 返回具有给定名字的 servlet container 的属性,若没有具有所给名字的属性则返回空值;使用 `setAttribute(java.lang.String name, java.lang.Object object)` 绑定一个对象到在 servlet context 中给定的属性名称,用此方法存值和取值来保存访问次数[^2][^3]。 - **Django 统计**:在 Django 中可以统计网站访问次数访问 IP、访问端点及次数。还能编写将 IP 转换为现实地理位置的函,如 `blog/ip_convert_addr.py` 中定义的 `ip_to_addr` 函,借助 `geoip2.database` 库实现 IP 到地理位置的转换[^4]。 ### 案例 以下是使用 Servlet 实现统计网站访问次数功能的示例代码: ```java 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("/visitCount") public class VisitCountServlet extends HttpServlet { protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // 设置响应内容类型 response.setContentType("text/html;charset=UTF-8"); PrintWriter out = response.getWriter(); // 获取 ServletContext 对象 ServletContext context = getServletContext(); // 获取访问次数 Integer visitCount = (Integer) context.getAttribute("visitCount"); if (visitCount == null) { // 若访问次数不存在,初始化为 1 visitCount = 1; } else { // 若访问次数存在,加 1 visitCount++; } // 将更新后的访问次数保存到 ServletContext 中 context.setAttribute("visitCount", visitCount); // 输出访问次数 out.println("<html><body>"); out.println("<h2>网站访问次数: " + visitCount + "</h2>"); out.println("</body></html>"); } } ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值