当前位置: 首页 > 编程日记 > 正文

java web三大组件之filter过滤器


过滤器是java web中相当重要的组成成分,是JavaWeb三大组件之一,它与Servlet很相似。不过过滤器有以下三条特性:

  • 过滤器是用来拦截请求的,而不是处理请求的。

  • 当用户请求某个Servlet时,会先执行部署在这个请求上的Filter,如果Filter“放行”,那么会继承执行用户请求的Servlet;如果Filter不“放行”,那么就不会执行用户请求的Servlet。

  • 其实可以这样理解,当用户请求某个Servlet时,Tomcat会去执行注册在这个请求上的Filter,然后是否“放行”由Filter来决定。可以理解为,Filter来决定是否调用Servlet!当执行完成Servlet的代码后,还会执行Filter后面的代码。

原理示意图如下
这里写图片描述

Filter开发经常有以下三个步骤:
1. 新建java类实现javax.servlet.Filter接口
2. 将新Filter实现类注册到web.xml
3. 设置url-partten,设置过滤链接

让我们以一个字符集过滤器为例,演示一下全过程
1, 新建java类实现javax.servlet.Filter接口

package common;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;import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;public class CharacterFilter implements Filter {private Log log = LogFactory.getLog(CharacterFilter.class);// 使用Log4j输出提示信息String encoding="UTF-8";public void init(FilterConfig filterConfig) throws ServletException {String config=filterConfig.getInitParameter("encoding");log.info("字符集过滤器初始化");if(config!=null&&!"".equals(config)){encoding=config;}}public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)throws IOException, ServletException {request.setCharacterEncoding(encoding);chain.doFilter(request, response);}public void destroy() {// TODO Auto-generated method stublog.info("字符集过滤器销毁");}}


2,将新Filter实现类注册到web.xml
3,设置url-partten,设置过滤链接
这里写图片描述

注册完成后,字符集过滤器就设置好了。

以上就是一个过滤器的实例,其他的过滤器都是类似的实现方法。
字符集通常的用途有:
统一全站字符编码。
登录验证。
字符过滤

相关文章:

Permission denied: make_sock: could not bind to address [::]:81 Apache 虚拟主机

想建立一个测试用的虚拟主机,遇到了这个问题: [rootlocalhost html]# service httpd start Starting httpd: httpd: Could not reliably determine the servers fully qualified domain name, using localhost.termwikidev for ServerName (13)Permissio…

E: GPG 错误:http://developer.download.nvidia.com Release: 下列签名无效: NODATA 1 NODATA 2...

参考链接:https://github.com/NVIDIA/nvidia-docker/issues/571 在安装CUDA的时候出现的问题,根本原因是各位都懂的地区局域网特色,我试了很多方法,结果还是Github上一个老铁提出的一个简单方法:修改/etc/apt/sources.…

spring 框架学习(一)

1、spring简介 Spring 是一个开源框架,是为了解决企业应用程序开发复杂性而创建的。框架的主要优势之一就是其分层架构,分层架构允许您选择使用哪一个组件,同时为 J2EE 应用程序开发提供集成的框架。Spring的一个最大的目的就是使JAVA EE开发…

Styling with the DataGridColumnStyle

详细讲解了如何自定义DataGrid控件,将多种控件(如:进度条、按钮、下拉框)绑定到数据列中 参考MSDNPart 1:http://msdn.microsoft.com/en-us/library/ms996449Part 2:http://msdn.microsoft.com/en-us/libra…

Excel常用公式记录

1.生成指定时间段内的日期: TEXT("2019/8/9 00:00"RAND()*54,"yyyy/mm/hh HH:MM") 注意:RAND()*54,54指从2019/8/9日起的54天,有时会有2019/8/00的错误格式 2.生成类似于“第一级”,“第二级”类似…

Delphi XE2 发布了,期待了很久的东西,开始学习中。

这个博客将记录我学习DELPHI XE2及开发相关应用程序的点点滴滴,因此该博客内容全部原创,我也不会转载和抄录别人的代码。为了让大家和我一同进步,所有示例都带源代码,你可以随时下载后进行调试运行。 Delphi--一个伴随我12年的开发…

基于libmad库的MP3解码简析

基于libmad库的MP3解码简析 MAD (libmad)是一个开源的高精度 MPEG 音频解码库,支持 MPEG-1(Layer I, Layer II 和 LayerIII(也就是 MP3)。LIBMAD 提供 24-bit 的 PCM 输出,完全是定点计算&#…

oracle数据库增加新字段

--Add/modify columns alter table 表名 add 字段名 类型; --------------------------------------------------------------------- --Add comments to the columns comment on column CE00.eec000 is xxx;转载于:https://www.cnblogs.com/yby120/p/9138801.html

list @size 验证_第33期:上海自来水来自海上,回文字符串验证!

我准备了 1000 本电子书和计算机各领域高清思维导图 100 张,关注后回复【资源】,即可获取!更可回复【内推】加入 BAT 内推群!01、题目示例见微知著,发现一组数据很有趣,分享给大家。leetcode 第一题通过次数…

安装apache的时候80端口被PID为4的系统进程所占用

由于工作中需要直接从MySQL后台读取数据,所以安装了PHPnow,装的过程中提示Apache安装失败,80端口被占用。 在cmd中输入netstat –ano命令,发现80端口被一个PID为4的服务所占用,打开任务管理器,发现PID为4的…

PHP根据时间戳返回星期几

为什么80%的码农都做不了架构师&#xff1f;>>> <?php /*** 根据时间戳返回星期几* param string $time 时间戳* return 星期几*/ function weekday($time) {if(is_numeric($time)){$weekday array(星期日,星期一,星期二,星期三,星期四,星期五,星期六);return…

FastCGI与php-fpm

FastCGI&#xff1a;为了兼顾IIS下PHP的效率和安全&#xff0c;微软给出了FastCGI的解决方案。同ISAPI原理有些类似&#xff0c;就是减少CGI初始化等前置操作的消耗。FastCGI可以让PHP的进程重复利用而不是每一个新的请求就重开一个进程。同时FastCGI也可以允许几个进程同时执行…

postmaster.c 中的 ListenAddresses

在 postmaster.c 中看到这种代码&#xff0c;从Java程序员的角度&#xff0c;看起来是很不爽的: char *ListenAddresses; ...if (ListenAddresses){ char *rawstring; List *elemlist; ListCell *l; ... 到底何…

PHPCMS V9 杂记一

PHPCMS V9加载顺序 PHPCMS V9和V8相比&#xff0c;总体思路方向是一样&#xff0c;不同的是V9把OOP和MVC结合得更加完美。 打开根目录下面的index.php 三行代码&#xff0c;相比V8的 index.php来说 更加清楚&#xff0c; phpcms下面的base.php文件&#xff0c;是一个基础类&…

esp32 camera_利用Phyphox和ESP32蓝牙制作欧姆表测电阻

近日&#xff0c;微主在利用Phyphox和ESP32蓝牙研究热敏电阻的阻值与温度的关系时&#xff0c;需要绘制热敏电阻阻值与时间的关系图像&#xff0c;通过用手捏住或者放开热敏电阻&#xff0c;观察电阻与时间关系图像的变化情况&#xff0c;进而了解温度对热敏电阻的影响。将热敏…

linux tomcat集群配置笔记

趁最后一天假期,配置linux环境下的apache集群,巩固下,免的以后用到又忘记,网上东拼息凑,环境弄好后,整到blog,以便以后用到。 参考来源&#xff1a;http://www.linuxidc.com/Linux/2011-03/32859.htm 我用的版本&#xff1a; httpd-2.2.21.tar.gz apache-tomcat-6.0.32.tar.gz …

spring -- 自定义注解

我们直接通过代码解释自定义注解的使用及各个含义 package com.sysware.cloud.dts.annotation;import java.lang.annotation.*;Retention(RetentionPolicy.RUNTIME) Target({ElementType.METHOD}) Inherited Documented public interface DtTransactional {/** Whether need to…

angular 字符串转换成数字_蓝盟IT外包,Python算法的一般技术和嵌入式库|python|字符串|key|算法|调用...

近年来&#xff0c;随着python着火&#xff0c;python也开始受到很多程序员的喜爱。 很多程序员已经开始使用python作为第一语言。最近在python上刷问题时&#xff0c;我想去找python的刷问题常用库api和刷问题技术。 和c的STL库文档一样&#xff0c;但很遗憾没有找到。 因此&a…

Mapping Persistence Classes 笔记2---ValueType的形式和映射

2010年5月17日 简介&#xff1a; 前面的笔记着重讲解了实体类以及其class-mapping options&#xff0c;本章笔记将关注值类型的形式以及其OR映射选项。 值类型一般可分为两类&#xff1a;JDK类型和用户自定义类型。本章首先从实体类的使用JDK类型的properties开始&#xff0c;讲…

安装wampserver及配置php,phpmyadmin遇到的问题及解决方法

wampserver 安装好以后&#xff0c;打开&#xff0c;发现appache无法启动&#xff0c;查了一下&#xff0c;发现是前安装过iis&#xff0c;iis使用80端口&#xff0c;打开httpd.conf&#xff0c;把里面所有的80都改成了81&#xff0c;然后appache就可以正常启动了。 再配置wamp…

as一种模拟输入效果

这个小程序展现的是一种模拟输入的效果&#xff0c;比如你在键盘上随便输入什么&#xff0c;在屏幕上就会依次的显示“这句话不是我输入的&#xff0c;呵呵”。比较有意思。 var s:Sprite new Sprite; var t:TextField new TextField(); var i:Number0; var myText:String&qu…

signature验证/salt验证/token验证的作用

1.salt验证: salt是随机生成的一串字符,salt验证的作用是将生成的salt与加密的密码密文拼接后再次加密存储 这样可以是存储在数据库中的密码更加安全 2.signature验证: I、将token, timestamp, nonce, encrypt的内容按照大小字母顺序排列 II、按顺序将列表中排序号的内容拼接成…

算法导论课后习题解析 第四章 上

4.1-1 返回只包含绝对值最小的元素的子数组。 4.1-2 Maximun-Subarray(A)max -infinityfor i 1 to A.lengthsum 0for j i to A.lengthsum sum A[i]if sum > maxmax sumlow ihigh jreturn (low, high, max)每次内循环都利用上次累加的结果&#xff0c;避免重复运算…

win10商店打不开_科技资讯:Win10系统电脑的应用商店老是打不开还闪退怎么办

最近关于Win10系统电脑的应用商店老是打不开还闪退怎么办在网上的热度是非常高的&#xff0c;很多网友们也都是非常关注Win10系统电脑的应用商店老是打不开还闪退怎么办这个事情&#xff0c;为此小编也是在网上进行了一番搜索查阅相关的信息&#xff0c;那么如果说有感兴趣的网…

[原]tornado源码分析系列(三)[网络层 IOLoop类]

引言&#xff1a;由于都是在工作当中抽出时间看源代码&#xff0c;所以更新速度比较慢&#xff0c;但是还是希望通过对好的源码的分析和探讨&#xff0c;大家相互学习&#xff0c;发现不好的地方共同讨论。 上次讲了IOLoop中的几个重要的方法&#xff0c;inistance() 和 add_ha…

参悟JavaScript

引子 编程世界里只存在两种基本元素&#xff0c;一个是数据&#xff0c;一个是代码。编程世界就是在数据和代码千丝万缕的纠缠中呈现出无限的生机和活力。 数据天生就是文静的&#xff0c;总想保持自己固有的本色&#xff1b;而代码却天生活泼&#xff0c;总想改变这个世…

SQL数据库无法附加 系统表损坏修复 数据库中病毒解密恢复

SQL数据库无法附加 系统表损坏修复 数据库中病毒解密恢复 开发此工具是为了 让手工恢复数据库物理故障时 更加简单便捷直观, 本工具用于物理修复独立处理大部分问题以及与DBCC配合完成修复各种数据库错误.特别是针对大型数据库上百G 上TB数据库&#xff0c;节约大量时间精力。 …

ODP.NET调用存储需要使用事务

今天发生在用ODP.NET调整一个存储过程时发生了两个奇怪的错误。 ORA-08103: object no longer exists ora-01410: invalid rowid网上都说是索引块有错误什么的&#xff0c;我索引也重建&#xff0c;表也重建了&#xff0c;但还是不行。 奇怪的是我直接测试存储过程是有结果的。…

HDU-1698-Just a Hook

HDU-1698-Just a Hook http://acm.hdu.edu.cn/showproblem.php?pid1698 还是成段更新线段树 #include<stdio.h> #include<string.h> #include<stdlib.h> #define N 100005 struct cam {int x;int y;int sum;int val; }list[N*4]; void build(int k,int x,in…

sketchup 255个su常用插件)_SketchUp领域的知乎,有胆来问!

你知道知乎、豆瓣、果壳……但你可能不知道【问吧】这是一个 SketchUp 领域的知乎(点击文末“阅读原文”可直接进入【问吧】)你可以找到关于 SketchUp 的任何话题&#xff1a;SketchUp、Vray、建模、插件、曲面、SUAPP、组件、导入、材质、渲染、导出、贴图、材质、错误报告、L…