文档章节

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
粉丝 27
博文 89
码字总数 82446
作品 0
杭州
程序员
私信 提问
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
1K
0
JAVA WEB快速入门之从编写一个JSP WEB网站了解JSP WEB网站的基本结构、调试、部署

一、使用eclipse初始化一个JSP WEB项目(即:动态WEB项目),步骤如下: 如上图示注意选择TOMCAT版本 如上图示勾选生成web.xml,当然如果不勾选也行,但后续如果有需要用到配置的地方就需要再单...

编程SHA
04/20
17
0
关于在JSP中写入Java代码的困惑

说实话,刚学Java时就有人对我说,不要把Java代码写入jsp,说比方和美工合作之类的,人家看不懂啊等等理由.以后在做项目的时候我也确实老老实实的遵守这条规定,但是后来想想有的时候直接在jsp中做...

白起
2011/12/10
15.1K
8
Jsp 和 Servlet 有什么不同?

面试中被问到了 Jsp 和 Servlet 有什么不同?在这里总结分享下。 回答思路先分别进行基本介绍,然后分析说明两者相同点和不同点。 基本介绍 Servlet: Servlet 是一种服务器端的Java应用程序...

几个栗子
2018/08/22
127
3
如何成为一个优秀的JSP程序员

一个普通的错误是把JSP当作简化的Java,它不是,(事实上, JSP是简化的Servlet)程序员通常试着没有学习要求的支持技巧而直接学习JSP。JSP是一个衔接技术,并且成功地连接你需要理解的另外的...

五味格子
2011/05/11
31
0

没有更多内容

加载失败,请刷新页面

加载更多

SpringBoot-MVC RequestBody中LocalDateTime的自适应配置

请求的json报文中可能会出现 一下几种: ['2019-01-01','2019-01-01 12:03:34','20190101120334'] 但是接收的Request实体类日期字段是LocalDateTime类型 LocalDateTime applyDate; 希望的情况......

汉堡OSC
31分钟前
5
0
小招喵所在的国家正处于怪兽入侵的战场中,这个国家一共有n+1个城市

import java.util.Arrays; import java.util.Scanner; public class test3 { public static long max=0;public static void main(String[] args) { Scanner sc = new Scanner(System.i......

南桥北木
33分钟前
4
0
活动策划思维导图模板分享,怎样绘制思维导图操作方法介绍

对于一场活动的举办可以事先使用思维导图简略的将整个过程进行总结归纳使用,这样清晰的思维导图即利于工作的进行,也可以清晰明了了熟悉整个过程,下面是为大家分享的几款活动策划思维导图模...

干货趣分享
39分钟前
5
0
Android高级xml布局之输入框EditText设计

今天给大家介绍一下如何实现一款简约时尚的安卓登陆界面。大家先看一下效果图 当用户输入时动态出现删除按钮 现在先罗列一下技术点: 1.如何使用圆角输入框和按钮背景 2.如何实现“手机号”、...

shzwork
今天
4
0
RxJava进行单元测试的方式

@Test public void completeTask_retrievedTaskIsComplete() { // Given a new task in the persistent repository final Task newTask = new Task(TITLE, ""); ......

SuShine
今天
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部