关闭

Java学习日记3(过滤器)

标签: javaservlet
208人阅读 评论(0) 收藏 举报
分类:

过滤器

访问Servlet之前和之后,可以增加一些我们的业务程序,就是过滤器。
执行顺序:

过滤器Filter

如何实现Filter:

  1. 编写Filter类实现javax.servlet.Filter接口
  2. 配置Filter过滤哪些Servlet

在xml配置中,哪个Filter配置在前面就先执行哪个
Xml配置:

 <filter>
     <filter-name>logger</filter-name>
     <filter-class>com.oracle.LoggerFilter</filter-class>
  </filter>
  <filter-mapping>
      <filter-name>logger</filter-name>
      <url-pattern>/admin/*</url-pattern>//意思是过滤admin文件夹下所有的页面
  </filter-mapping>

也可以用Annotation配置,不过xml可以保证Filter的顺序。

@WebFilter("/admin/*")

一个简单的Filter:

package com.oracle;

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

    FilterConfig fc;
    @Override
    public void destroy() 
    {
        System.out.println("FirstFilter......destroy...........");

    }

    @Override
    public void doFilter(ServletRequest arg0, ServletResponse arg1,
            FilterChain arg2) throws IOException, ServletException {
        System.out.println("FirstFilter......dofilter...........");

        System.out.println("执行目标Servlet之前。。。。。。。。。。。。。。。。。");

        arg2.doFilter(arg0, arg1);//把当前请求响应交给下一个目标,这里执行下一个Filter或者是目标Servlet。

        System.out.println("执行目标Servlet之后。。。。。。。。。。。。。。。。。。");

    }

    @Override
    public void init(FilterConfig arg0) throws ServletException {
        System.out.println("FirstFilter......init...........");
    this.fc=arg0;

    }

}

再写另一个过滤器。。

package com.oracle;

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;
//@WebFilter("/admin/*")
public class LoggerFilter implements Filter {

    @Override
    public void destroy() {
        // TODO Auto-generated method stub

    }

    @Override
    public void doFilter(ServletRequest arg0, ServletResponse arg1,
            FilterChain arg2) throws IOException, ServletException 
    {
        System.out.println("Logger....前日志。。。。。。。");
        arg2.doFilter(arg0, arg1);

        System.out.println("Logger....后日志...........");

    }

    @Override
    public void init(FilterConfig arg0) throws ServletException {
        // TODO Auto-generated method stub

    }

}

在控制台的显示:

Logger....前日志。。。。。。。
FirstFilter......dofilter...........
执行目标Servlet之前。。。。。。。。。。。。。。。。。
HelloServlet.....service......
执行目标Servlet之后。。。。。。。。。。。。。。。。。。
Logger....后日志...........

如果想重写Request和Response中的方法,那么就可以继承以下4个包装类:

  • ServletRequestWrapper
  • ServletResponseWrapper
  • HttpServletRequestWrapper
  • HttpServletResponseWrapper

用过滤器我们可以实现:

  • 过滤IP
  • 图片防外链(只能从自己的网站上看到正确图片,从别的网站请求看到的是不同的图片)
  • 重写一个好看的404页面,对用户友善一些

这里就这些啦~

0
0
查看评论

RxJava 学习笔记(七) --- Filtering 过滤操作

Filter 只发射通过了谓词测试的数据项 OfType ofType是filter操作符的一个特殊形式它过滤一个Observable只返回指定类型的数据 Take 只发射开始的N项数据 TakeLast 只发射最后N个元素 TakeLastBuffer 将最...
  • urrjdg
  • urrjdg
  • 2016-07-12 15:51
  • 3608

今天写了第一个java类

<br />终于今天真的写Java代码了。写了三个类,用ksh调用的。<br />不过基本就是抄,嘿嘿。。。<br />在已有的project下新建package,新建class。把从别处copy来的代码改了改,很容易编译就过了。IDE真是很强大,哪里有问题,报错...
  • OnlyQi
  • OnlyQi
  • 2011-04-23 09:54
  • 519

学习日记-html5

已掌握:学习并使用过HTML, CSS, 但并不熟练,特别是css常用效果了解但对于不常用的能实现的效果不清晰,html的各种标签除常用部分,其他在使用时需要去查询. 今日学习:html5 发展,与过去相同与不同 1,(W3C)HTML1.0->HTML4.01->XHTML->...
  • trch1989
  • trch1989
  • 2017-02-06 16:50
  • 178

Java学习(过滤器,监听器,拦截器)

转自:http://blog.csdn.net/x_yp/article/details/6358630过滤器Servlet中的过滤器Filter是实现了javax.servlet.Filter接口的服务器端程序,主要的用途是过滤字符编码、做一些业务逻辑判断等。其工作原理是,只要你在web.xml文...
  • dotuian
  • dotuian
  • 2015-08-04 13:59
  • 1610

Java学习日志(1)

访问修饰符 源代码的文件名必须与公共类的名字相同,并用.java作为扩展名 JAVA严格区分大小写 方法即函数 根据JAVA语言规范,main方法必须声明为piblic  八种基本数据类型:四种整型,两种浮点类型,一种用于Unicode编码的字符单元的字符类型,一种用于表示真值的boole...
  • qq_19877049
  • qq_19877049
  • 2016-07-18 10:19
  • 364

linux学习日记!!

一,用户的理解 在系统中用户储存为若干字符串+若干个系统配置文件 联系到的配置文件: /etc/passwd        用户信息 /etc/shadow     ...
  • SjmMx1314aini
  • SjmMx1314aini
  • 2017-02-13 00:04
  • 142

JavaWeb的学习总结(三)— 过滤器(Filter)

一:Filter简介                        Filter:简称过滤器。顾名思义,从生活的角度说,过滤器就是在一项流程中加入一层滤纱,以达到控制的作用...
  • u012788601
  • u012788601
  • 2016-05-21 10:21
  • 980

2016年寒假学习日记

svn配置管理 mock server 创建测试服务 junit测试 eclipse 插件开发 osgi框架 java bean和oracle type:公司实现,type编程http://blog.csdn.net/indexman/article/details/8435426 java ann...
  • xdyzyh
  • xdyzyh
  • 2017-02-20 21:12
  • 177

java学习日记3

这几天学习java的笔记如下 无限循环结构 for(;;){} while(true){} 一般情况下,在无限循环内部要有程序终止的语句,使用break实现。若没有,那就是死循环 break在循环中表示结束当前循环 continue使用在循环结构中表示结束档次循环 关于break和...
  • wangyuecilang
  • wangyuecilang
  • 2015-09-01 16:24
  • 61

JavaWeb-过滤器Filter学习(一)Filter知识点

Filter简介 Filter也称之为过滤器,它是Servlet技术中最激动人心的技术,WEB开发人员通过Filter技术,对web服务器管理的所有web资源:例如Jsp, Servlet, 静态图片文件或静态 html 文件等进行拦截,从而实现一些特殊的功能。例如实现URL级别的权限访问控制、过滤...
  • qq_26525215
  • qq_26525215
  • 2016-08-18 11:12
  • 4274
    个人资料
    • 访问:3608次
    • 积分:207
    • 等级:
    • 排名:千里之外
    • 原创:17篇
    • 转载:0篇
    • 译文:0篇
    • 评论:3条
    文章分类
    文章存档