javaweb中的过滤器学习总结(1)---myeclipse下的第一个Filter

1、 什么是过滤器?

过滤器是一个服务器端的组件,可以截取用户端的请求与响应信息,并对这些信息过滤。
过滤源—>过滤规则 ->过滤结果

Filter原理

举个例子来看:
我们有时候会在某些网站上去浏览某些内容,比如有的网址要求必须登录才可以去浏览此网站上的视频内容,这就是开发人员在后台写的过滤器的作用。在用户请求某些页面时,启用一个过滤器来对某些信息来进行过滤,以此来确定是否响应某些内容给用户的请求。

2、Filter的实现

Servlet中的API实现了Filter接口,如果某个java类实现了该接口,则该java类称为Filter过滤器。通过Filter技术,开发人员可以在用户访问某些web资源前,对访问的请求进行拦截。

Filter开发分为两个步骤:

<1>编写java类实现Filter接口,重写init(),doFilter(),destroy()方法。
<2>编辑web.xml文件,对Filter进行注册,并设置拦截的资源

myeclipse创建Filter需要注意的:

注意:
在myeclipse中创建WebProject时,记得勾选web.xml,否则会没有。如下:

这也是我的第一个demo,没有勾选,所以没有web.xml

怎么勾选如下图:
<1>创建webproject时记得一路next,不要finish:

代码演示编写java类:

package com.SecondFilter;
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;
/*
第一个Filter实例,该java类实现了Filter接口,因此这个类就变成了一个Filter过滤器。
*/

public class SecondFilterDemo implements Filter {
/*
在实现了Filter接口后,该类需要重写三个方法:

*/
    @Override
    public void destroy() {
        // TODO Auto-generated method stub
        System.out.println("destroy....");
        //web容器在销毁过滤器实例时会调用该方法,释放资源,大多数情况用不到。
    }

    /*
    doFilter方法:
    这个方法是过滤器的核心方法,也就是在这个方法中会实现过滤的操作,当用户访问和过滤器相关的URL时,会先调用doFilter方法,doFilter方法中有一个FilterChain对象,该对象可调用chain.doFilter方法,从而确定是否“放行”(也就是允许用户去访问某些资源),或者是利用请求重定向或请求转发的手段去“拦截”(也就是不允许去访问,跳转到其他页面)
    filter的三种典型应用:
    1、可以在filter中根据条件决定是否调用chain.doFilter(request, response)方法,
即是否让目标资源执行
    2、在让目标资源执行之前,可以对request\response作预处理,再让目标资源执行
    3、在目标资源执行之后,可以捕获目标资源的执行结果,从而实现一些特殊的功能
    */
    @Override
    public void doFilter(ServletRequest arg0, ServletResponse arg1,
            FilterChain arg2) throws IOException, ServletException {
        // TODO Auto-generated method stub
        System.out.println("start....doFilter");
        arg2.doFilter(arg0, arg1);//“放行,允许去访问该URL”
        System.out.println("end....doFilter");

    }
    /*
    init()方法:
    Web容器在创造过滤器时会调用该方法,该方法可以去访问web.xml中的某些初始化参数。
    */
    @Override
    public void init(FilterConfig arg0) throws ServletException {
        // TODO Auto-generated method stub
        System.out.println("init....");

    }

}

myeclipse中对web.xml进行配置

<1>直接编写web.xml,打开直接编辑
<2>用myeclipse中的design工具来自动注册:

在Design下我们可以添加name,url:

web.xml中配置过滤器:

<?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_3_0.xsd" id="WebApp_ID" version="3.0">
  <display-name>SecondFilter</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>
    <!--配置过滤器-->
    <filter>
        <filter-name>SecondFilterDemo</filter-name><!--过滤器的名字-->
        <filter-class>com.SecondFilter.SecondFilterDemo</filter-class><!--Filter所属的类>
    </filter>
    <!--映射过滤器-->
    <filter-mapping>
        <filter-name>SecondFilterDemo</filter-name>
        <url-pattern>/*</url-pattern><!--Filter关联的url,/*表示项目跟目录下的所有url-->
    </filter-mapping>
</web-app>
发布了117 篇原创文章 · 获赞 66 · 访问量 17万+
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 大白 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览