博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Servlet过滤器,Servlet过滤器创建和配置
阅读量:7021 次
发布时间:2019-06-28

本文共 4462 字,大约阅读时间需要 14 分钟。

第一:Servlet的过滤器的创建和配置,创建一个过滤器对象需要实现javax.servlet.Filter接口,同时实现Filter的3个方法。

       第一方法是过滤器中的init()方法用于对过滤器的初始值进行处理,第二个是destory()方法是过滤器的销毁方法,主要用于释放资源,对于过滤处理的业务逻辑需要编写到doFilter()方法中,在请求过滤处理后,需要调用chain参数的doFilter()方法将请求向下传递给下一个过滤器或者目标资源。

(过滤器和Servlet十分相似哟,在创建之后同样需要对其进行配置,过滤器的配置主要分为两个步骤,分别位声明过滤器和创建过滤器映射)

第二:过滤器的配置简单说下,分为两个步骤,一是声明过滤器对象,二是创建过滤器映射

<!-- 过滤器声明 -->

    <filter>
    <!-- 过滤器的名称 -->
        <filter-name>CountFilter</filter-name>
        <!-- 过滤器的完整类名 -->
        <filter-class>com.ningmeng.CountFilter</filter-class>
        <init-param>
            <param-name>count</param-name>
            <param-value>5000</param-value>
        </init-param>
    </filter>
<!-- 过滤器的映射 -->    
    <filter-mapping>
    <!-- 过滤器的名称 -->
        <filter-name>CountFilter</filter-name>
    <!-- 过滤器的URL映射 -->    
        <url-pattern>/index.jsp</url-pattern>
    </filter-mapping>

------------------------------------------------------------------------------------------------------------------------------

<filter>标签用于声明过滤器的对象,在这个标签中必须配置两个元素,分别是过滤器的名称和过滤器的完整类名,其中<filter-name>

为过滤器的名称,<filter-class>过滤器的完整类名

<filter-mapping>标签用于创建过滤器的映射,他的主要作用就是指定web应用中,那些URL应用哪一个过滤器进行处理,在<filter-mapping>标签中需要指定过滤器的名称和过滤器的URL映射,其中<filter-name>用于定义过滤器的名称,<url-pattern>用于指定过滤器应用的URL。

注意</filter-mapping>标签中的<filter-name>是指定已定义的过滤器的名称,必须和<filter>标签中的<filter-name>一一对应

下面演示一下创建一个过滤器,实现网站访问计数器的功能。并且在web.xml文件的配置中,将网站访问量的初始值设置为5000.

然后直接上代码,不废话

 

1 package com.ningmeng; 2  3 import java.io.IOException; 4 import javax.servlet.Filter; 5 import javax.servlet.FilterChain; 6 import javax.servlet.FilterConfig; 7 import javax.servlet.ServletConfig; 8 import javax.servlet.ServletContext; 9 import javax.servlet.ServletException;10 import javax.servlet.ServletRequest;11 import javax.servlet.ServletResponse;12 import javax.servlet.annotation.WebServlet;13 import javax.servlet.http.HttpServlet;14 import javax.servlet.http.HttpServletRequest;15 import javax.servlet.http.HttpServletResponse;16 17 /**18  * Servlet implementation class CountFilter19  */20 @WebServlet("/CountFilter")21 public class CountFilter extends HttpServlet implements Filter {22     private static final long serialVersionUID = 1L;23     //来访数量24     private int count;25  26     /**27      * @see Filter#init(FilterConfig)28      */29     public void init(FilterConfig filterConfig) throws javax.servlet.ServletException { 30          // TODO Auto-generated method stub31         String param=filterConfig.getInitParameter("count");//获取初始化参数32         count=Integer.valueOf(param);//将字符串转换为int33     }34 35     /**36      * @see Filter#doFilter(ServletRequest, ServletResponse, FilterChain)37      */38     public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws java.io.IOException, javax.servlet.ServletException { 39         // TODO Auto-generated method stub40         count++;//访问数量自增41         //将ServletRequest转换成HttpServletRequest42         HttpServletRequest req=(HttpServletRequest)request;43         //获取ServletContext44         ServletContext context=req.getSession().getServletContext();45         context.setAttribute("count", count);//将来访数量值放入到ServletContext中46         chain.doFilter(request, response);//向下传递过滤器47         48     }49 50 51     /**52      * @see Servlet#destroy()53      */54     public void destroy() {55         // TODO Auto-generated method stub56     }57 58 59 }

 

1 <%@ page language="java" contentType="text/html; charset=UTF-8" 2     pageEncoding="UTF-8"%> 3  4  5  6 
7 Insert title here 8 9 10

欢迎光临

11

您是本站的第【<%=application.getAttribute("count") %>】位访客!

12 13

 

 

 

1 
2
3
web02
4
5
index.html
6
index.htm
7
index.jsp
8
default.html
9
default.htm
10
default.jsp
11
12
13
FirstServlet
14
com.ningmeng.FirstServlet
15
16
17
FirstServlet
18
/FirsetServlet
19
20 21
22
23
CountFilter
24
com.ningmeng.CountFilter
25
26
count
27
5000
28
29
30
31
CountFilter
32
/index.jsp
33
34

 

运行如下

 

转载地址:http://nycxl.baihongyu.com/

你可能感兴趣的文章