一.过滤器
过滤器Filter是实现了Servlet的javax.servlet.Filter接口,主要的用途是过滤字符编码、做一些业务逻辑判断等。其工作原理是,只要你在web.xml文件配置好要拦截的客户端请求,它都会帮你拦截到请求,此时你就可以对请求或响应(Request、Response)统一设置编码,简化操作;同时还可进行逻辑判断,如用户是否已经登陆、有没有权限访问该页面等等工作。它是随你的web应用启动而启动的,只初始化一次,以后就可以拦截相关请求,只有当你的web应用停止或重新部署的时候才销毁。
用法如下;

package Filter;import java.io.IOException;import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;public class LoginFilter implements  Filter{private FilterConfig config = null; @Overridepublic void destroy() {}@Overridepublic void doFilter(ServletRequest request, ServletResponse response,FilterChain Chain) throws IOException, ServletException {// 强制类型转换 HttpServletRequest Httprequest = (HttpServletRequest)request; HttpServletResponse Httpresponse = (HttpServletResponse)response; //获取在web.xml中配置的Filter参数。//String Encoding = config.getInitParameter("encoding");// 获取web.xm设置的编码集,设置到Request、Response中         request.setCharacterEncoding(config.getInitParameter("charset"));          response.setContentType(config.getInitParameter("contentType"));          response.setCharacterEncoding(config.getInitParameter("charset"));          // 将请求转发到目的地 Chain.doFilter(Httprequest, Httpresponse); }@Overridepublic void init(FilterConfig configParameter) throws ServletException {//当项目启动时初始化Filter。this.config = configParameter; }}

配置调用过滤器的方法。有两种:
一种是在web.xml中直接写

<filter><!-- 定义过滤器名字--><filter-name>LoginFilter</filter-name><!--过滤器包名和类名,通过这个找到指定唯一--><filter-class>Filter.LoginFilter</filter-class><!--过滤器设置的参数,比如编码格式,从这里获取一--><init-param><param-name>useSession</param-name><param-value>true</param-value></init-param><init-param><param-name>encoding</param-name><param-value>UTF-8</param-value></init-param></filter><filter-mapping><!-- 过滤器名字--><filter-name>LoginFilter</filter-name><!-- 设置要被过滤的路径类型,过滤的机制和servlet类似。--><url-pattern>*.do</url-pattern></filter-mapping>

另一种是直接用注解形式

@WebFilter(filterName="LoginFliter",urlPatterns={"/*"})
public class LoginFilter implements  Filter{

Filter里面的三个方法
init 只执行一次,在项目启动时执行。
doFilter 每一次请求或者响应,满足过滤条件可执行该方法。
destroy 项目停止或销毁时。

二.监听器
和Filter类似,监听器Listener,它是实现了Servlet的javax.servlet.ServletContextListener 接口的服务器端程序,它也是随web应用的启动而启动,只初始化一次,随web应用的停止而销毁。主要作用是: 做一些初始化的内容添加工作、设置一些基本的内容、比如一些参数或者是一些固定的对象等等。

MyServletContextListener.java package dc.gz.listeners; import javax.servlet.ServletContext; import javax.servlet.ServletContextEvent; import javax.servlet.ServletContextListener; import org.apache.commons.dbcp.BasicDataSource; /** * Web应用监听器 */ public class MyServletContextListener implements ServletContextListener {   // 应用监听器的销毁方法 public void contextDestroyed(ServletContextEvent event) { ServletContext sc = event.getServletContext(); // 在整个web应用销毁之前调用,将所有应用空间所设置的内容清空 sc.removeAttribute("dataSource"); System.out.println("销毁工作完成..."); } // 应用监听器的初始化方法 public void contextInitialized(ServletContextEvent event) { // 通过这个事件可以获取整个应用的空间 // 在整个web应用下面启动的时候做一些初始化的内容添加工作 ServletContext sc = event.getServletContext(); // 设置一些基本的内容;比如一些参数或者是一些固定的对象 // 创建DataSource对象,连接池技术 dbcp BasicDataSource bds = new BasicDataSource(); bds.setDriverClassName("com.mysql.jdbc.Driver");                       bds.setUrl("jdbc:mysql://localhost:3306/hibernate"); bds.setUsername("root"); bds.setPassword("root"); bds.setMaxActive(10);//最大连接数 bds.setMaxIdle(5);//最大管理数 //bds.setMaxWait(maxWait); 最大等待时间 // 把 DataSource 放入ServletContext空间中, // 供整个web应用的使用(获取数据库连接) sc.setAttribute("dataSource", bds); System.out.println("应用监听器初始化工作完成..."); System.out.println("已经创建DataSource..."); } }

在web.xml中配置如下:

 <!-- 配置应用监听器  --> <listener> <listener-class>dc.gz.listeners.MyServletContextListener</listener-class> </listener>

这样配置好了之后,以后在web应用中就可以通过ServletContext取得BasicDataSource对象,从而获取与数据库的连接,提高性能,方便使用。

二.拦截器

借鉴大神的讲解,非常详细
转:https://blog.csdn.net/reggergdsg/article/details/52962774

过滤器和拦截器的区别:
拦截器是基于java的反射机制的,而过滤器是基于函数回调。
拦截器不依赖与servlet容器,过滤器依赖与servlet容器。
拦截器只能对action请求起作用,而过滤器则可以对几乎所有的请求起作用。
拦截器可以访问action上下文、值栈里的对象,而过滤器不能访问。
在action的生命周期中,拦截器可以多次被调用,而过滤器只能在容器初始化时被调用一次。

过滤器,监听器,拦截器的区别相关推荐

  1. JavaWeb中监听器Listener+过滤器filter+拦截器interceptor区别

    JavaWeb中监听器Listener+过滤器filter+拦截器interceptor区别 如果从整个项目中看,一个servlet请求的执行过程就变成了这样context-param–>lis ...

  2. 过滤器-监听器-拦截器对比

    1,拦截器的概念     java里的拦截器是动态拦截Action调用的对象,它提供了一种机制可以使开发者在一个Action执行的前后执行一段代码,也可以在一个Action 执行前阻止其执行,同时也提 ...

  3. struts2 过滤器和拦截器的区别和使用

    struts2 过滤器和拦截器的区别和使用 java web 过滤器和拦截器的区别和使用  1.1 什么是拦截器:      拦截器,在AOP(Aspect-Oriented Programming) ...

  4. AOP--Filter使用,过滤器和拦截器的区别

    AOP(Aspect-Oriented Programming,面向切面编程)是一种编程思想,并不是一种具体的实现,谈到实现一般有Filter和代理模式两种常见的使用方式,Spring中的AOP也是封 ...

  5. Springboot过滤器和拦截器的区别

    上两篇文章我们介绍了过滤器Filter和拦截器Intercepter,其功能都是对请求进行拦截并对请求过滤,本篇文章就介绍一下两者的区别 1. 过滤器和拦截器的区别 过滤器和拦截器触发时机不一样,过滤 ...

  6. Spring过滤器和拦截器的区别

    Spring过滤器和拦截器的区别 两者的作用 过滤器: 是在javaweb中,你传入的request.response提前过滤掉一些信息,或者提前设置一些参数,然后再传入servlet或者struts ...

  7. Java 过滤器与拦截器的区别

    什么是过滤器(Filter) 过滤器,是在java web中将你传入的request.response提前过滤掉一些信息,或者提前设置一些参数.然后再传入Servlet或Struts2的 action ...

  8. 过滤器跟拦截器的区别

    一.拦截器与过滤器的区别总结 1. 原理不同:拦截器是基于java的反射机制的,而过滤器是基于函数回调. 2. 依赖容器:拦截器不依赖与servlet容器,过滤器依赖与servlet容器. 3. 作用 ...

  9. 过滤器和拦截器的区别和执行顺序

    一.两者的区别 1.拦截器 java里的拦截器是动态拦截Action调用的对象.它提供了一种机制可以使开发者可以定义在一个action执行的前后执行的代码,也可以在一个action执行前阻止其执行,同 ...

  10. springBoot 2.x过滤器--监听器--拦截器

    springboot 2.x过滤器 1.什么是 springboot 2.x过滤器 类似于检票员,检验游客的门票 2.springboot里的过滤器 ApplicationContextHeaderF ...

最新文章

  1. java动态加载配置文件
  2. JavaScript七种非常经典的创建对象方式
  3. 为什么越来越多的企业使用互联网电话(VoIP)?—Vecloud微云
  4. 为你的移动页面寻找一丝新意——手机互动网页项目总结(上)
  5. JMM中的happens-before
  6. 常用的函数式接口_Predicate接口练习_集合信息筛选
  7. 移植U-Boot.1.3.1到S3C2440和S3C2410
  8. 【渝粤教育】国家开放大学2018年秋季 2006T经济数学基础12 参考试题
  9. 第二章 Java基本语法(一)
  10. zap安装提示java_使用API调用进行ZAP身份验证
  11. java 8 java demo_Java 8 中的 Streams API Demo
  12. Post与Get传值读取方法
  13. Flex4_操作XML
  14. Bootstrap系列---按钮
  15. Lintcode 尾部的零
  16. 华为AI人工智能辅助宫颈癌筛查系统, 病理诊断更智能
  17. ❤️ 工厂模式:教你如何制造一台Huawei P50手机 ❤️
  18. PHP 使用用户排队机制解决网站大访问量的例子
  19. 986-Golang的chan数据结构
  20. iOS关于TestFlight的使用

热门文章

  1. 如何使用 Director 编写“拼图游戏”
  2. C++小游戏(第五弹)
  3. Salesforce Aura 组件
  4. VMware ESXi 宕机分析过程
  5. 计算机组成原理实验 内容,计算机组成原理实验报告
  6. android 编译 release版本,详细android gradle 只编译realse版本
  7. 配置SNAT实现共享上网: 搭建内外网案例环境 配置SNAT策略实现共享上网访问
  8. 甲方公司vs乙方公司
  9. java验证xml格式是否正确的是_java判断文件是否为xml格式的方法
  10. 51单片机控制小舵机