文档章节

java servlet拾遗(5)-过滤器

haoran_10
 haoran_10
发布于 2016/07/15 16:36
字数 484
阅读 12
收藏 1

一、什么是过滤器,为什么需要

    在应用中,比如登录、浏览商品、加入购物车等等,有一些通用处理,比如存储用户的请求日志,对用户的权限进行拦截,等等,

如果在每个请求都重写一遍,非常费时,而且代码不可维护,此时我们就需要一个统一的处理,当进行上面的请求时,都会先经过一组处理,在进行特定的请求。这就是过滤器。

 

二、Servlet规范定义

    javax.servlet.Filter 接口,不是在http包下,是一个不跟协议有关的组件

过滤器本身不生成任何ServletRequest对象和ServletResponse对象,它为组件提供如下的方法    

(1)、过滤器在web组件被调用之前,检查ServetRequest对象,修改请求头和请求body,或者做一些预处理

(2)、过滤器在wbe组件被调用之后,检查ServletResponse对象,修改相应头和响应正文

如图所示:

  (3)、多个过滤器串联在一起,可以协同过滤

如图所示 :



  (4)、使用的时候,要定义好过滤的规则,如下(基于注解形式)

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 javax.servlet.annotation.WebFilter;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@WebFilter(urlPatterns="/api/order/*")
public class MyFilter implements Filter {
	
	public void doFilter(ServletRequest req, ServletResponse res,FilterChain filter) throws IOException, ServletException {
		HttpServletRequest request = (HttpServletRequest) req;//一般发布为http应用,可以直接转换为HttpServletRequest
		HttpServletResponse response = (HttpServletResponse) res;//一般发布为http应用,可以直接转换为HttpServletResponse
		
		//TODO 前置预处理1
		
		filter.doFilter(request, response);
		
		//TODO 后置处理
	}
	
	@Override
	public void init(FilterConfig config) throws ServletException {
		//做一些启动配置
	}
	@Override
	public void destroy() {
		//做一些容器销毁时垃圾回收
	}
}

  如果是 /api/order/开头的请求,都会经过这个拦截。

 

三、小结

其实拦截器就是责任链模式,就是为了对公共的组件就行抽象化,统一处理。

© 著作权归作者所有

共有 人打赏支持
haoran_10
粉丝 25
博文 88
码字总数 80846
作品 0
杭州
程序员
私信 提问
servlet_抛开框架,还原本质

servlet是什么? 百度百科解释一堆: servlet 是在服务器上运行的小程序。这个词是在 Java applet 的环境中创造的 看着有点绕,个人认为servlet是java对rfc2616协议的封装,既是http协议的j...

skanda
2015/03/11
0
3
Apache Tomcat8必备知识

一、Apache Tomcat 8介绍 Apache Tomcat 8支持Java EE 7规范,包括Java Servlet 3.1、JSP 2.3、Java统一表达式语言EL 3.0等。 我们可以来看看Tomcat最近几个版本分别支持的JavaEE规范。 --...

山海经
2014/05/01
0
0
学习学习servlet过滤器(javax.servlet.Filter)

学习学习servlet过滤器(javax.servlet.Filter) 一、过滤器 Servlet过滤器Fileter是一个小型的web组件,它们通过拦截请求和响应,以便查看、提取或以某种方式操作客户端和服务器之间交换的数...

Qiu_CJ
07/13
0
0
Java EE部分核心技术简介

EJB — JavaEE的基石: 1、 EJB (Enterprise JavaBeans) : 一个Java服务器端组件开发的规范,定义了一个用来开发面向对象分布式应用组件的标准方法,软件厂商根据它来实现EJB服务器。 Java...

顶层设计
2012/08/03
0
0
9.java web的发展 javaweb是什么 J2EE发展历史 规范 J2EE是什么 发展背景 组件标准 J2EE好处作用 Servlet 含义 本质 发展 java在web中的发展 servlet工作流程 java 开发web项目发展 javaBean jsp

javaweb 本质上来说就是使用java 语言来解决企业web应用中一系列技术体系与规范; jdk1.2 playground 此版本中把java技术体系拆分为三个方向 J2SE J2EE J2ME 这个大家都知道 其中之一的J2EE,...

noteless
06/29
0
0

没有更多内容

加载失败,请刷新页面

加载更多

axios 请求格式

默认是application/json 这里提交的参数变成了json格式 原先的应该是这样子的 Form Data 里面的不一样 解决方法:https://github.com/axios/axios#browser...

大灰狼wow
16分钟前
0
0
TableStore轻松实现轨迹管理与地理围栏

一、方案背景 轨迹管理系统日常生活中使用非常普遍,如外卖派送轨迹、快递物流流转、车辆定位轨迹等。该场景与地理位置管理类似,核心点与瓶颈都在数据库的存储性能与查询能力,同时需要时间...

阿里云官方博客
32分钟前
1
0
WiFiMesh-ESP8266

Arduino Library for creating a mesh network with ESP8266 WiFi chips

whoisliang
39分钟前
0
0
并行执行器

工作中出现某些代码需要并行执行以提高程序运算速度的情况,所以写了一个小工具。 public class Main {public static void main(String[] args) {// 你可以通过注释下面的部分代码来探索...

wanxiangming
今天
2
0
Microsoft Remote Desktop For Mac

地址:https://rink.hockeyapp.net/apps/5e0c144289a51fca2d3bfa39ce7f2b06/ 解决国内App store不能下载的问题。

Cheuker
今天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部