servlet_17 点击计数器实例

网页点击计数器:

很多时候,您可能有兴趣知道网站的某个特定页面上的总点击量。使用 Servlet 来计算这些点击量是非常简单的,因为一个 Servlet 的生命周期是由它运行所在的容器控制的。

以下是实现一个简单的基于 Servlet 生命周期的网页点击计数器需要采取的步骤:

1.定义私有变量,用于记录网页的点击量

2.在init()方法中初始化一个私有变量为0

3.每当调用doGet()或doPost()方法时,私有变量加1


实例:

package MyServlet;

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;

/**
 * Created by 1192126986 on 2017/1/19.
 */
@WebServlet(name = "PageHitCounter")
//拓展HttpServlet类
public class PageHitCounter extends HttpServlet {
    //定义私有变量,用于记录网页的点击量
    private int hitCounter;

    @Override
    public void init() throws ServletException {
        //初始化变量
        hitCounter=0;
    }

    //处理POST方法请求的方法
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doGet(request,response);

    }

    //处理GET方法请求的方法
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //每当访问页面时,点击量+1
        hitCounter++;
        //设置响应文档类型
        response.setContentType("text/html;charset=UTF-8");
        PrintWriter out=response.getWriter();
        String title="网页总点击量";
        String docType = "<!DOCTYPE html> \n";
        out.println(docType +
                "<html>\n" +
                "<head><title>" + title + "</title></head>\n" +
                "<body bgcolor=\"#f0f0f0\">\n" +
                "<h1 align=\"center\">" + title + "</h1>\n" +
                "<h2 align=\"center\">" + hitCounter + "</h2>\n" +
                "</body></html>");

    }
}


网站点击计数器:

很多时候,您可能有兴趣知道整个网站的总点击量。在 Servlet 中,这也是非常简单的,我们可以使用过滤器做到这一点。

以下是实现一个简单的基于过滤器生命周期的网站点击计数器需要采取的步骤:

1.定义私有变量用于记录网站的访问量

2.调用filter过滤器的init()方法初始化私有变量为0

3.每当调用filter过滤器的doFilter()方法时,私有变量加1


实例:

package MyServlet;

/**
 * Created by 1192126986 on 2017/1/19.
 */
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import java.util.*;

public class SiteHitCounter implements Filter {
    //定义私有变量,用于记录网站的访问总量
    private int hitCounter;
    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
        //初始化变量
        hitCounter=0;
    }

    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        //每当访问网站时,访问量+1
        hitCounter++;

        System.out.println("网站访问统计:"+hitCounter);

        //该方法请求转发给过滤器链上的下一个filter,如果没有filter那就是所请求的资源
        //一般filter都是一个链,web.xml 里面配置了几个就有几个。
        //request -> filter1 -> filter2 ->filter3 -> .... -> request resource.
        filterChain.doFilter(servletRequest,servletResponse);
    }

    @Override
    public void destroy() {

    }
}


web.xml配置:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
         version="3.1">
  <!-- servlet 定义 -->
    <servlet>
        <servlet-name>PageHitCounter</servlet-name>
        <servlet-class>MyServlet.PageHitCounter</servlet-class>
    </servlet>

    <!-- filter 过滤器定义 -->
    <filter>
        <filter-name>SiteHitCounter</filter-name>
        <filter-class>MyServlet.SiteHitCounter</filter-class>
    </filter>

    <!-- servlet 映射 -->
    <servlet-mapping>
        <servlet-name>PageHitCounter</servlet-name>
        <!-- servlet 访问地址 -->
        <url-pattern>/PageHitCounter</url-pattern>
    </servlet-mapping>

    <!-- filter 过滤器映射 -->
    <filter-mapping>
        <filter-name>SiteHitCounter</filter-name>
        <!-- 过滤器添加到所有的servlet -->
        <url-pattern>/*</url-pattern>
    </filter-mapping>
</web-app>


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值