很多人都了解过滤器也听说过拦截器,但是要是区分它们的不同点还真是真的说不清楚,一下可以简要的说明:
1、拦截器是基于java的反射机制的,而过滤器是基于函数回调
2、过滤器依赖与servlet容器,而拦截器不依赖与servlet容器
3、拦截器只能对action请求起作用,而过滤器则可以对几乎所有的请求起作用
4、拦截器可以访问action上下文、值栈里的对象,而过滤器不能
5、在action的生命周期中,拦截器可以多次被调用,而过滤器只能在容器初始化时被调用一次。
--------------------------------------------------------------------------------
拦截器是在面向切面编程的就是在你的service或者一个方法,前调用一个方法,或者在方法后调用一个方法。是基于JAVA的反射机制。
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable
{
Object result = null;
System.out.println("before invoke method :" + method.getName());
result = method.invoke(this.targetObj, args);
System.out.println("after invoke method : " + method.getName());
return result;
}
过滤器是在java web中,你传入的request,response提前过滤掉一些信息,或者提前设置一些参数,然后再传入servlet或者struts的action进行业务逻辑,比如过滤掉非法url(不是login.do的地址请求,如果用户没有登陆都过滤掉),或者在传入servlet或者struts的action前统一设置字符集,或者去除掉一些非法字符(聊天室经常用到的,一些骂人的话)。
Java中的过滤器实例(解决乱码问题)
一,创建Servlet 继承于HttpServlet 并实现Filter这个过滤器的接口
package com.sun.test;
import java.io.IOException;
import javax.servlet.*;
import javax.servlet.http.HttpServlet;
/***
*
* 功能:处理中文乱码的过滤器 (一个Servlet 实现 Filter的接口)
*
*/
public class MyFilter extends HttpServlet implements Filter {
protected String encoding = null; //声明一个存储编码的属性
protected FilterConfig filterConfig = null; //创建一个过滤器配置对象
/**
* 销毁
*/
public void destroy() {
this.encoding = null;
this.filterConfig = null;
System.out.println("------------------过滤器执行结束了--------------");
}
/**
* 执行
*/
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
System.out.println("------------------正在执行过滤器------------------");
// 选择并设置要使用的字符编码
if((request.getCharacterEncoding()==null)){
String encoding = selectEncoding(); //或得配置文件里面的编码设置
if(encoding!=null){
request.setCharacterEncoding(encoding); //重新设置字符编码 , 顾虑完毕
}
}
// 将控制权传递到下一个过滤器
chain.doFilter(request, response);
}
/**
* 初始化
*/
public void init(FilterConfig filterConfig) throws ServletException {
System.out.println("------------正在初始化--------------");
this.filterConfig = filterConfig; //初始化过滤器的配置
this.encoding = filterConfig.getInitParameter("charset"); //获得配置文件里面的编码并初始化给声明的存储编码的属性
}
//对编码的设置进行封装
protected String selectEncoding() {
return (this.encoding);
}
}
二,过滤器写好了还要在配置文件(web.xml)里面声明,并将其映射到整个程序里面使用:
<!-- 配置一个过滤器 -->
<filter>
<filter-name>TestFilter</filter-name>
<filter-class>com.sun.TestFilter</filter-class>
<init-param>
<param-name>charset</param-name>
<param-value>gb2312</param-value>
</init-param>
</filter>
<!-- 映射到程序中使用 -->
<filter-mapping>
<filter-name>TestFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
转自:http://www.2cto.com/kf/201108/101110.html
分享到:
相关推荐
简单理解Struts2中拦截器与过滤器的区别及执行顺序
拦截器与过滤器[定义].pdf
拦截器和过滤器的区别,从实现原理到应用场景各处区别
浅谈基于过滤器与拦截器的用户访问控制,stuts2中拦截器和过滤器的应用
Filter过滤器与Interceptor拦截器有很多相似
主要介绍了Spring Boot项目实战之拦截器与过滤器,文中给大家详细介绍了springboot 拦截器和过滤器的基本概念,过滤器的配置,需要的朋友可以参考下
Struts 2 过滤器和拦截器的区别
过滤器和拦截器区别过滤器和拦截器区别过滤器和拦截器区别过滤器和拦截器区别过滤器和拦截器区别
该压缩包实现了利用过滤器或者拦截器对登录信息进行验证跳转登陆页的功能,利用的是SpringBoot和thymeleaf,使用前请先看使用说明
struts2工作原理及拦截器和过滤器
拦截器功在对请求权限鉴定方面确实很有用处,在我所参与的这个项目之中,第三方的远程调用每个请求都需要参与鉴定,所以这样做非常方便,而且他是很独立的逻辑,这样做让业务逻辑代码很干净。和框架的其他功能一样,...
1、在SpringBoot中如何实现自定义过滤器(Filter)和拦截器(Interceptor) 2、通过执行案例了解多个过滤器和拦截器的执行顺序 【本案例包含源码以及可执行的jar文件,源码文件建议使用IDEA进行导入查看学习,建议使用...
java-web servlet 拦截器 过滤器使用 java-web servlet 拦截器 过滤器使用
以上的这些功能,通过一种名为责任链或者拦截器或者过滤器(语义上的区别而技术上没有什么区别,知道做了什么就行了)的设计模式可以实现,那么就来看看什么是责任链的设计模式。 以下内容参考北京尚学堂的马士兵...
Spring框架拦截器和过滤器:基于Java开发,包含34个文件,包括28个Java类文件、3个XML配置文件、1个.gitignore文件、1个SQL文件和1个YAML配置文件。该项目是关于Spring框架的拦截器和过滤器的设计,过滤器是Java Web...
清楚解析拦截器和过滤器的关系
Struts2编写的通用的禁止用户非法访问非登录页面以外的其他页面的拦截器,过滤器,程序附带运行说明和可执行文件,希望给您的工作或学习带来帮助
过滤器也叫拦截器,在Web开发过程中,为了实现莫些特殊功能,经常要对请求和响应消息进行处理,本实例简单清晰的讲解了过滤起的使用。
NULL 博文链接:https://tablemiao.iteye.com/blog/2427356