关闭

Java Web开发----过滤器

标签: java web过滤器
208人阅读 评论(0) 收藏 举报
分类:

过滤器是一个服务端的组件,它可以截取用户端的请求与响应信息,并对这些信息过滤,过滤器的功能可以理解为对原有的服务代码进行增强达到校验,过滤等的效果,与拦截器很相似,博主私以为过滤器有点像AOP


一 工作原理

这里写图片描述


二 生命周期

这里写图片描述

  • 实例化是在Web容器启动时完成的,Web.xml配置形式如下:
<filter>
    <filter-name>LoginFilter</filter-name>
    <filter-class>filter.LoginFilter</filter-class>
    <init-param>
        <param-name>noFilterPath</param-name>
        <param-value>login.jsp;fail.jsp;LoginServlet</param-value>
    </init-param>
  </filter>
  <filter-mapping>
    <filter-name>LoginFilter</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping>
  • 初始化时可以通过init方法中的FilterConfig参数获得Web.xml文件中的配置信息
  • doFilter为过滤方法,在执行完过滤操作,需要放行(chain.doFilter(request, response);)或者拦截(可以是跳转到其他页面)

三 过滤器链

多个过滤器同时对某个请求访问进行过滤时,按照在Web.xml中定义的顺序来依次执行
这里写图片描述


四 过滤器分类

Servlet2 包括REQUEST,FORWARD,INCLUDE,ERROR
Servlet3 还有一个ASYNC
这里写图片描述


五 过滤器注解实现

除了在web.xml配置Filter外,还可以通过注解@WebFilter的方式实现,@WebFilter将一个类声明为过滤器,该注解会在部署时被容器处理,容器将根据具体的属性将相应的类部署为过滤器。


六 案例

案例1:登陆校验

public void doFilter(ServletRequest request0, ServletResponse response0, FilterChain chain) throws IOException, ServletException {
        // TODO Auto-generated method stub
        // place your code here
        HttpServletRequest request = (HttpServletRequest) request0;
        HttpServletResponse response = (HttpServletResponse) response0;
        HttpSession session = request.getSession();

        /*
         * 是以下方法的简单版
         */
        String noFilterPath = config.getInitParameter("noFilterPath");
        if(noFilterPath != null) {
            String[] paths = noFilterPath.split(",");
            for(String s : paths) {

                if(s == null || "".equals(s)) continue;
                if(request.getRequestURI().indexOf(s) != -1) {
                    chain.doFilter(request, response0);
                    return;
                }
            }
        }


        /*
         * 解决<url-pattern>/*</url-pattern>的重定向循环问题
         * 解决servlet被过滤
         */
        if(request.getRequestURI().indexOf("login.jsp") != -1 
                || request.getRequestURI().indexOf("LoginServlet") != -1) {
            chain.doFilter(request, response);
            return;
        }



        if(session.getAttribute("username") != null)
            chain.doFilter(request, response);
        else
            response.sendRedirect("login.jsp");

案例2:字符集校验

在Filter中添加一下代码即可

request.setCharacterEncoding("UTF-8");

但是在浏览器输入中文时,Eclipse控制台输出“& # 24352;& #19977;”这种Unicode,并没有转换为字符串,不知道什么原因?各位客官如果知道,还请不吝赐教,谢谢!

1
0
查看评论

Java乔晓松-使用Filter过滤器清除网页缓存

package www.csdn.dbshop.filter; import java.io.IOException; import javax.servlet.Filter; import javax.servlet.FilterChain; import javax.servlet.Fi...
  • qxs965266509
  • qxs965266509
  • 2013-04-25 11:49
  • 2013

JavaWeb中监听器+过滤器+拦截器区别、配置和实际应用

JavaWeb中监听器+过滤器+拦截器区别、配置和实际应用 1.前沿上一篇文章提到在web.xml中各个元素的执行顺序是这样的,context-param-->listener-->filter-->servlet; 而拦截器是在Spring MVC中配置的,如果从整个项目中看,...
  • Jintao_Ma
  • Jintao_Ma
  • 2016-10-30 19:51
  • 5190

过滤器、拦截器和监听器在javaWeb中应用的区别

最近在闲暇的时候,发现自己对过滤器和拦截器的应用不是很清楚。因此,对二者的区别仅应用场景做了下对比,在此做笔记以作知识积累。 拦截器,顾名思义是用来拦截的。也就是说拦截某一类或一个请求处理,在进行逻辑处理之前和处理之后做出相应的其他动作(附加的操作)。而过滤器是随着应用启动而生效的,所以一般做项目...
  • m765201832
  • m765201832
  • 2016-05-29 23:59
  • 1317

Java Web开发——Filter过滤器

Java Web开发——Filter过滤器 一、过滤器 1.1定义 过滤器是一个服务器端的组件,它可以截取用户端的请求与响应信息,并对这些信息进行过滤。 1.2工作原理 1、项目启动时,从Web容器中加载过滤器; 2、过滤器存在于用户请求和Web资源之间; 3、用户请求和Web响应之间...
  • xy_190261
  • xy_190261
  • 2016-06-03 14:42
  • 158

JavaWeb开发过滤器Filter

一,概念: Filter也称之为过滤器,它是Servlet技术中比较激动人心的技术,WEB开发人员通过Filter技术,对web服务器管理的所有web资源:例如Jsp, Servlet, 静态图片文件或静态 html 文件等进行拦截,从而实现一些特殊的功能。例如实现URL级别的权限访问控制、过滤敏...
  • gokeiryou263
  • gokeiryou263
  • 2013-08-28 16:23
  • 432

JAVAWEB开发中过滤器的概述及使用

1.什么是过滤器?        过滤器是向WEB应用程序的请求和响应添加功能的WEB服务组件 2.过滤器的作用      1)可以统一的集中处理请求和相应    ...
  • sinat_35598260
  • sinat_35598260
  • 2016-08-24 22:28
  • 1740

关于拦截器与过滤器使用场景、拦截器与过滤器的区别整理

关于拦截器与过滤器使用场景、区别整理
  • qq_36411874
  • qq_36411874
  • 2017-01-03 18:28
  • 4894

java中过滤器的使用

public final class EntranceFilter implements Filter { private static final String JSONP_CALLBACK = "callback"; private static final String...
  • zero_295813128
  • zero_295813128
  • 2016-05-31 14:01
  • 1318

Java三大器之过滤器(Filter)的工作原理和代码演示

一、Filter简介   Filter也称之为过滤器,它是Servlet技术中最激动人心的技术之一,WEB开发人员通过Filter技术,对web服务器管理的所有web资源:例如Jsp, Servlet, 静态图片文件或静态html文件等进行拦截,从而实现一些特殊的功能。例如实现URL级别的权限访...
  • reggergdsg
  • reggergdsg
  • 2016-10-15 10:14
  • 20587

Java流编程实例之五--Java过滤器概论

6. Java过滤器概论前面章节讲到的各种Java流,包括文件流、字节数组流、管道流等等被称之为原始流,它们提供了对某类数据的输入输出功能。为了在流处理的过程中简化和标准化某一类功能,例如缓冲、压缩、加密、摘要等,Java提供了一系列过滤器类,每组类提供了一种典型的信息处理功能。根据操作对象是字节还...
  • LogicTeamLeader
  • LogicTeamLeader
  • 2016-09-16 20:16
  • 1018