1.过滤器

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

MyCharsetFilter.Java编码过滤器package...;import...;//主要目的:过滤字符编码;其次,做一些应用逻辑判断等.//Filter跟web应用一起启动//当web应用重新启动或销毁时,Filter也被销毁

public class MyCharsetFilter implementsFilter {private FilterConfig config = null;public voiddestroy() {

System.out.println("MyCharsetFilter准备销毁...");

}public void doFilter(ServletRequest arg0, ServletResponse arg1, FilterChain chain) throwsIOException, ServletException {//强制类型转换

HttpServletRequest request =(HttpServletRequest)arg0;

HttpServletResponse response=(HttpServletResponse)arg1;//获取web.xm设置的编码集,设置到Request、Response中 request.setCharacterEncoding(config.getInitParameter("charset")); response.setContentType(config.getInitParameter("contentType")); response.setCharacterEncoding(config.getInitParameter("charset"));//将请求转发到目的地

chain.doFilter(request, response);

}public void init(FilterConfig arg0) throwsServletException {this.config =arg0;

System.out.println("MyCharsetFilter初始化...");

}

}

以下是 MyCharsetFilter.java 在web.xml 中配置:

filter

dc.gz.filters.MyCharsetFilter

charset

UTF-8

contentType

text/html;charset=UTF-8

filter

/*

以上的例子简单的说明了Filter的使用,具体其他的应用可以看具体的场景。

2.监听器

现在来说说Servlet的监听器Listener,它是实现了javax.servlet.ServletContextListener 接口的服务器端程序,它也是随web应用的启动而启动,只初始化一次,随web应用的停止而销毁。主要作用是: 做一些初始化的内容添加工作、设置一些基本的内容、比如一些参数或者是一些固定的对象等等。下面利用监听器对数据库连接池DataSource的初始化演示它的使用:

MyServletContextListener.javapackagedc.gz.listeners;importjavax.servlet.ServletContext;importjavax.servlet.ServletContextEvent;importjavax.servlet.ServletContextListener;importorg.apache.commons.dbcp.BasicDataSource;/*** Web应用监听器*/

public class MyServletContextListener implementsServletContextListener {//应用监听器的销毁方法

public voidcontextDestroyed(ServletContextEvent event) {

ServletContext sc=event.getServletContext();//在整个web应用销毁之前调用,将所有应用空间所设置的内容清空

sc.removeAttribute("dataSource");

System.out.println("销毁工作完成...");

}//应用监听器的初始化方法

public voidcontextInitialized(ServletContextEvent event) {//通过这个事件可以获取整个应用的空间//在整个web应用下面启动的时候做一些初始化的内容添加工作

ServletContext sc =event.getServletContext();//设置一些基本的内容;比如一些参数或者是一些固定的对象//创建DataSource对象,连接池技术 dbcp

BasicDataSource bds = newBasicDataSource();

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中配置如下,很简单:

dc.gz.listeners.MyServletContextListener

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

3.拦截器

拦截器是在面向切面编程中应用的,就是在你的service或者一个方法前调用一个方法,或者在方法后调用一个方法。是基于JAVA的反射机制。拦截器不是在web.xml,比如struts在struts.xml中配置,

public Object invoke(Object proxy, Method method, Object[] args) throwsThrowable

{

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());returnresult;

}

总结:

1.过滤器:所谓过滤器顾名思义是用来过滤的,在Java Web中,你传入的request,response提前过滤掉一些信息,或者提前设置一些参数,然后再传入servlet或者struts的action进行业务逻辑,比如过滤掉非法url(不是login.do的地址请求,如果用户没有登陆都过滤掉),或者在传入servlet或者struts的action前统一设置字符集,或者去除掉一些非法字符(聊天室经常用到的,一些骂人的话)。filter 流程是线性的, url传来之后,检查之后,可保持原来的流程继续向下执行,被下一个filter, servlet接收等.

2.监听器:这个东西在c/s模式里面经常用到,他会对特定的事件产生产生一个处理。监听在很多模式下用到。比如说观察者模式,就是一个监听来的。又比如struts可以用监听来启动。Servlet监听器用于监听一些重要事件的发生,监听器对象可以在事情发生前、发生后可以做一些必要的处理。

3.java的拦截器 主要是用在插件上,扩展件上比如 hivernate spring struts2等 有点类似面向切片的技术,在用之前先要在配置文件即xml文件里声明一段的那个东西。

拦截器是干嘛用的java_拦截器、过滤器做什么的?相关推荐

  1. SSM拦截器和过滤器结合使用-实现登录拦截操作

    我的主要思路是:使用过滤器filter实现对前台页面的拦截(包括.jsp.css.images.js),使用拦截器interceptor实现对后台所有请求的拦截(登陆请求除外). 文件位置如下,下图是 ...

  2. decorator java_装饰器模式-Decorator(Java实现)

    装饰器模式-Decorator(Java实现) 装饰器模式允许向一个现有的对象添加新的功能, 同时又不改变其结构. 其中 "现有对象"在本文中是StringDisplay类. 添加 ...

  3. 28 Java类的加载机制、什么是类的加载、类的生命周期、加载:查找并加载类的二进制数据、连接、初始化、类加载器、双亲委派模型、自定义类加载器

    28Java类的加载机制 28.1.什么是类的加载 28.2.类的生命周期 28.2.1.加载:查找并加载类的二进制数据 28.2.2.连接 28.2.3.初始化 28.3.类加载器 28.4.类的加 ...

  4. OpenGL着色器透视变换实例-通过旋转平移调试着色器

    OpenGL 着色器新手样例 带透视变换和旋转平移缩放 OpenGL着色器样例 - 最简单的顶点着色器 + 片元着色器 头文件和宏定义 全局变量部分 读取着色器 从文本中读取着色器代码 初始化着色器 ...

  5. aspen中再沸器模拟_【单元操作001】再沸器第一波·Aspen Plus中的再沸器设置

    蒸馏操作是通过汽化.冷凝达到提浓的目的,加热汽化主要通过再沸器来完成,相对而言,精馏塔的再沸器种类较多,选择时要考虑的因素也比较多.这一系列的文章,小编试图通过流程模拟.再沸器排布.再沸器类型及在工程 ...

  6. 单片机8位抢答器实训机电报告_CD4511八路抢答器实验报告-

    CD4511八路抢答器实验报告- 本文关键词:八路,实验,报告,抢答器,CD4511 CD4511八路抢答器实验报告- 本文简介:小学期实验设计任务目录摘要I第1章绪论11.1课题研究的相关背景11. ...

  7. 为什么当项目启动后执行两次过滤器 再进行访问资源时执行一次过滤器

    为什么当项目启动后执行两次过滤器 再进行访问资源时执行一次过滤器 粗线的理解,启动项目后进行了两次请求,访问两次过滤器.访问资源时只进行一次请求,所以访问一次过滤器. 于是为了更加清楚地看清在启动项目 ...

  8. 脑机接口拼写器是否真的安全?华中科技大学研究团队对此做了相关研究

    点击上面"脑机接口社区"关注我们 更多技术干货第一时间送达 脑机接口(BCI)记录和解码脑信号以构建通信路径,使人们可以通过思想直接与计算机进行交互.BCI广泛应用于包括神经科学, ...

  9. ik分词器 分词原理_Solr7.7.2中文分词器

    中文分词器的配置 1.7版本之后solr内置了中文分词器所以可以使用solr内置的分词器进行配置 1.在解压的目录内找到分词器包 2.将包放在solr项目的lib下 3.修改配置文件修改他下面的con ...

最新文章

  1. LabVIEW设置应用程序显示标签透明
  2. Spring Cloud、K8S、Netflix OSS三者啥关系???
  3. 强化学习笔记:PPO 【近端策略优化(Proximal Policy Optimization)】
  4. SAP Spartacus component-wrapper自定义指令的实现
  5. matplotlib设置多个图例横向水平放置
  6. python创建二维空列表_python定义二维空数组
  7. ZZULIOJ 1066:字符分类统计
  8. win8 计算机配置,Win8如何进行系统配置
  9. 负载均衡原理与实践详解 第五篇 负载均衡时数据包流程详解
  10. c语言 键盘输入结构体,C语言结构体问题
  11. phpstorm 配置自带webserver ,配置根目录
  12. 我转行程序员的那一年(五)
  13. Vine已死,秒拍抱团崛起,同是视频社交差距在哪?
  14. html5脑图_HTML5 D3.js 树形结构动画示范(可绘制脑图)
  15. android 背景 投影,Android ImageView投影
  16. android之manifest
  17. 太酷了!我老了之后,也要这么“兴风作浪”!
  18. 项目:数据库表的梳理
  19. 二叉树遍历(递归、非递归)
  20. 记录:remote: You are not allowed to push code to this project...【亲测有效】

热门文章

  1. php senc.dll下载,PHP如何调用非COM组件的DLL
  2. matlab中screen函数,14 用 Screen 函数打开一个窗口
  3. 大数据HDFS凭啥能存下百亿数据?
  4. jdk 11及以上 javax.annotation.Generated报错 @Generated报错
  5. C语言笔记 | 一元三次方程
  6. fatal error: ***.h: No such file or directory
  7. UltraEdit 快捷键(UE 快捷键)
  8. kafka 消费者的消费策略以及再平衡
  9. idea 导入 vue项目 improt全都报红
  10. 02: 实现发布帖子功能