Servlet的过滤器和监听器·笔记

Servlet过滤器

  • 顾名思义,过滤过滤,就是可以把一些我们不需要的东西过滤出去。Java代码也是这样。
  1. 什么是过滤器
    过滤器实质上是一个具有特定功能的Servlet。它具有拦截客户端请求的功能,并且根据需要能够改变请求中的内容,来满足实际开发的需要。过滤器可以有多个并可以按照顺序一一执行
  2. 过滤器的核心对象
    (1)Filter接口:每一个过滤器对象都要直接或间接实现Filter接口,在Filter中定义了三个方法分别是init()、doFilter()、destroy()方法
  • init()
  • doFilter()
  • destroy()
    (2)FilterConfig接口:该接口是由Servlet实现,主要用于获取过滤器中的配置信息。有如下方法
  • getFilterName():用于获取过滤器名字
  • getServletContext():用于获取上下文
  • getInitParameter(String name):获取过滤器的特定(name)的初始化参数
  • getInitParameterNames():获取过滤器的所有初始化参数
    (3)FilterChain接口:该方法只有一个方法doFilter()就是将请求自动传给下一个过滤器或客户端,如果到最后一个过滤器时会直接将资源传递到客户端
  1. 过滤器的创建与配置
    (1)过滤器的创建
    创建一个Filter对象要实现javax.servlet.Filter接口,同时实现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;
import javax.servlet.annotation.WebFilter;

/**
 * Servlet Filter implementation class file
 */
@WebFilter("/file")
public class file implements Filter {

    /**
     * Default constructor. 
     */
    public file() {
        // TODO Auto-generated constructor stub
    }

	/**
	 * @see Filter#destroy()
	 */
	public void destroy() {
		// TODO Auto-generated method stub
	}

	/**
	 * @see Filter#doFilter(ServletRequest, ServletResponse, FilterChain)
	 */
	public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
		// TODO Auto-generated method stub
		// place your code here

		// pass the request along the filter chain
		chain.doFilter(request, response);
	}

	/**
	 * @see Filter#init(FilterConfig)
	 */
	public void init(FilterConfig fConfig) throws ServletException {
		// TODO Auto-generated method stub
	}

}

(2)配置过滤器的web.xml。(下面两个选一个配置即可)例如

//1.在web.xml中配置
<!--过滤器声明-->
<filter>
 <filter-name>MyFilter</filter-name>    <!--过滤器的名称-->
 <filter-calss>com.MyFilter</filter-calss>   <!--过滤器的完整类名-->
 <init-param>
  <param-name>count</param-name>      <!--过滤器的初始化参数名-->
  <param-value>500</param-value>     <!--过滤器的初始化参数值-->
 </init-param>
</filter>
<filter-mapping>                    <!--过滤器的映射-->
 <filter-name>MyFilter</filter-name>     <!--过滤器的名称-->
 <url-pattern>/MyFilter</pattern>     <!--过滤器的URL映射-->
</filter-mapping>

//2.在类前配置@WebFilter("/映射地址")
@WebFilter("/file")
public class file implements Filter {
   ...
  1. 字符编码过滤器(实例)
@WebFilter("/file")
public class file implements Filter {
      String encoding=null;
    /**
     * Default constructor. 
     */
    public file() {
        // TODO Auto-generated constructor stub
    }

	/**
	 * @see Filter#destroy()
	 */
	public void destroy() {
		encoding=null;
	}

	/**
	 * @see Filter#doFilter(ServletRequest, ServletResponse, FilterChain)
	 */
	public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
		if(encoding!=null) {
		request.setCharacterEncoding(encoding);
		response.setContentType("text.html;charset="+encoding);
		}
		chain.doFilter(request, response);
	}

	/**
	 * @see Filter#init(FilterConfig)
	 */
	public void init(FilterConfig fConfig) throws ServletException {
		encoding =filterConfig.getInitParameter("encoding");
	}

}

Servlet监听器

  1. 监听器简介
  • 监听器的作用就是监听Web容器的有效事件,由容器管理。利用Listener接口监听在容器的某个执行程序,并根据其应用程序的需求做出适当响应
  1. Servlet监听器工作原理
  • Servlet监听器是当今Web应用开发的一个重要组成部分。它比较接近Java的GUI程序的监听器,可以监听由于Web应用中状态改变而引起的Servlet容器产生的响应事件,然后接受并处理这些事件

监听器的种类

监听器的种类分为8个小类,这8个小类又可以分为三个大类,即
一、监听Servlet上下文

  1. ServletContextListener接口
  • 主要监听ServletContext的创建和删除,它提供了下面的两个方法,也称做"Web应用程序的生命周期方法"
    (1)contexInitialized(ServlrtContextEvent event)方法:
    (2)contextDestroyed(ServlrtContextEvent event)方法:
  1. ServletAttributeListener接口
  • 主要监听ServletContext中属性的增加、删除以及修改,它提供了下面3个方法
    (1)attributeAdded(ServlrtContextAttributeEvent event)方法:
    (2)attributeReplaced(ServlrtContextAttributeEvent event)方法:
    (3)attributeRemoved(ServlrtContextAttributeEvent event)方法:
    二、 监听HTTP会话
  1. HttpSessionListener接口
  • 该接口用于监听HTTP会话的创建及销毁,它提供了下面的2个方法
    (1)sessionCreated(HttpSessionEvent event)方法:
    (2)sessionDestroyed(HttpSessionEvent event)方法:
  1. HttpSessionActivationListener接口
  2. HttpSessionAttributeListener接口
  3. HttpBindingListener接口
    三、监听Servlet请求
  4. ServletRequestListener接口
  • 用于监听请求的创建和载出
  1. ServletRequestAttributeListener接口
  • 用于监听请求范围中属性的变化

监听器实例

//你以为会有实例,其实没有!
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

代码小鬼

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值