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

来源:互联网 发布:淘宝游戏王正版 编辑:程序博客网 时间:2024/06/05 21:00

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>
阅读全文
0 0
原创粉丝点击