jsp之Filter和Listener

过滤器应实现Filter

并重写方法

package web;

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 LogFilter implements Filter {

    
    
    @Override
    public void destroy() {
        
        System.out.println("销毁LogFilter");
        
    }

    /*
     * tomact启动时会自动实例化Filter,
     * 然后调用其init()来初始化Filter.
     * 调用此方法时会传入config,该对象
     * 和Filter是一对一的关系,可以给Filter
     * 预置参数(web.xml).该对象和
     * ServletConfig用法完全一样.
     */
    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
        
        System.out.println("初始化LogFilter");
        
    }

    //该方法是处理公共业务的方法.
    //Filter相当于是Servlet们的管家,
    //tomcat在调用Servlet之前会将请求
    //提交给Filter,Filter有权让请求继续,
    //也有权让请求终止.
    //tomcat就是调用doFilter方法让Filter
    //统一处理请求的,调用前它会创建好
    //request和response并传入,创建的类型:
    //RequestFacade和ResponseFacade
    @Override
    public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain)
            throws IOException, ServletException {
        System.out.println("在前面记录日志");
        //请求继续,向下执行
        chain.doFilter(req, res);
        System.out.println("在后面记录日志");

    }

}

xml配置

 <filter>
      <filter-name>log</filter-name>
      <filter-class>web.LogFilter</filter-class>
  </filter>
  <filter-mapping>
      <filter-name>log</filter-name>
      <!-- 声明此Filter可以过滤哪些请求 -->
      <url-pattern>/*</url-pattern>
  </filter-mapping>

其中chain.doFilter(Request,Response);作用是继续进行请求

过滤器中亦可以预置参数

<init-param>
          <param-name>city</param-name>
          <param-value>北京</param-value>
      </init-param>

 

我们可以再写一个小例子

GuolvFilter.java

package web;

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 GuolvFilter implements Filter {

    @Override
    public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain)
            throws IOException, ServletException {
        System.out.println("ahead");
        chain.doFilter(req, res);
        System.out.println("after");

    }

    @Override
    public void init(FilterConfig cfg) throws ServletException {
        System.out.println(cfg.getInitParameter("city"));
    }

}

xml

 <filter>
      <filter-name>guolv</filter-name>
      <filter-class>web.GuolvFilter</filter-class>
      <init-param>
          <param-name>city</param-name>
          <param-value>北京</param-value>
      </init-param>
  </filter>
  <filter-mapping>
      <filter-name>guolv</filter-name>
      <!-- 声明此Filter可以过滤哪些请求 -->
      <url-pattern>/*</url-pattern>
  </filter-mapping>

Listener implements ServletRequestListener,ServletRequestAttributeListener

public void attributeAdded(ServletRequestAttributeEvent srae) 

public void attributeRemoved(ServletRequestAttributeEvent srae)

public void attributeReplaced(ServletRequestAttributeEvent srae)

//tomcat销毁request前自动调用此方法
@Override
public void requestDestroyed(ServletRequestEvent e)

//tomcat创建request后自动调用此方法
@Override
public void requestInitialized(ServletRequestEvent e)

MyListener.java

package web;

import javax.servlet.ServletRequestAttributeEvent;
import javax.servlet.ServletRequestAttributeListener;
import javax.servlet.ServletRequestEvent;
import javax.servlet.ServletRequestListener;

public class MyListener implements ServletRequestListener,ServletRequestAttributeListener {
    
    
    
    @Override
    public void attributeAdded(ServletRequestAttributeEvent srae) {
        System.out.println("向request内添加了一个值");
    }
    @Override
    public void attributeRemoved(ServletRequestAttributeEvent srae) {
        
    }
    @Override
    public void attributeReplaced(ServletRequestAttributeEvent srae) {
        
        
    }
    //tomcat销毁request前自动调用此方法
    @Override
    public void requestDestroyed(ServletRequestEvent e) {
        System.out.println("销毁request");
    }
    //tomcat创建request后自动调用此方法
    @Override
    public void requestInitialized(ServletRequestEvent e) {
        System.out.println("创建request");
        System.out.println(e.getServletRequest());
    }

}

xml

<listener>
      <listener-class>web.MyListener</listener-class>
  </listener>

 

posted @ 2020-05-13 22:05  two_q  阅读(135)  评论(0)    收藏  举报