网页点击计数器:
很多时候,您可能有兴趣知道网站的某个特定页面上的总点击量。使用 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>