前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >java过滤器——filter的使用和配置

java过滤器——filter的使用和配置

作者头像
DannyHoo
发布于 2018-09-13 03:48:18
发布于 2018-09-13 03:48:18
1.1K00
代码可运行
举报
文章被收录于专栏:Danny的专栏Danny的专栏
运行总次数:0
代码可运行

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://cloud.tencent.com/developer/article/1337009

       在做DRP的过程中用到了filter。前几天昌哥和欢姐在小会议室向我们介绍了AOP的思想,用到filter时觉得它们两者特别相似。

       如下图:

       javaweb开发中,request和response是两个必不可少的对象,他们是在接收到每一次客户端请求后,由web服务器产生的。filter可以在request到达servlet之前和response即离开servlet时分别对它们进行处理。

       filter常常用于网站过滤敏感词汇、设置字符集、日志等比较“公共性”的事件处理中。

在我们正常的编程中,每一条线,都是从上到下依次调用,而filter是在每一个完整的调用中横着“切了一刀”。通过配置,它可以对任意代码路径进行过滤。

       这里以转码/设置字符集为例,简单了解一下如何使用filter。

       建立Filter

       CharsetEncodingFilter.java

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
package com.drp.filter;

import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;

/**采用filter统一处理filter
 * @author Danny
 *
 */
public class CharsetEncodingFilter implements Filter {

	@Override
	public void destroy() {}

	@Override
	public void doFilter(ServletRequest request, ServletResponse response,
			FilterChain chain) throws IOException, ServletException {
		System.out.println("CharsetEncodingFilter---->>>>Filter开始");
		request.setCharacterEncoding("utf-8");    //设置字符集
		chain.doFilter(request, response);    //继续执行
                System.out.println("CharsetEncodingFilter---->>>>Filter结束");
	}

	@Override
	public void init(FilterConfig config) throws ServletException {}

}

      此过滤器CharsetEncodingFilter实现了javax.servlet.Filter接口(任何filter过滤器也必须实现这个接口);在服务器创建此filter并进行初始化执行init方法时,读取配置文件并存入FilterConfigure的对象中;实现doFilter方法,在请求到达jsp之前将字符集编码设置为utf-8,chain.doFiler()方法的作用是在对request对象进行处理之后,跳转到被拦截的servlet继续执行,执行完之后还要回到此处,chain.doFilter()下面还可以对response对象进行处理。

       配置filter

       web.xml

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.0" 
	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_3_0.xsd">

  <filter>
  	<filter-name>CharsetEncodingFilter</filter-name>
  	<filter-class>com.drp.filter.CharsetEncodingFilter</filter-class>
  </filter>
  <filter-mapping><!-- 此filter对所有的jsp页面都有过滤效果 -->
  	<filter-name>CharsetEncodingFilter</filter-name>
  	<url-pattern>*.jsp</url-pattern>
  </filter-mapping>
</web-app>

       此处配置所起的作用是,此filter对所有的jsp页面都有设置字符集的效果,当每次访问jsp页面时,都会执行filter中的doFilter()方法,因此每次访问jsp页面前后,都可以在Console中看到doFilter方法输出的 “ CharsetEncodingFilter---->>>>Begin ” 和 “CharsetEncodingFilter---->>>>End ”。

       除此之外还有其他几种对filter作用域配置的方式:

       对所有的对象都有过滤效果

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<filter-mapping>
  	<filter-name>CharsetEncodingFilter</filter-name>
  	<url-pattern>/*</url-pattern>
</filter-mapping>

        对sysmgr下的所有对象都有过滤效果,无论是servlet还是jsp

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<filter-mapping>
  	<filter-name>CharsetEncodingFilter</filter-name>
  	<url-pattern>/sysmgr/*</url-pattern>
</filter-mapping>

         只对指定的servlet具有过滤效果

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<filter-mapping>
  	<filter-name>CharsetEncodingFilter</filter-name>
  	<url-pattern>/servlet/LoginServlet</url-pattern>
</filter-mapping>

      至此,无论访问哪个jsp页面,都会事先设置其字符集,不用分别对每个页面都进行设置了。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2015年06月28日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
JavaWeb(五)Filter过滤器
Filter过滤器 Fileter介绍 Filter也称之为过滤器,它是Servlet技术中最实用的技术,WEB开发人员通过Filter技术,对web服务器管理的所有web资源:例如Jsp, Servlet, 静态图片文件或静态 html 文件等进行拦截,从而实现一些特殊的功能。例如实现URL级别的权限访问控制、过滤敏感词汇、压缩响应信息等一些高级功能 Servlet API中提供了一个Filter接口,开发web应用时,如果编写的Java类实现了这个接口,则把这个java类称之为过滤器Filter。通过F
二十三年蝉
2018/02/28
1.1K0
JavaWeb(五)Filter过滤器
Java Web Servlet过滤器
  过滤器就是可以对浏览器向jsp,servlet,html等这些web资源发出请求和
Hongten
2018/09/13
6660
重温java web过滤器filter
Filter 技术是servlet 2.3 新增加的功能。Filter翻译过来的意思就是过滤器,能对客户端的消息进行预处理,然后将请求转发给其它的web组件,可以对ServletHttpRequest和ServletHttpResponse进行修改和检查。例如:在Filter中可以检查用户是否登录,对未登录的用户跳转到登陆界面。
好好学java
2018/09/21
1.4K0
重温java web过滤器filter
Servlet过滤器,Servlet过滤器创建和配置
第一:Servlet的过滤器的创建和配置,创建一个过滤器对象需要实现javax.servlet.Filter接口,同时实现Filter的3个方法。        第一方法是过滤器中的init()方法用
别先生
2017/12/29
9190
Servlet过滤器,Servlet过滤器创建和配置
Servlet总结四(过滤器)
文章目录 1. Servlet总结四(过滤器的使用) 1.1. 简介 1.2. 过滤器的实现 1.2.1. 重点 1.2.2. 简单的例子 1.2.3. 过滤器的设置 1.2.3.1. 注意 1.2.4. 初始参数的设置和获取 1.2.4.1. 设置初始值 1.2.4.2. 获取初始参数的值 1.2.5. 设置触发的时机 Servlet总结四(过滤器的使用) 简介 在容器调用Servlet的service()的方法钱,Servlet其实并不会知道有请求的到来,而在service()方法执行后,容器真正
爱撒谎的男孩
2019/12/31
3860
Java Web从入门到"改行"(3)--过滤器Filter
过滤器顾名思义就是位于中间层起到过滤作用的,用于拦截请求或响应信息。过滤器 (Filter)技术是在Servlet2.3新增的功能,过滤器并不是Servlet,而是位于请求与响应中间起过滤作用的程序。 Servlet API中提供了一个Filter接口,开发web应用时,如果编写的Java类实现了这个接口,则把这个java类称之为过滤器Filter。通过Filter技术,开发人员可以实现用户在访问某个目标资源之前,对访问的请求和响应进行拦截。简单说,就是可以实现web容器对某资源的访问前截获进行相关的处理,还可以在某资源向web容器返回响应前进行截获进行处理。
流川枫
2018/09/12
7750
Java Web从入门到"改行"(3)--过滤器Filter
Java 中的 Filter 过滤器详解
Filter也称之为过滤器,它是Servlet技术中最实用的技术,WEB开发人员通过Filter技术,对web服务器管理的所有web资源:例如Jsp, Servlet, 静态图片文件或静态 html 文件等进行拦截,从而实现一些特殊的功能。例如实现URL级别的权限访问控制、过滤敏感词汇、压缩响应信息等一些高级功能。
Java团长
2018/07/23
1.7K0
filter控制缓存WebCache
上篇文章简述了一下使用Filter对url进行控制,这篇文章说一下缓存的控制。当然了以此类推的可以得到filter还可以对其他的内容进行控制,比如以前写的《通过java filter设置字符集编码》。这次东西的实现所依靠的就是filter的特性,那么它有什么特性呢?
the5fire
2019/02/28
4270
JavaWeb-过滤器Filter学习(二)设置全站编码与设置页面缓存
以前我们设置servlet的request和response的编码需要在每个servlet都设置,如果Servlet很多,显得很麻烦,现在我们可以用过滤器很简单的实现这个功能。 还有页面缓存,如果我们的网页是静态的,图片和内容基本上很少变化或者不变化的,我们就可以告诉客户端这个页面你缓存多久~以达到节省流量的目的。
谙忆
2021/01/21
4580
JavaWeb-过滤器Filter学习(二)设置全站编码与设置页面缓存
Javaweb之Filter案例练习-项目全局编码过滤器
先创建一个叫GlobalFilter的web动态项目,把前面文章出现过的login.jsp复制过来,改成如下代码。
凯哥Java
2019/08/18
3880
Javaweb之Filter案例练习-项目全局编码过滤器
java过滤器Filter「建议收藏」
Servlet中的过滤器Filter是实现了javax.servlet.Filter接口的服务器端程序,主要的用途是过滤字符编码、做一些业务逻辑判断如是否有权限访问页面等。其工作原理是,只要你在web.xml文件配置好要拦截的客户端请求,它都会帮你拦截到请求,此时你就可以对请求或响应 (Request、Response)统一设置编码,简化操作;同时还可进行逻辑判断,如用户是否已经登陆、有没有权限访问该页面等等工作。它是随你的 web应用启动而启动的,只初始化一次,以后就可以拦截相关请求,只有当你的web应用停止或重新部署的时候才销毁,以下通过代码示例来了解它 的使用。
全栈程序员站长
2022/06/27
5290
JavaWeb-过滤器Filter学习(三)实现用户的自动登录与IP黑名单过滤
实现用户的自动登录: 解决方案: 设置一个全站拦截的过虑器。 在此过虑器中,读取用户带过来的Cookie信息,然后从中读取用户的用户名和密码,自动帮助用户登录。 即可实现自动登录功能。
谙忆
2021/01/21
1.1K0
JavaWeb-过滤器Filter学习(三)实现用户的自动登录与IP黑名单过滤
JavaWeb-过滤器Filter学习(四)敏感词过滤实例
思路很简单,我们这里的敏感词是直接先放进去的,实际项目中,肯定是存在数据库中。在Filter 过滤器中,我们先拿到用户提交的留言,如果出现了敏感词,我们就用*号来替换。
谙忆
2021/01/21
8610
JavaWeb-过滤器Filter学习(四)敏感词过滤实例
JSP开发过程遇到的中文乱码问题及解决方法
JSP开发过程遇到的中文乱码问题及解决方法 1.数据库编码不一致导致乱码 解决方法: 首先查看数据库编码,输入: show variables like "%char%"; 确认编码一致,如果不一致,可输入: SET character_set_client='utf8'; SET character_set_connection='utf8'; SET character_set_results='utf8'; 也可设置成gbk编码; 也可以在安装Mysql目录下修改my.ini文件 default-ch
用户1289394
2018/02/26
1.1K0
Jsp开发中遇到的中文乱码问题及解决方法
Jsp开发中遇到的中文乱码问题及解决方法 对于程序员来说,乱码问题真的很头疼,下面列举几种常见的乱码供大家学习参考。  1.数据库编码不一致导致乱码   解决方法:   首先查看数据库编码,输入: show variables like "%char%";   确认编码一致,如果不一致,可输入: SET character_set_client='utf8'; SET character_set_connection='utf8'; SET character_set_results='utf8';  
用户1289394
2018/02/26
1.4K0
29. Filter 过滤器 以及 Listener 监听器
从上图可以简单说明一下,Filter 过滤器就是用来拦截 请求 或者 响应 的。下面我们首先来写一个快速入门的案例,从代码的角度来认识一下。
Devops海洋的渔夫
2021/11/19
7230
29. Filter 过滤器 以及 Listener 监听器
JavaWeb-过滤器Filter学习(五)全站压缩
全站压缩,最大的好久就是帮客户端节省流量。 数据压缩,我们需要用到二个Java类,也就是java.util.zip 中的 类 GZIPOutputStream 此类为使用 GZIP 文件格式写入压缩数据实现流过滤器。
谙忆
2021/01/21
4660
JavaWeb-过滤器Filter学习(五)全站压缩
Java ---Filter过滤器
Single
2018/01/04
1.2K0
Java ---Filter过滤器
Filter过滤器
在一个比较复杂的Web应用程序中,通常都有很多URL映射,对应的,也会有多个Servlet来处理URL。
RainbowSea
2023/05/09
4090
java过滤器
RightFilter.class package edu.qdgxy.util; import javax.servlet.Filter; import javax.servlet.FilterConfig; import javax.servlet.ServletException; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; import javax.servlet.FilterChain; i
week
2018/08/27
7910
相关推荐
JavaWeb(五)Filter过滤器
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验