天天看点

Servlet过滤器实现网站访问计数器功能

实现网站在线访问计数器功能,网站的初始值设置为1000

<a href="http://s3.51cto.com/wyfs02/M02/11/98/wKiom1LWNNjhBuykAADDuwQ0B7A473.jpg" target="_blank"></a>

(1)创建CountFilter的类,实现javax。servlet.Filter接口,是一个过滤器对象,通过过滤器实现统计网站人数功能:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

<code>package</code> <code>com.lixiyu;</code>

<code>import</code> <code>java.io.IOException;</code>

<code>import</code> <code>javax.servlet.Filter;</code>

<code>import</code> <code>javax.servlet.FilterChain;</code>

<code>import</code> <code>javax.servlet.FilterConfig;</code>

<code>import</code> <code>javax.servlet.ServletContext;</code>

<code>import</code> <code>javax.servlet.ServletException;</code>

<code>import</code> <code>javax.servlet.ServletRequest;</code>

<code>import</code> <code>javax.servlet.ServletResponse;</code>

<code>import</code> <code>javax.servlet.http.HttpServletRequest;</code>

<code>/**</code>

<code> </code><code>* 统计过滤器</code>

<code> </code><code>* @author lixiyu</code>

<code> </code><code>*/</code>

<code>public</code> <code>class</code> <code>CountFilter </code><code>implements</code> <code>Filter {</code>

<code>    </code><code>// 来访数量</code>

<code>    </code><code>private</code> <code>int</code> <code>count;</code>

<code>                                         </code> 

<code>    </code><code>@Override</code>

<code>    </code><code>public</code> <code>void</code> <code>init(FilterConfig filterConfig) </code><code>throws</code> <code>ServletException {</code>

<code>        </code><code>// 获取初始化参数</code>

<code>        </code><code>String param = filterConfig.getInitParameter(</code><code>"count"</code><code>);</code>

<code>        </code><code>// 将字符串转换为int</code>

<code>        </code><code>count = Integer.valueOf(param);</code>

<code>    </code><code>}</code>

<code>    </code><code>public</code> <code>void</code> <code>doFilter(ServletRequest request, ServletResponse response,</code>

<code>            </code><code>FilterChain chain) </code><code>throws</code> <code>IOException, ServletException {</code>

<code>        </code><code>// 访问数量自增</code>

<code>        </code><code>count ++;</code>

<code>        </code><code>// 将ServletRequest转换成HttpServletRequest</code>

<code>        </code><code>HttpServletRequest req =(HttpServletRequest)request;</code>

<code>        </code><code>// 获取ServletContext</code>

<code>        </code><code>ServletContext context =req.getSession().getServletContext();</code>

<code>        </code><code>// 将来访数量值放入到ServletContext中</code>

<code>        </code><code>context.setAttribute(</code><code>"count"</code><code>, count);</code>

<code>        </code><code>// 向下传递过滤器</code>

<code>        </code><code>chain.doFilter(request, response);</code>

<code>    </code><code>public</code> <code>void</code> <code>destroy() {</code>

<code>}</code>

(2)配置已创建的CountFilter对象,设置初始值为1000,配置web.xml:

<code>&lt;?</code><code>xml</code> <code>version</code><code>=</code><code>"1.0"</code> <code>encoding</code><code>=</code><code>"UTF-8"</code><code>?&gt;</code>

<code>&lt;</code><code>web-app</code> <code>xmlns:xsi</code><code>=</code><code>"http://www.w3.org/2001/XMLSchema-instance"</code>

<code>    </code><code>xmlns</code><code>=</code><code>"http://java.sun.com/xml/ns/javaee"</code> <code>xmlns:web</code><code>=</code><code>"http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"</code>

<code>    </code><code>xsi:schemaLocation</code><code>=</code><code>"http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"</code>

<code>    </code><code>id</code><code>=</code><code>"WebApp_ID"</code> <code>version</code><code>=</code><code>"2.5"</code><code>&gt;</code>

<code>  </code><code>&lt;</code><code>filter</code><code>&gt;</code>

<code>    </code><code>&lt;</code><code>filter-name</code><code>&gt;CountFilter&lt;/</code><code>filter-name</code><code>&gt;</code>

<code>    </code><code>&lt;</code><code>filter-class</code><code>&gt;com.lixiyu.CountFilter&lt;/</code><code>filter-class</code><code>&gt;</code>

<code>    </code><code>&lt;</code><code>init-param</code><code>&gt;</code>

<code>      </code><code>&lt;</code><code>param-name</code><code>&gt;count&lt;/</code><code>param-name</code><code>&gt;</code>

<code>      </code><code>&lt;</code><code>param-value</code><code>&gt;1000&lt;/</code><code>param-value</code><code>&gt;</code>

<code>    </code><code>&lt;/</code><code>init-param</code><code>&gt;</code>

<code>  </code><code>&lt;/</code><code>filter</code><code>&gt;</code>

<code>  </code><code>&lt;</code><code>filter-mapping</code><code>&gt;</code>

<code>    </code><code>&lt;</code><code>url-pattern</code><code>&gt;/index.jsp&lt;/</code><code>url-pattern</code><code>&gt;</code>

<code>  </code><code>&lt;/</code><code>filter-mapping</code><code>&gt;</code>

<code>&lt;/</code><code>web-app</code><code>&gt;</code>

(3)创建程序首页index.jsp,在该页面通过JSP内置对象Application获取计数器的值:

<code>&lt;%@ page language="java" contentType="text/html; charset=UTF-8"</code>

<code>    </code><code>pageEncoding="UTF-8"%&gt;</code>

<code>&lt;!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"&gt;</code>

<code>&lt;</code><code>html</code><code>&gt;</code>

<code>&lt;</code><code>head</code><code>&gt;</code>

<code>&lt;</code><code>meta</code> <code>http-equiv</code><code>=</code><code>"Content-Type"</code> <code>content</code><code>=</code><code>"text/html; charset=UTF-8"</code><code>&gt;</code>

<code>&lt;</code><code>title</code><code>&gt;人数统计&lt;/</code><code>title</code><code>&gt;</code>

<code>&lt;/</code><code>head</code><code>&gt;</code>

<code>&lt;</code><code>body</code><code>&gt;</code>

<code>    </code><code>&lt;</code><code>h2</code><code>&gt;</code>

<code>    </code><code>欢迎光临,&lt;</code><code>br</code><code>&gt;</code>

<code>    </code><code>您是本站的第【</code>

<code>    </code><code>&lt;%=application.getAttribute("count") %&gt;</code>

<code>     </code><code>】位访客!</code>

<code>     </code><code>&lt;/</code><code>h2</code><code>&gt;</code>

<code>&lt;/</code><code>body</code><code>&gt;</code>

<code>&lt;/</code><code>html</code><code>&gt;</code>

本文转自lixiyu 51CTO博客,原文链接:http://blog.51cto.com/lixiyu/1351934,如需转载请自行联系原作者