package sanglp.servlet;

 import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import javax.servlet.http.HttpServletRequest;
import java.io.IOException; /**
* Created by Administrator on 2016/10/5.
*/
@WebFilter(filterName = "log", urlPatterns={"/*"} )
public class LogFilter implements Filter { //用于访问Filter的配置信息
private FilterConfig config; @Override
public void init(FilterConfig filterConfig) throws ServletException {
this.config=filterConfig;
} @Override
public void destroy() {
this.config=null;
} @Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
//对于用户请求进行预处理
//获取ServletContext对象 用于记录日志
ServletContext context=this.config.getServletContext();
long before=System.currentTimeMillis();
System.out.println("开始过滤");
//将请求转换成HttpServletRequest
HttpServletRequest hrequest=(HttpServletRequest) servletRequest;
//输出提示信息
System.out.println("Filter已经截获到用户的请求的地址"+hrequest.getServletPath());
//Filter只是链式处理,请求依然放到目的地址
filterChain.doFilter(servletRequest, servletResponse);
//响应执行后处理
long after=System.currentTimeMillis();
System.out.println("过滤结束");
System.out.println("请求被定位到"+hrequest.getRequestURI()+"所花的时间为:"+(after-before));
}
}

Filter:用于处理对用户请求进行预处理,也可以对HttpServletResponse进行后处理,是个典型的处理链。
使用Filter完整的流程是:Filter对用户请求进行预处理,接着将请求交给Servlet进行处理并生成响应,最后Filter再对服务器响应进行后处理,
Filter用处:
在HttpServletRequest到达Servlet之前,拦截客户的HttpServletRequest
根据需要检查HttpServletRequest,也可以修改HttpServletRequest头和数据
在HttpServletResponse到达客户端之前,拦截HttpServletResponse
根据需要检查HttpServletResponse,也可以修改HttpServletResponse头和数据
Filter有如下几个种类:
用户授权的Filter:Filter负责检查用户请求,根据请求过滤用户非法请求
日志Filter:详细记录某些特殊的用户请求
负责解码的Filter:包括对非标准编码的请求解码
能改变XML内容的XSLT Filter等
Filter可拦截多个请求或响应,一个请求或响应也可以被多个Filter拦截
创建一个Filter:
创建Filter处理类,->实现javax.servlet.Filter借口
web.xml文件中配置Filter

【JavaEE企业应用实战学习记录】logFilter的更多相关文章

  1. 【JavaEE企业应用实战学习记录】optiontransferselect实现两个列表选择框

    <%@ page contentType="text/html; charset=GBK" language="java"%> <%@tagl ...

  2. 【JavaEE企业应用实战学习记录】struts2实现登录并获取各个范围的数据

    package sanglp; import com.opensymphony.xwork2.*; /** * Created by Administrator on 2016/10/6. */ pu ...

  3. 【JavaEE企业应用实战学习记录】struts配置文件详细解析

    <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE struts PUBLIC "-/ ...

  4. 【JavaEE企业应用实战学习记录】struts2登录

    <%-- login.jsp Created by IntelliJ IDEA. User: Administrator Date: 2016/10/6 Time: 16:26 To chang ...

  5. 【JavaEE企业应用实战学习记录】struts国际化

    <%-- Created by IntelliJ IDEA. User: Administrator Date: 2016/10/6 Time: 16:26 To change this tem ...

  6. 【JavaEE企业应用实战学习记录】servlet3.0上传文件

    <%-- Created by IntelliJ IDEA. User: Administrator Date: 2016/10/6 Time: 14:20 To change this tem ...

  7. 【JavaEE企业应用实战学习记录】sessionListener

    package sanglp.servlet; import javax.servlet.ServletContext; import javax.servlet.annotation.WebList ...

  8. 【JavaEE企业应用实战学习记录】requestListener

    package sanglp.servlet; import javax.servlet.*; import javax.servlet.annotation.WebListener; import ...

  9. 【JavaEE企业应用实战学习记录】MyGetAttributeListener

    package sanglp.servlet; import javax.servlet.ServletContext; import javax.servlet.ServletContextAttr ...

随机推荐

  1. docker-5 docker仓库

    docker部署环境:CentOS release 6.5 (Final) Docker配置文件:/etc/sysconfig/docker  重要参数解释: -H 表示Docker Daemon绑定 ...

  2. CoCreateInstance调用COM接口伪流程

    在编写组件程序时,经常会使用CoCreateInstance直接取COM组件的接口,非常方便,那CoCreateInstance到底干了些什么事呢?1.CoCreateInstance取COM组件的接 ...

  3. HDU1502/Luogu1352/UVa1220 party[树形DP]

    题目描述 某大学有N个职员,编号为1~N.他们之间有从属关系,也就是说他们的关系就像一棵以校长为根的树,父结点就是子结点的直接上司.现在有个周年庆宴会,宴会每邀请来一个职员都会增加一定的快乐指数Ri, ...

  4. [No000011]Ruby之attr_reader,attr_writer,attr_accessor理解&用法

    (Ruby/Python/Perl) Ruby 语言与Python和Perl的一个很大区别,在于Ruby中,所有的实例变量都是在类中完全私有的,只能通过accessor 方法来进行变量访问,引用一段代 ...

  5. [No00000D]word如何批量删除超链接 怎么去掉网址保留文字

    1.删除超链接的文字及网址 这种情况是想把带有网址的文字统统删掉,文字和网址一概不留. 首先在word界面按下ALT+F9(在所有的域代码及其结果间进行切换.),超链接文本会被转换成代码的样式. 例如 ...

  6. 开源框架】Android之史上最全最简单最有用的第三方开源库收集整理,有助于快速开发

    [原][开源框架]Android之史上最全最简单最有用的第三方开源库收集整理,有助于快速开发,欢迎各位... 时间 2015-01-05 10:08:18 我是程序猿,我为自己代言 原文  http: ...

  7. 第七课——iOS数据持久化

    今天我们要学习plist.Preference.NSKeyedArchiver.Sqlite.CoreData(属性列表.偏好设置.归档.数据库.模型化对象). 首先plist就是将某些特定类,通过X ...

  8. 十步完全理解SQL

    转载于:http://blog.jobbole.com/55086/ 很多程序员视 SQL 为洪水猛兽.SQL 是一种为数不多的声明性语言,它的运行方式完全不同于我们所熟知的命令行语言.面向对象的程序 ...

  9. linux运维中的命令梳理(四)

    ----------管理命令---------- ps命令:查看进程 要对系统中进程进行监测控制,查看状态,内存,CPU的使用情况,使用命令:/bin/ps (1) ps :是显示瞬间进程的状态,并不 ...

  10. Tstringlist分割字符串的用法?

    TStrings是一个抽象类,在实际开发中,是除了基本类型外,应用得最多的. 常规的用法大家都知道,现在来讨论它的一些高级的用法. 1.CommaText 2.Delimiter &Delim ...