天天看點

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,如需轉載請自行聯系原作者