一、什么是过滤器:

  政府大楼的安检保安,它既能对进入政府大楼的人员进行检查,只允许检查符合要求的进入;同时他也负责对出大楼的人进行检查,看他带出的东西是否符合要求。

  同样的,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的更多相关文章

  1. Python基础知识(四)

    Python基础知识(四) 一丶列表 定义格式: 是一个容器,由 [ ]表示,元素与元素之间用逗号隔开. 如:name=["张三","李四"] 作用: 存储任意 ...

  2. Servlet基础知识

    基本知识一.Web结构1.两种应用程序 ①桌面应用程序:QQ.CS.MyEclipse.Office.DW.360.浏览器等必须下载.安装.桌面快捷方式.注册表信息.操作系统后台服务.占用操作系统端口 ...

  3. JSP SERVLET 基础知识

    jsp(java server page)和servlet是JAVA EE规范的两个基本成员,是JAVA WEB开发的重点也是基础知识.JSP本质上也需要编译成SERVLET运行. JSP比较简单,可 ...

  4. Servlet基础知识(一)——Servlet的本质

    什么是Servlet: Servlet是运行在web服务器端(web容器,如tomcat)的程序,它与Applet相对,Applet是运行在客户端的程序. Servlet的主要作用是处理客户端的请求, ...

  5. Servlet基础之一:Servlet基本接口与类

    1.概述 Servlet API中共有5个包,约113个接口和类: javax.servlet javax.servlet.http javax.servlet.jsp javax.servlet.a ...

  6. C# 基础知识 (四).C#简单介绍及托管代码

            暑假转瞬即逝,从10天的支教生活到1周的江浙沪旅游,在这个漫长的暑假中我经历了非常多东西,也学到了非常多东西,也认识到了非常多不足之处!闲暇之余我准备又一次进一步巩固C#相关知识,包含 ...

  7. C语言基础知识(四)——位操作

    一.进制基础知识 1.通常,1字节(Byte)包含8位(bit).C语言用字节表示储存系统字符集所需的大小. 2.对于一个1字节8位的二进制数,最右边(第0位)是最低阶位,最左边(第1位)是最高阶位, ...

  8. Java之JSP和Servlet基础知识

    JSP基础 JSP起源 JSP,JavaServer Pager的简称.由SUN倡导并联合其它公司创建. JSP是一门脚本语言 JSP可以嵌入到HTML中 JSP拥有Java语言的所有特性 面向对象. ...

  9. Servlet基础知识总结

    Servlet是JavaWeb应用开发的核心组件.Servlet运行在Servlet容器中(例如最常用的Tomcat),它可以为各种客户请求提供相应服务.Servlet可以轻松完成以下任务: 动态生成 ...

随机推荐

  1. 在SQL Server 2008 中使用SQL脚本创建登录用户并授权

    到处都使用超级用户sa显然是不安全的,因此有创建用户并让其只能访问某个数据库的必要.当然可以使用SQL Server自带的图形界面向导,但是太难用用了!有时候代码比较直接,比如这里: --使用已经创建 ...

  2. AngularJS 实战讲义笔记

    第一部分 快速上手 1.1 感受AngularJs四大核心特性(MVC, 模块化,指令系统,双向数据绑定)1.2 搭建自动化的前端开发,调试,测试环境 代码编辑工具 (sublime) 断点调试工具 ...

  3. 获取iOS设备属性

    通过使用UIDevice: [[UIDevice currentDevice] systemName]; [[UIDevice currentDevice] systemVersion];//os v ...

  4. EC读书笔记系列之8:条款13、14、15

    条款13 以对象管理资源 记住: ★为防止资源泄漏,请使用RAII对象,它们在构造函数中获得资源并在析构函数中释放 ★两个常被使用的RAII classes分别是tr1::shared_ptr和aut ...

  5. leetcode first bad version python

    # The isBadVersion API is already defined for you. # @param version, an integer # @return a bool # d ...

  6. nginx log format

    参数 说明 示例 $remote_addr 客户端地址 211.28.65.253 $remote_user 客户端用户名称 -- $time_local 访问时间和时区 18/Jul/2012:17 ...

  7. std::string 字符替换函数

    // 替换路径中所有“\”为“/” #include <algorithm> static std::string ConvertSlash(std::string& strUrl ...

  8. Java格式化输出

    Java的格式化输出等同于String.Format,与C有很大的相似,比如 System.out.printf("%8.2f", x);在printf中,可以使用多个参数,例如: ...

  9. jqeruy的append一个有趣的用法(挪移控件位置)

    使用:$(放置的容器).append($(需要迁移的控件)) 需求:列表中点击编辑可以在无刷修改 以前的方法是在列表中的每条数据直接放置控件.但是这个地区选择控件是服务器自定义控件不可以放置在列表的循 ...

  10. 转:IIS请求筛选模块被配置为拒绝超过请求内容长度的请求

    HTTP错误404.13 - Not Found 请求筛选模块被配置为拒绝超过请求内容长度的请求,原因是Web服务器上的请求筛选被配置为拒绝该请求,因为内容长度超过配置的值(IIS 7 默认文件上传大 ...