
Filter的入门
发布日期:2021-05-08 02:59:15
浏览次数:23
分类:精选文章
本文共 4370 字,大约阅读时间需要 14 分钟。
1.什么是Filter
- Filter称为过滤器,它是Servlet技术中最实用的技术,web开发人员通过Filter技术,
对web服务器所管理的资源(JSP,Servlet,静态图片或静态html文件)进行拦截
。 - 拦截以后要放行,不然啥都没有hh
2.入门案例
MyFilter类实现Filter接口:
public class MyFilter implements Filter{ @Override public void init(FilterConfig filterConfig) throws ServletException { } @Override public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { System.out.println("MyFilter执行了……"); //放行 chain.doFilter(request, response); } @Override public void destroy() { }}
Filter配置跟Servlet类同
MyFilter com.abc.filter.MyFilter MyFilter /*
3.什么是FilterChain
- FilterChain过滤器链:在一个web应用中,可以开发编写多个Filter,形成一个链。
- 顺序为web.xml文件中从上而下
4.Filter的生命周期
- 创建和销毁由web服务器负责,当它启动的时候就会创建一个Filter实例对象,并调用init方法进行初始化(只有一次)。
- 每次filter进行拦截的时候,都会执行doFilter方法。
- 关闭服务器会销毁Filter对象。
FilterConfig对象的作用
- 获取Filter程序在web.xml文件中的配置信息
public class MyFilter implements Filter{ @Override public void init(FilterConfig filterConfig) throws ServletException { // 过滤器的名字 String filterName = filterConfig.getFilterName();// 获取初始化参数 String username = filterConfig.getInitParameter("username"); String password = filterConfig.getInitParameter("password");// 获取所有初始化参数的名称 Enumerationnames = filterConfig.getInitParameterNames(); while(names.hasMoreElements()) { String name = names.nextElement(); String value = filterConfig.getInitParameter(name); System.out.println(name + " " + value); } } @Override public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { } @Override public void destroy() { }}
MyFilter com.abc.filter.MyFilter username leidaoge password abc MyFilter /*
5.过滤器的相关配置
*的配置* 完全路径匹配:/aaa /aa/bb* 目录匹配:/* /aa/* * 扩展名匹配:*.html,*.jsp* * 的配置* 专门以Servlet的配置的名称拦截Servlet* * 的配置* 默认:REQUEST 过滤器会拦截请求* FORWARD:转发* INCLUDE:页面包含的时候进行拦截* ERROR:页面出现全局错误跳转的时候拦截
6.通用字符集编码过滤器
- 目的:解决多个Servlet程序都要设置编码的繁琐
解决方法:增强request.getParameter()方法
增加一个类的方法
- 继承:必须要控制这个类的构造
- 造个类实现接口
继承包装类HttpServletRequestWrapper
package com.abc.filter;import java.io.UnsupportedEncodingException;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletRequestWrapper;public class CharacterRequest extends HttpServletRequestWrapper{ private HttpServletRequest request; public CharacterRequest(HttpServletRequest request) { super(request); this.request = request; } @Override //增强request.getParameter()方法: public String getParameter(String name) { //获得请求方式: String method = request.getMethod(); if("GET".equalsIgnoreCase(method)) { //get方式的请求 String value = super.getParameter(name); try { value = new String(value.getBytes("ISO-8859-1"),"UTF-8"); } catch (UnsupportedEncodingException e) { // TODO Auto-generated catch block e.printStackTrace(); } return value; }else if("POST".equalsIgnoreCase(method)) { //post方式的请求 try { request.setCharacterEncoding("UTF-8"); } catch (UnsupportedEncodingException e) { // TODO Auto-generated catch block e.printStackTrace(); } } return super.getParameter(name); }}
过滤器:
public class CharacterFilter implements Filter{ @Override public void init(FilterConfig filterConfig) throws ServletException { } @Override public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { //在过滤器中增强request对象,并将增强后的request对象传递给Servlet HttpServletRequest req = (HttpServletRequest)request; //增强req CharacterRequest add_req = new CharacterRequest(req); chain.doFilter(add_req, response); } private void destry() { }}
配置filter:
CharacterFilter com.abc.filter.CharacterFilter CharacterFilter /*
提交页面(测试):
用于获取当前工程路径pageContext.request.contextPath
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>Insert title here get提交方式
post提交方式
发表评论
最新留言
不错!
[***.144.177.141]2025年03月22日 17时36分47秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
CODING DevOps 代码质量实战系列最后一课,周四发车
2021-05-09
CODING DevOps 深度解析系列第二课报名倒计时!
2021-05-09
CODING DevOps 线下沙龙回顾二:SDK 测试最佳实践
2021-05-09
翻译:《实用的Python编程》03_01_Script
2021-05-09
数据结构第八节(图(下))
2021-05-09
基础篇:异步编程不会?我教你啊!CompletableFuture
2021-05-09
基于Mustache实现sql拼接
2021-05-09
气球游戏腾讯面试题滑动窗口解法
2021-05-09
POJ 2260 Error Correction 模拟 贪心 简单题
2021-05-09
POJ - 1328 Radar Installation 贪心
2021-05-09
CSUOJ Water Drinking
2021-05-09
自定义博客园博客的背景图片
2021-05-09
Spring MVC+javamail实现邮件发送
2021-05-09
Asp.NET Core 限流控制-AspNetCoreRateLimit
2021-05-09
gRPC在 ASP.NET Core 中应用学习(一)
2021-05-09
@SuppressWarnings 用法
2021-05-09
看完你就明白的锁系列之锁的状态
2021-05-09
看完这篇操作系统,和面试官扯皮就没问题了
2021-05-09
我的价值观
2021-05-09
真香!Linux 原来是这么管理内存的
2021-05-09