用户登录
用户注册

分享至

JSP详细篇——Servlet过滤器和监听器

  • 作者: 逗比男神你建哥
  • 来源: 51数据库
  • 2021-09-05

过滤器和监听器

Servlet过滤器是从Servlet2.3规范开始新增的功能,并在Servlet2.4规范中得到增强,监听器可以监听到Web应用程序启动和关闭。创建监听器需要实现响应的接口,并对其进行配置。

Servlet过滤器

1.什么是过滤器

Servlet过滤器与Servlet十分相似,但是它具有拦截客户端请求的功能。Servlet过滤器可以改变请求中的内容,来满足实际开发中的需要。对于程序开发人员来说,过滤器实质上就是在Web应用服务器上的一个Web应用组件,用于拦截客户端与目标资源之间的请求,并对这些请求进行过滤处理再发送给目标资源。

如果在一个Web应用中使用一个过滤器不能解决问题,可以部署多个过滤器对业务请求进行多次处理。这样就形成一个过滤器链,在Web容器处理过滤器链时,将按照过滤器的先后顺序对请求进行处理。

2.过滤器核心对象

过滤器对象放在javax.servlet包中,其名为Filter,它是一个接口,除了这个接口外,与过滤器相关的对象还有FilterConfig对象与FilterChain对象,这两个对象也同样是接口,为位于javax.servlet包中,分别为过滤器的配置对象和过滤器的传递工具。在实际开发过程中,定义过滤器只要直接或间接的实现Filter接口即可。而FilterChain和FilterConfig用于对过滤器的相关操作。

Filter接口

每一个过滤器都要直接或间接的实现Filter接口,在Filter接口中,定义了3个方法,分别为init(),doFilter(),destroy()。对应的方法说明如下:

方法声明

说明

public void init(FilterConfig filterConfig) throws ServlerException

过滤器初始化,该方法在过滤器初始化时调用

public void doFilter(ServletRequest request,ServletResponse response,FilterChain chain) throws IOException,ServletException

对请求进行过滤处理

public void destroy()

销毁方法,以便释放资源

FilterConfig接口

FilterConfig接口由Servlet容器进行实现,主要用于获取过滤器中的配置信息。其方法说明如下:

方法声明

说明

Public String getFilterName()

用于获取过滤器的名字

Public ServletContext getServletContext()

获取Servlet上下文

Public String getInitParameter(String name)

获取过滤器的初始化参数的值

Public Enumeration getInitParameterNames()

获取过滤器所有的初始化参数

FilterChain接口

FilterChain接口也是由Servlet容器实现的,在这个接口中只有一个方法,其方法声明为:public void doFilter(ServletRuquest request,ServletResponse response) throws IOException,ServletException

该方法用于将过滤后的请求传递给下一个过滤器,如果此过滤器已经是过滤器中的最后一个过滤器,那么,请求将传送给目标资源。

过滤器的创建与配置

创建也该过滤器需要实现javax.servlet.Filter接口,同时实现接口的3个方法。

范例:

package com.zgy.filter;

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;

public class MyFilter implements Filter {

@Override

public void destroy() {

// TODO Auto-generated method stub

}

@Override

public void doFilter(ServletRequest arg0, ServletResponse arg1,

FilterChain arg2) throws IOException, ServletException {

// TODO Auto-generated method stub

}

@Override

public void init(FilterConfig arg0) throws ServletException {

// TODO Auto-generated method stub

}

}

使用过滤器不一定要将请求传递到下一个过滤器,如果业务逻辑需要,也可以在过滤器处理完后,直接回应客户端

创建名称为MyServlet的过滤对象,其web.xml的配置如下:

MyFilter

com.zgy.filter.Myfilter

MyFilter

/MyFilter

标签用于声明过滤对象,在这个标签中必须配置两个元素,分别为过滤器名称与过滤器完整类名,其中用于定义过滤器的名称,用于指定过滤器的完整类名

标签用于创建过滤器的映射,它的主要作用就是指定Web应用中,哪些URL应该用哪个过滤器进行处理。在标签中,需要指定过滤的名称和过滤的URL映射,其中,用于定义过滤器的名称,用于指定过滤器应用的URL。

PS:标签中的可以是自定义的名称,标签中的是指定的已定义的过滤器名称,他需要与标签中的一一对应



软件
前端设计
程序设计
Java相关