一、什么是过滤器,为什么需要
在应用中,比如登录、浏览商品、加入购物车等等,有一些通用处理,比如存储用户的请求日志,对用户的权限进行拦截,等等,
如果在每个请求都重写一遍,非常费时,而且代码不可维护,此时我们就需要一个统一的处理,当进行上面的请求时,都会先经过一组处理,在进行特定的请求。这就是过滤器。
二、Servlet规范定义
javax.servlet.Filter 接口,不是在http包下,是一个不跟协议有关的组件
过滤器本身不生成任何ServletRequest对象和ServletResponse对象,它为组件提供如下的方法
(1)、过滤器在web组件被调用之前,检查ServetRequest对象,修改请求头和请求body,或者做一些预处理
(2)、过滤器在wbe组件被调用之后,检查ServletResponse对象,修改相应头和响应正文
如图所示:
(3)、多个过滤器串联在一起,可以协同过滤
(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/开头的请求,都会经过这个拦截。
三、小结
其实拦截器就是责任链模式,就是为了对公共的组件就行抽象化,统一处理。
相关推荐
java-servlet-连接mysql-数据库.docx java-servlet-连接mysql-数据库.docx java-servlet-连接mysql-数据库.docx java-servlet-连接mysql-数据库.docx java-servlet-连接mysql-数据库.docx java-servlet-连接mysql-...
java-web servlet 拦截器 过滤器使用 java-web servlet 拦截器 过滤器使用
javax.servlet-api-***.jar中文文档.zip,java,javax.servlet-api-***.jar,javax.servlet,javax.servlet-api,***,jar包,Maven,第三方jar包,组件,开源组件,第三方组件,Gradle,javax,servlet,api,中文API文档,手册,开发...
赠送jar包:jakarta.servlet-api-4.0.4.jar; 赠送原API文档:jakarta.servlet-api-4.0.4-javadoc.jar; 赠送源代码:jakarta.servlet-api-4.0.4-sources.jar; 赠送Maven依赖信息文件:jakarta.servlet-api-4.0.4....
javax.servlet-api-***.jar中文文档.zip,java,javax.servlet-api-***.jar,javax.servlet,javax.servlet-api,***,jar包,Maven,第三方jar包,组件,开源组件,第三方组件,Gradle,javax,servlet,api,中文API文档,手册,开发...
赠送jar包:javax.servlet-api-4.0.0.jar; 赠送原API文档:javax.servlet-api-4.0.0-javadoc.jar; 赠送源代码:javax.servlet-api-4.0.0-sources.jar; 赠送Maven依赖信息文件:javax.servlet-api-4.0.0.pom; ...
赠送jar包:javax.servlet-api-4.0.1.jar; 赠送原API文档:javax.servlet-api-4.0.1-javadoc.jar; 赠送源代码:javax.servlet-api-4.0.1-sources.jar; 赠送Maven依赖信息文件:javax.servlet-api-4.0.1.pom; ...
javax.servlet-api-3.1.0.jar,处理找不到servlet JAR的问题
赠送jar包:sentinel-web-servlet-1.8.0.jar; 赠送原API文档:sentinel-web-servlet-1.8.0-javadoc.jar; 赠送源代码:sentinel-web-servlet-1.8.0-sources.jar; 赠送Maven依赖信息文件:sentinel-web-servlet-...
java\Servlet技术--小例子.pdf,利用java设计serverlet程序
thrift 生成的java包servlet-api-2.5.jar
赠送jar包:javax.servlet-api-4.0.0.jar; 赠送原API文档:javax.servlet-api-4.0.0-javadoc.jar; 赠送源代码:javax.servlet-api-4.0.0-sources.jar; 赠送Maven依赖信息文件:javax.servlet-api-4.0.0.pom; ...
javax.servlet-api-***.jar中文文档.zip,java,javax.servlet-api-***.jar,javax.servlet,javax.servlet-api,***,jar包,Maven,第三方jar包,组件,开源组件,第三方组件,Gradle,javax,servlet,api,中文API文档,手册,开发...
赠送jar包:jersey-container-servlet-core-2.22.2.jar; 赠送原API文档:jersey-container-servlet-core-2.22.2-javadoc.jar; 赠送源代码:jersey-container-servlet-core-2.22.2-sources.jar; 赠送Maven依赖信息...
JAVA实战项目源码-计算机毕业设计java专业-JJavaBean-Servlet-jsp-网上购物系统 本系统在Windows 操作系统环境下,用Java作为开发工具,实现的主要功能有:图书类别信息,图书信息,留言板,后台管理等功能。本文...
赠送jar包:jakarta.servlet-api-4.0.4.jar; 赠送原API文档:jakarta.servlet-api-4.0.4-javadoc.jar; 赠送源代码:jakarta.servlet-api-4.0.4-sources.jar; 赠送Maven依赖信息文件:jakarta.servlet-api-4.0.4....
javax.servlet-api-***.jar中文文档.zip,java,javax.servlet-api-***.jar,javax.servlet,javax.servlet-api,***,jar包,Maven,第三方jar包,组件,开源组件,第三方组件,Gradle,javax,servlet,api,中文API文档,手册,开发...
javax.servlet.jsp-api-2.3.1.jar
servlet-api-3.0.jar