Servlet基础知识(四)——Servlet过滤器Filter
一、什么是过滤器:
政府大楼的安检保安,它既能对进入政府大楼的人员进行检查,只允许检查符合要求的进入;同时他也负责对出大楼的人进行检查,看他带出的东西是否符合要求。
同样的,Servlet中的过滤器既可以对客户端发来的请求,在Servlet接收之前进行过滤;也可以对Servlet发出的响应,在客户端接收之前进行过滤。
二、过滤器的实现:
Servlet的过滤器是通过实现javax.servlet.Filter接口实现的。(也就是说Servlet过滤器其实就是一个实现了Filter的Serlvet类)。该接口有三个方法:
init(FilterConfig filterConfig)
Servlet的初始化方法:读取web.xml中配置的Filter的初始化参数(它的参数提供了filterConfig对象,该对象可以读取web.xml里的配置)。init()只会被调用一次。
@Override
public void init(FilterConfig filterConfig) throws ServletException {
//获取Filter初始化参数
String username = filterConfig.getInitParameter("username");
}
doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
Servlet的过滤方法:当客户端的请求的符合被过滤的范围时,该方法进行过滤处理。处理完后chain再调用doFilter(request,response),表示继续执行下一个过滤器。
(这里的ServletRequest和ServletResponse都要强制转换成HttpSevletRequest和HttpServletResponse,因为Servlet实现的请求和响应式Http类型的。)
destroy()
Servlet容器在销毁过滤器实例前调用该方法,在该方法中释放Servlet过滤器占用的资源。
三、在web.xml中配置Filter:
注意:一般Filter都是配置在Servlet之前的。
过滤器中init(FilterConfig filterConfig)就是用来获取配置的这些信息,初始化过滤器的。
<filter>
<filter-name>LoginFilter</filter-name> //过滤器的名字
<filter-class>com.itzhai.login.LoginFilter</filter-class> //过滤器类名
</filter> <filter-mapping>
<filter-name>LoginFilter</filter-name>
<url-pattern>/*</url-pattern> //要过滤的url
</filter-mapping>
四、过滤敏感词的过滤器例子:
@Override
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
//转换成实例的请求和响应对象
HttpServletRequest req = (HttpServletRequest)request;
HttpServletResponse resp = (HttpServletResponse)response;
//获取评论并屏蔽关键字
String comment = req.getParameter("comment");
comment = comment.replace("A", "***");
//重新设置参数
req.setAttribute("comment", comment);
//继续执行
chain.doFilter(request, response);
}
Servlet基础知识(四)——Servlet过滤器Filter的更多相关文章
- Python基础知识(四)
Python基础知识(四) 一丶列表 定义格式: 是一个容器,由 [ ]表示,元素与元素之间用逗号隔开. 如:name=["张三","李四"] 作用: 存储任意 ...
- Servlet基础知识
基本知识一.Web结构1.两种应用程序 ①桌面应用程序:QQ.CS.MyEclipse.Office.DW.360.浏览器等必须下载.安装.桌面快捷方式.注册表信息.操作系统后台服务.占用操作系统端口 ...
- JSP SERVLET 基础知识
jsp(java server page)和servlet是JAVA EE规范的两个基本成员,是JAVA WEB开发的重点也是基础知识.JSP本质上也需要编译成SERVLET运行. JSP比较简单,可 ...
- Servlet基础知识(一)——Servlet的本质
什么是Servlet: Servlet是运行在web服务器端(web容器,如tomcat)的程序,它与Applet相对,Applet是运行在客户端的程序. Servlet的主要作用是处理客户端的请求, ...
- Servlet基础之一:Servlet基本接口与类
1.概述 Servlet API中共有5个包,约113个接口和类: javax.servlet javax.servlet.http javax.servlet.jsp javax.servlet.a ...
- C# 基础知识 (四).C#简单介绍及托管代码
暑假转瞬即逝,从10天的支教生活到1周的江浙沪旅游,在这个漫长的暑假中我经历了非常多东西,也学到了非常多东西,也认识到了非常多不足之处!闲暇之余我准备又一次进一步巩固C#相关知识,包含 ...
- C语言基础知识(四)——位操作
一.进制基础知识 1.通常,1字节(Byte)包含8位(bit).C语言用字节表示储存系统字符集所需的大小. 2.对于一个1字节8位的二进制数,最右边(第0位)是最低阶位,最左边(第1位)是最高阶位, ...
- Java之JSP和Servlet基础知识
JSP基础 JSP起源 JSP,JavaServer Pager的简称.由SUN倡导并联合其它公司创建. JSP是一门脚本语言 JSP可以嵌入到HTML中 JSP拥有Java语言的所有特性 面向对象. ...
- Servlet基础知识总结
Servlet是JavaWeb应用开发的核心组件.Servlet运行在Servlet容器中(例如最常用的Tomcat),它可以为各种客户请求提供相应服务.Servlet可以轻松完成以下任务: 动态生成 ...
随机推荐
- Love Hotels and Unicode[转]
原文地址:http://www.reigndesign.com/blog/love-hotels-and-unicode/ 讲得挺通俗的一篇文章 On Sunday 28 October I atte ...
- null类型的字段加1
很高兴今天学到了一种新方法. 数据库中字段类型为Long ,值可能为null,也可能是某一数.因此对该字段数值进行 +1操作时需要判断该值是null还是数值. 同时实现更新操作.具体如下: updat ...
- 【转载】VS2010+VMWare8+VisualDDK1.5.6 创建并调试驱动程序 - 完全教程
原帖:http://techird.blog.163.com/blog/static/1215640362011112385241568/ 本文描述了如何使用Visual Studio+VMMare+ ...
- error1
#include<stdio.h>main(){ int a[10],i,m,n,j; for(i=3;i<10;i++) scanf("%d",&a ...
- C#时间日期操作
一.C# 日期格式 DateTime dt = DateTime.Now; dt.ToString();//2005-11-5 13:21:25 dt.ToFileTime().ToString() ...
- QF——iOS中的数据库操作:SQLite数据库,第三方封装库FMDB,CoreData
SQLite数据库: SQLite是轻量级的数据库,适合应用在移动设备和小型设备上,它的优点是轻量,可移植性强.但它的缺点是它的API是用C写的,不是面向对象的.整体来说,操作起来比较麻烦.所以,一般 ...
- Android 拨号器的简单实现
功能实现:一个EditView 一个拨打按钮,输入号码跳转到拨号界面 界面布局:activity_call.xml //线性垂直布局:一个EditView文本.一个Button按钮 1 <Lin ...
- python 连接数据库-设置oracle ,mysql 中文字符问题
import cx_Oracle import MySQLdb def conn_oracle(): cnn = cx_Oracle.connect('用户名','密码','ip:端口号/数据库') ...
- Microsoft web application stress tool 测试
一.准备工作 为了测试数据的准备性,首先需要删除缓存和Cookies等临时文件.启动IE后打开“工具”菜单下的“Internet”选项命令,在打开的“Internet选项”窗口的“常规”选项卡中,单击 ...
- MFC 可以设置背景色、字体、字体颜色、透明背景的 Static 静态文本控件
MFC库里没有符合这个条件的控件,于是我自己写了一个,初步测试有效. 注:可以设置透明背景,但还不能做到透明度设置(如50%透明度) 如果设置了背景色,就不保留透明背景 默认背景色是透明的 [cpp] ...