监听器

package web;

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class FindCostServlet extends HttpServlet {

	@Override
	protected void service(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException {
		System.out.println("查询资费......");
		req.setAttribute("costs", "hello");
	}

	
}
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 {
	//声明成员变量接收配置文件里面的参数
	private String param;
	public void destroy() {
		
	}

	public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain)
			throws IOException, ServletException {
		System.out.println("web.xml文件中的数据为:"+param);
		System.out.println("在前面过滤敏感词");
		chain.doFilter(req, res);
		System.out.println("在后面过滤敏感词");
	}

	//一般在init()中接收参数,在diFilter()中使用该方法 声明成员变量来保存该数据
	public void init(FilterConfig cfg) throws ServletException {
		param = cfg.getInitParameter("city");
		System.out.println(param);
	}

}
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 {

	//关闭服务器时被调用一次
	public void destroy() {
		System.out.println("销毁LogFilter");
	}

	/**
	 * 该方法是处理公共业务的方法
	 * Filter类似于Servlet的管家
	 * tomcat在调用Servlet之前会将请求提交给Filter
	 * Filter有权利让请求继续也有权让请求终止
	 * tomcat就是调用doFilter方法让Filter统一处理请求
	 */
	public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain)
			throws IOException, ServletException {
		System.out.println("在前面记录日志");
		chain.doFilter(req, res);//请求继续,向后执行
		System.out.println("在后面记录日志");
	}

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

}
package web;

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

public class MyListener implements ServletRequestListener,ServletRequestAttributeListener {
	//监听对象的创建与销毁
	//tomcat销毁request前自动调用此方法
	public void requestDestroyed(ServletRequestEvent arg0) {
		System.out.println("销毁request");
	}

	//tomcat创建request后自动调用此方法
	public void requestInitialized(ServletRequestEvent e) {
		System.out.println("创建request");
		System.out.println(e.getServletRequest());
	}

	//监听对象数据的改变
	public void attributeAdded(ServletRequestAttributeEvent arg0) {
		System.out.println("向request里添加一个值");
	}

	public void attributeRemoved(ServletRequestAttributeEvent arg0) {
		
	}

	public void attributeReplaced(ServletRequestAttributeEvent arg0) {
		
	}

}
配置文件:
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" version="2.5">
  <display-name>jsp4</display-name>
  <welcome-file-list>
    <welcome-file>index.html</welcome-file>
    <welcome-file>index.htm</welcome-file>
    <welcome-file>index.jsp</welcome-file>
    <welcome-file>default.html</welcome-file>
    <welcome-file>default.htm</welcome-file>
    <welcome-file>default.jsp</welcome-file>
  </welcome-file-list>
  
  <servlet>
    <servlet-name>findCost</servlet-name>
    <servlet-class>web.FindCostServlet</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>findCost</servlet-name>
    <url-pattern>/findCost</url-pattern>
  </servlet-mapping>
  
  <servlet>
    <servlet-name>addCost</servlet-name>
    <servlet-class>web.AddCostServlet</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>addCost</servlet-name>
    <url-pattern>/addCost</url-pattern>
  </servlet-mapping>
  
  <!-- 配置过滤器 -->
  <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>
  
  <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>
    <url-pattern>/*</url-pattern>
  </filter-mapping>
  
  <!-- 监听器配置 -->
  <listener>
    <listener-class>web.MyListener</listener-class>
  </listener>
</web-app>

请求路径:localhost:8080/jsp4/findCost

输出结果为:

初始化LogFilter
北京

创建request
org.apache.catalina.connector.Request@10971f5
在前面记录日志
web.xml文件中的数据为:北京
在前面过滤敏感词
查询资费......
向request里添加一个值
在后面过滤敏感词
在后面记录日志
销毁request(请求响应结束后输出)

销毁LogFilter(退出tomcat后输出)






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

荒--

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

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

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

打赏作者

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

抵扣说明:

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

余额充值