Filter(记录日志)

</pre><p></p><p></p><pre code_snippet_id="1932564" snippet_file_name="blog_20161017_1_8763027" name="code" class="java">package com.xxx.filter;

import java.io.IOException;

import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.annotation.WebFilter;
import javax.servlet.http.HttpServletRequest;

/**
 * FIlter
 * 
 * 在HttpServletRequest到达Servlet之前,拦截客户的HttpServletRequest,也可以修改HttpServletRequest头和数据
 * 在HttpServletResponse到达客户端之前,拦截HttpServletResponse,也可以修改HttpServletResponse的头和数据
 * 
 * FIlter的应用:
 * 检查用户请求的权限
 * 日志,记录用户请求记录
 * 负责解码的Filter 对飞标准的编码对的请求解码
 * 能改变XML内容的XSLT Filter等
 * 提取servlet相同的部分用filter处理,例如处理编码问题
 * 
 * 创建Filter:
 * 1、创建Filter处理类
 * 2、在web.xml文件配置filter或使用注解<span style="font-family: Arial, Helvetica, sans-serif;"> </span>
 */

@WebFilter(filterName="log",urlPatterns="/*")
public class LogFilter implements Filter {
	
	//filter配置信息
	private FilterConfig config;
	
	//Filter的初始化
	@Override
	public void init(FilterConfig config) throws ServletException {
		this.config=config;
	}

	//用于Filter销毁前完成某些资源的回收
	@Override
	public void destroy() {
		this.config=null;
	}

	//实现过滤
	@Override
	public void doFilter(ServletRequest request, ServletResponse response,
			FilterChain chain) throws IOException, ServletException {
		//获取ServletContext对象,用于记录日志
		ServletContext context=this.config.getServletContext();
		//开始过滤
		System.out.println("开始过滤");
		//将请求转换成HttpServletRequest请求
		HttpServletRequest hrequest=(HttpServletRequest) request;
		//输出提示信息
		System.out.println("Filter已经拦截到用户的请求地址"+hrequest.getServletPath());
		//链式处理,放行到目的地址
		chain.doFilter(request, response);
		System.out.println("过滤结束");
		System.out.println("请求被定为到"+hrequest.getRequestURI());
		
	}


}

配置web.xml文件

  <filter>
  	<filter-name>log</filter-name>
  	<filter-class>com.xxx.filter.LogFilter</filter-class>
  </filter>
  <filter-mapping>
  	<filter-name>log</filter-name>
  	<url-pattern>/*</url-pattern>
  </filter-mapping>

控制台输出

开始过滤
Filter已经拦截到用户的请求地址/testServlet
过滤结束
请求被定为到/test/testServlet



@WebFilter支持的常用属性
asyncSupported  不是必须   指定Filter是否支持异步操作模式。
dispatcherTypes 不是必须    指定该filter仅对那种dispatcher模式的请求进行过滤,该属性支持 ASYNC,ERROR,FORWARD ,INCLUDE,REQUEST这5个值得任意组合。默认值为同时过滤5中模式的请求
displayName  不是必须    指定Filter的显示名
filterName   必须  指定filter的名称
initParams 不是必须  用于为该filter配置参数
servletNames   不是必须   该属性值可以指定多个servlet的名称,用于指定该filter仅多着几个servlet执行过滤
urlPatterns/value 不是必须  这两个属性的作用完全相同,都指定该filter所拦截的URL





  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值