filter 作用
过滤器
filter用于拦截用户请求,在服务器作出响应前,可以在拦截后修改request和response,这样实现很多开发者想得到的功能。
filter是一个可以复用的代码片段,可以用来转换HTTP请求、响应和头信息。Filter不像Servlet,它不能产生一个请求或者响应,它只是修改对某一资源的请求,或者修改从某一的响应。
常见用法
处理全站中文乱码问题
实现自动登录
过滤敏感词汇
压缩网页
选择性让浏览器缓存
这几种功能的实现采用同样的原理,那就是使用包装模式或动态代理增强request或response对象的功能。
Servlet和filter的区别
1,servlet 流程是短的,url传来之后,就对其进行处理,之后返回或转向到某一自己指定的页面。它主要用来在 业务处理之前进行控制.
2,filter 流程是线性的, url传来之后,检查之后,可保持原来的流程继续向下执行,被下一个filter, servlet接收等,而servlet 处理之后,不会继续向下传递。filter功能可用来保持流程继续按照原来的方式进行下去,或者主导流程,而servlet的功能主要用来主导流程。
filter可用来进行字符编码的过滤,检测用户是否登陆的过滤,禁止页面缓存等。
demo演示
步骤一:新建comment.jsp页面
- <%@ page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
- <html>
- <head>
- <title>评论</title>
- </head>
- <body>
- <form action="comment" method="post">
- <fieldset>
- <legend>评论</legend>
- 请输入评论:<textarea name="comment"
- style="vertical-align:middle;
- width:140px;height:55px"></textarea><Br>
- <input type="submit" value="发表评论" />
- </fieldset>
- </form>
- </body>
- </html>
步骤二:新建CommentServlet.java文件
- package web;
- import java.io.IOException;
- import java.io.PrintWriter;
- import javax.servlet.ServletException;
- import javax.servlet.http.HttpServlet;
- import javax.servlet.http.HttpServletRequest;
- import javax.servlet.http.HttpServletResponse;
- public class CommentServlet extends HttpServlet {
- public void service(HttpServletRequest request,
- HttpServletResponse response)
- throws ServletException, IOException {
- request.setCharacterEncoding("UTF-8");
- response.setContentType("text/html;charset=UTF-8");
- PrintWriter out = response.getWriter();
- //获取评论内容
- String str = request.getParameter("comment");
- //显示评论内容
- out.println("<h3>评论内容:" + str + "</h3>");
- out.close();
- }
- }
步骤三:新建CommentFilter类
- package web;
- import java.io.IOException;
- import java.io.PrintWriter;
- 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 CommentFilter1 implements Filter{
- private String illegalWord;
- /**
- * 容器删除过滤器实例之前调用,只执行一次
- */
- public void destroy() {
- }
- /**
- * 用于处理请求的主要方法
- */
- public void doFilter(ServletRequest request, ServletResponse response,
- FilterChain chain) throws IOException, ServletException {
- HttpServletRequest req = (HttpServletRequest)request;
- HttpServletResponse resp = (HttpServletResponse)response;
- req.setCharacterEncoding("UTF-8");
- resp.setContentType("text/html;charset=UTF-8");
- PrintWriter out = resp.getWriter();
- String comment = req.getParameter("comment");
- if(comment.indexOf("damn")!=-1){
- //有敏感词汇
- out.print("<h3>评论内容已关闭</h3>");
- }else{
- //没有敏感词汇则向后处理,交给其他过滤器或Servlet
- chain.doFilter(req, resp);
- }
- }
- /**
- * 容器启动之后,创建过滤器实例
- * 然后调用init方法,只会调用一次
- * 容器会将已经创建好的FilterConfig对象作为参数传入
- * 可以从该参数中获取初始化的配置信息
- */
- public void init(FilterConfig filterConfig) throws ServletException {
- illegalWord = filterConfig.getInitParameter("illegalWord");
- System.out.println("Filter1:init is runnming... " + illegalWord);
- }
- }
步骤四:配置CommentFilter过滤器
web.xml文件代码:
- <?xml version="1.0" encoding="UTF-8"?>
- <web-app version="2.5"
- xmlns="http://java.sun.com/xml/ns/javaee"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
- http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
- <display-name></display-name>
- <!-- 过滤器 -->
- <filter>
- <filter-name>filter1</filter-name>
- <filter-class>web.CommentFilter1</filter-class>
- </filter>
- <filter-mapping>
- <filter-name>filter1</filter-name>
- <url-pattern>/comment</url-pattern>
- </filter-mapping>
- <!-- Servlet -->
- <servlet>
- <servlet-name>CommentServlet</servlet-name>
- <servlet-class>web.CommentServlet</servlet-class>
- </servlet>
- <servlet-mapping>
- <servlet-name>CommentServlet</servlet-name>
- <url-pattern>/comment</url-pattern>
- </servlet-mapping>
- </web-app>
步骤五:部署应用,输入评论查看结果

filter 作用的更多相关文章
- spring security 4 filter 顺序及作用
Spring Security 有两个作用:认证和授权 一.Srping security 4 filter 别名及顺序 spring security 4 标准filter别名和顺序,因为经常要用就 ...
- Spring Security Filter详解
Spring Security Filter详解 汇总 Filter 作用 DelegatingFilterProxy Spring Security基于这个Filter建立拦截机制 Abstract ...
- .NET Core开发日志——Filter
ASP.NET Core MVC中的Filter作用是在请求处理管道的某些阶段之前或之后可以运行特定的代码. Filter特性在之前的ASP.NET MVC中已经出现,但过去只有Authorizati ...
- [JavaWeb] Servlet Filter
作用: Servlet 过滤器可以动态地拦截请求和响应,以变换或使用包含在请求或响应中的信息. 可以将一个或多个 Servlet 过滤器附加到一个 Servlet 或一组 Servlet.Servle ...
- java过滤器filter使用
一:filter:过滤器,拦截servlet的请求和响应. 1. package jd.com.filter; import javax.servlet.*; import java.io.IOExc ...
- ASP.NET MVC学习笔记-----Filter(2)
接上篇ASP.NET MVC学习笔记-----Filter(1) Action Filter Action Filter可以基于任何目的使用,它需要实现IActionFilter接口: public ...
- Java基础ArrayList、Servlet与Filter
一.技术分享 迭代器(Iterator) 迭代器是一种设计模式,它是一个对象,它可以遍历并选择序列中的对象,而开发人员不需要了解该序列的底层结构.迭代器通常被称为"轻量级"对象,因 ...
- map、filter、reduce函数的使用
1.filter() 作用:过滤 // 1.筛选出大于30的数. const array = [10, 20, 30, 40, 50, 60, 70, 80] // 普通写法 // let newar ...
- Vue--使用watch、computed、filter方法来监控
watch与computed.filter: watch:监控已有属性,一旦属性发生了改变就去自动调用对应的方法 computed:监控已有的属性,一旦属性的依赖发生了改变,就去自动调用对应的方法 f ...
随机推荐
- 如何更改Linux yum源?
centos下可以通过yum很方便快捷的安装所需的软件和库,如果yum的源不好,安装速度会非常慢,centos默认官方源似乎都是国外的,所以速度无法保证,我一直使用163的源,感觉速度不错.下面就说说 ...
- 简述null undefined NaN的异同
1. 类型类型分析: JS中数据类型有5种:string,number,boolean,undefined,object,前四种值类型(基础数据类型),object是引用类型 var a1; //un ...
- 1g免费空间永久使用
云邦互联免费空间(免备案,无广告) [1G免费全能空间,免备案,无广告] 1G全能空间 + 100M数据库(Mysql 5.5 / SQL Server 2005) 支持的脚本:ASP.PHP(5.2 ...
- CF1168A Increasing by Modulo
思路: 首先得做个转化,如果某个解法最终分别对a[i](i = 1, 2, ..., n)做了b[i](i = 1, 2, ..., n)次加1再取余的运算,那么可以等价地构造出x次(x = max( ...
- 【css】css2实现两列三列布局的方法
前言 对于 flex 弹性布局相信大家都有所了解,它是 css3 中的属性,然而它具有一定的兼容性问题.楼主前几天面试时遇到了面试官需要设计一个两列布局,我当然就说父元素 flex 吧哩吧啦,然而需要 ...
- Sqoop基础学习(1)
1. Sqoop的导入过程 在开始导入之前,Sqoop会通过JDBC来获得所需要的数据库元数据 1.导入表的列名.数据类型等: 2.接着这些数据库的数据类型(varchar.number等)会把映射成 ...
- Python3+Selenium3+webdriver学习笔记5(模拟常用键盘和鼠标事件)
#!/usr/bin/env python# -*- coding:utf-8 -*- from selenium import webdriverfrom selenium.webdriver.co ...
- MYSQL内置函数总结
时间转换为字符串: SELECT date_format(Date, '%Y-%m-%d %H:%i:%s' ) AS TimeFROMtable o convert函数转换为字符串的时候不存在类型为 ...
- Aho-Corasick自动机
在模式匹配问题中,如果模板有很多个,KMP算法就不太适合了.因为每次查找一个模板.都要遍历整个文本串.可不可以只遍历一次文本串呢?可以,方法是把所有模板组成一个大的状态转移图(称为$Aho-Coras ...
- 2018.4.15 Mac系统下如何使用StartUml画好需求分析的类图 (同样适用于windows)
Mac如何使用StartUml (同样适用于windows) 左侧边栏的英文含义及其用法 关联(Association) [关联关系]:是一种拥有的关系,它使一个类知道另一个类的属性和方法:如:老师与 ...