Servlet JSP 二重修炼:Filter过滤器

简介:

前言

好久没写博客了。哈哈~宝刀未老呀,操起笔来准备11.11华华丽丽的来一篇。都说温故知新,这句话绝对正确。按着人的记忆曲线,温故是巩固记忆力的好办法。就像我还是经常翻翻自己写的博客。回头来看看到的是新的东西。那就足够了。

image

从右到左:人生境界也

过滤器

其实拦截器我在 posted @ 2014-03-20 12:45 写过一篇:《⑧javaWeb之在例子中学习(过滤器Filter)》。会过头来看,发现里面讲的不太细粒。但是其中两个应用小例子是挺不错了。如果喜欢看例子的可以去看看。

什么是过滤器呢?

其 实过滤器(Filter)和Servlet很相似,都是java的组件。即请求发送servlet之前,可以用其截获和处理请求,也可以在serlvet 结束工作之后,在响应发回之前处理响应。因此,和上篇一样,过滤器filter是拦截请求,并对传给请求资源的ServletRequest 或 ServletResponse 进行处理的一个对象。如图:简单的描述其工作原理

image

 

过滤器做的事情

这是我们最希望做看到的事情,其实Filter可以当成一个插件组件。它的作用于request和response之间。

请求过滤器的作用:

  • 完成安全检查
  • 重新格式化请求首部或者体
  • 建立请求审计和日志

 

响应过滤器的作用:

  • 压缩相应流
  • 追加或者修改流
  • 创建一个完全不同的响应

 

案例代码解释

Servlet API中提供了一个Filter接口,开发应用时,如果编写的Java类实现了这个接口,则把这个java类称之为过滤器Filter。Filter的实 现类实现了一个J2EE的过滤器,过滤器的api允许访问ServletCOntext,同样可以链接到另一个Filter。

Filter类似于Servlet一个样,有一个生命周期。里面有:init(), destroy(),还有个核心方法:doFilter()。

  • init(FilterConfig):这是Filter的初始化方法,Servlet容器创建Filter实例后将调用这个方法。在这个方法中可以读取web.xml文件中Filter的初始化参数
  • doFilter(ServletRequest,ServletResponse,FilterChain): 这个方法完成实际的过滤操作,当客户请求访问于Filter关联的URL时,Servlet容器将先调用Filter的doFilter方法。 FilterChain参数用于访问后续Filters
  • destroy():  Servlet容器在销毁Filter实例前调用该方法,这个方法中可以释放Filter占用的资源

过滤器执行机制图:

 

此我们实现这个接口:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
public class DemoFilter implements Filter
{
     @Override
     public void init(FilterConfig filterConfig) throws ServletException
     {
     }
 
     @Override
     public void doFilter(ServletRequest request, ServletResponse response,
             FilterChain chain) throws IOException, ServletException
     {
         chain.doFilter(request, response);
     }
 
     @Override
     public void destroy()
     {
         //完成清理工作
     }
 
}

doFilter(ServletRequest request, ServletResponse response, FilterChain chain)

大家主要看看这个参数:ServletRequest /ServletResponse 。这个方法不取HTTP请求和相应对象做参数,而只是常规的ServletRequest /ServletResponse 对象。这里是对通用性的设计,过滤器的设计的要通用,如果过滤器用于一个非web应用,所以实现非Http接口。但不用担心的 是,ServletResponse 是HttpServletResponse的超类。

 

Filter的设计

从Filter执行机制图,我们可以体会到其设计很像一个东西---”栈“。可以从我书中摘录的一张图片体会:Filter3→Filter7→SerlvetA→Filter7→Filter3

image

 

后记

重读Filter的积累。

相关文章
|
1月前
|
Java
学校教师管理系统【JSP+Servlet+JavaBean】(Java课设)
学校教师管理系统【JSP+Servlet+JavaBean】(Java课设)
23 1
|
12天前
|
容器
Servlet 教程 之 Servlet 编写过滤器 7
Servlet教程讲解如何编写过滤器。在`web.xml`中,`<filter>`定义过滤器,`<filter-name>`和`<filter-class>`分别设定名称和类。`<init-param>`配置初始化参数。`<filter-mapping>`指定过滤器作用的资源,可通过`<servlet-name>`或`<url-pattern>`定义。`<dispatcher>`定义过滤器触发时机,如REQUEST、INCLUDE、FORWARD和ERROR,控制过滤器何时拦截资源调用。
10 0
|
13天前
|
设计模式 存储 前端开发
Java从入门到精通:2.2.1学习Java Web开发,了解Servlet和JSP技术,掌握MVC设计模式
Java从入门到精通:2.2.1学习Java Web开发,了解Servlet和JSP技术,掌握MVC设计模式
|
13天前
|
容器
Servlet 教程 之 Servlet 编写过滤器 6
该教程介绍了如何在Servlet中编写过滤器。可以创建多个过滤器,如AuthenFilter和LogFilter,并通过不同的映射进行配置。过滤器的应用顺序由web.xml中filter-mapping的顺序决定,可通过调整顺序改变过滤器执行的先后。
10 3
|
13天前
|
XML 数据格式
Servlet 教程 之 Servlet 编写过滤器 4
在Servlet教程中,学习如何编写过滤器。在`web.xml`配置文件中,创建一个名为`LogFilter`的过滤器,类为`com.baidu.test.LogFilter`,设置初始化参数`Site`为`百度`。将过滤器映射到`/*`,确保所有请求都会经过此过滤器。同时定义了一个名为`DisplayHeader`的Servlet,映射到`/TomcatTest/DisplayHeader`路径。
9 1
|
14天前
|
Java
Servlet 教程 之 Servlet 编写过滤器 3
`LogFilter` 是一个 Servlet 过滤器示例,它打印网站名称并传递请求至过滤链。当与 `DisplayHeader` Servlet(显示 HTTP 头信息)配合使用时,提供基础过滤器概念的理解。过滤器在请求处理前可添加额外功能或修改输入,而 `doGet` 方法则用于响应 GET 请求,展示请求头信息。
10 2
|
14天前
Servlet 教程 之 Servlet 编写过滤器 2
Servlet教程讲解如何编写过滤器。在Filter的`init`方法中,通过FilterConfig对象获取配置信息。例如,web.xml定义一个名为LogFilter的过滤器,关联参数Site为"百度"。在`init`方法内,可以使用`config.getInitParameter("Site")`获取到"网站名称:百度",实现过滤器的初始化设置。
7 0
|
14天前
|
Java 容器
Servlet 教程 之 Servlet 编写过滤器 2
Servlet过滤器教程:实现Filter接口,包含3个核心方法。1) doFilter用于实际过滤,处理匹配URL的请求,调用FilterChain处理后续过滤。2) init方法在应用启动时被调用,初始化filter,从FilterConfig获取配置信息。3) destroy方法在过滤器销毁前执行,释放资源。
16 2
|
15天前
|
XML Java 数据安全/隐私保护
Servlet 教程 之 Servlet 编写过滤器 1
Servlet过滤器用于动态拦截请求和响应,实现如身份验证、数据压缩、日志记录等多种功能。它们可附加于Servlet、JSP或HTML,按web.xml中配置的顺序执行。Web容器启动时会根据部署描述符创建过滤器实例。
13 2
|
1月前
|
Java
排课系统【JSP+Servlet+JavaBean】(Java课设)
排课系统【JSP+Servlet+JavaBean】(Java课设)
9 0