Servlet过滤器,Servlet过滤器创建和配置

简介: 第一:Servlet的过滤器的创建和配置,创建一个过滤器对象需要实现javax.servlet.Filter接口,同时实现Filter的3个方法。        第一方法是过滤器中的init()方法用于对过滤器的初始值进行处理,第二个是destory()方法是过滤器的销毁方法,主要用于释放资源,对于过滤处理的业务逻辑需要编写到doFilter()方法中,在请求过滤处理后,需要调用chain参数的doFilter()方法将请求向下传递给下一个过滤器或者目标资源。

第一: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 CountFilter
19  */
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 stub
31         String param=filterConfig.getInitParameter("count");//获取初始化参数
32         count=Integer.valueOf(param);//将字符串转换为int
33     }
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 stub
40         count++;//访问数量自增
41         //将ServletRequest转换成HttpServletRequest
42         HttpServletRequest req=(HttpServletRequest)request;
43         //获取ServletContext
44         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 stub
56     }
57 
58 
59 }

 

 1 <%@ page language="java" contentType="text/html; charset=UTF-8"
 2     pageEncoding="UTF-8"%>
 3 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
 4 <html>
 5 <head>
 6 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 7 <title>Insert title here</title>
 8 </head>
 9 <body>
10     <h1>欢迎光临<br/></h1>
11     <h2>您是本站的第【<%=application.getAttribute("count") %>】位访客!</h2>
12 </body>
13 </html>

 

 

 

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
 3   <display-name>web02</display-name>
 4   <welcome-file-list>
 5     <welcome-file>index.html</welcome-file>
 6     <welcome-file>index.htm</welcome-file>
 7     <welcome-file>index.jsp</welcome-file>
 8     <welcome-file>default.html</welcome-file>
 9     <welcome-file>default.htm</welcome-file>
10     <welcome-file>default.jsp</welcome-file>
11   </welcome-file-list>
12   <servlet>
13     <servlet-name>FirstServlet</servlet-name>
14     <servlet-class>com.ningmeng.FirstServlet</servlet-class>
15   </servlet>
16   <servlet-mapping>
17     <servlet-name>FirstServlet</servlet-name>
18     <url-pattern>/FirsetServlet</url-pattern>
19   </servlet-mapping>
20     
21 <!-- 过滤器声明 -->
22     <filter>
23         <filter-name>CountFilter</filter-name>
24         <filter-class>com.ningmeng.CountFilter</filter-class>
25         <init-param>
26             <param-name>count</param-name>
27             <param-value>5000</param-value>
28         </init-param>
29     </filter>
30     <filter-mapping>
31         <filter-name>CountFilter</filter-name>
32         <url-pattern>/index.jsp</url-pattern>
33     </filter-mapping>    
34 </web-app>

 

运行如下

 

目录
相关文章
|
17天前
|
存储 前端开发 Java
servlet过滤器--使用过滤器统计网站访问人数的计数(注解形式)
该文章展示了如何使用Servlet过滤器(Filter)通过注解方式创建一个网站访问人数统计功能,通过`@WebFilter`注解定义过滤器及其URL模式,并在`doFilter`方法中实现计数逻辑,将访问次数存储在`ServletContext`中,最后在JSP页面展示访问人数。
servlet过滤器--使用过滤器统计网站访问人数的计数(注解形式)
|
4月前
|
XML Java 应用服务中间件
Tomcat_servlet部署、编译、配置、打包
Tomcat_servlet部署、编译、配置、打包
58 0
|
7天前
|
监控 前端开发 Java
揭秘Web开发神器:Servlet、过滤器、拦截器、监听器如何联手打造无敌博客系统,让你的用户欲罢不能!
【8月更文挑战第24天】在Java Web开发中,Servlet、过滤器(Filter)、拦截器(Interceptor,特指Spring MVC中的)及监听器(Listener)协同工作,实现复杂应用逻辑。以博客系统为例,Servlet处理文章详情请求,过滤器(如LoginFilter)检查登录状态并重定向,Spring MVC拦截器(如LoggingInterceptor)提供细粒度控制(如日志记录),监听器(如SessionListener)监控会话生命周期事件。这些组件共同构建出高效、有序的Web应用程序。
16 0
|
3月前
|
XML 数据格式
XML配置Servlet文件,不使用注解配置路径的方法
XML配置Servlet文件,不使用注解配置路径的方法
|
3月前
|
应用服务中间件
Servlet urlPattern配置,和不要在Servlet中配置任何匹配的原因
Servlet urlPattern配置,和不要在Servlet中配置任何匹配的原因
序-Servlet和SpringMVC的联系和区别-配置路径先想好使用的使用的方法,然后匹配的需要的技术
序-Servlet和SpringMVC的联系和区别-配置路径先想好使用的使用的方法,然后匹配的需要的技术
|
4月前
|
容器
Servlet 教程 之 Servlet 编写过滤器 6
该教程介绍了如何在Servlet中编写过滤器。可以创建多个过滤器,如AuthenFilter和LogFilter,并通过不同的映射进行配置。过滤器的应用顺序由web.xml中filter-mapping的顺序决定,可通过调整顺序改变过滤器执行的先后。
21 3
|
4月前
|
Java 容器
Servlet 教程 之 Servlet 编写过滤器 2
Servlet过滤器教程:实现Filter接口,包含3个核心方法。1) doFilter用于实际过滤,处理匹配URL的请求,调用FilterChain处理后续过滤。2) init方法在应用启动时被调用,初始化filter,从FilterConfig获取配置信息。3) destroy方法在过滤器销毁前执行,释放资源。
27 2
|
4月前
|
Java
Servlet 教程 之 Servlet 编写过滤器 3
`LogFilter` 是一个 Servlet 过滤器示例,它打印网站名称并传递请求至过滤链。当与 `DisplayHeader` Servlet(显示 HTTP 头信息)配合使用时,提供基础过滤器概念的理解。过滤器在请求处理前可添加额外功能或修改输入,而 `doGet` 方法则用于响应 GET 请求,展示请求头信息。
17 2
|
4月前
|
XML 数据格式
Servlet 教程 之 Servlet 编写过滤器 4
在Servlet教程中,学习如何编写过滤器。在`web.xml`配置文件中,创建一个名为`LogFilter`的过滤器,类为`com.baidu.test.LogFilter`,设置初始化参数`Site`为`百度`。将过滤器映射到`/*`,确保所有请求都会经过此过滤器。同时定义了一个名为`DisplayHeader`的Servlet,映射到`/TomcatTest/DisplayHeader`路径。
20 1