博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

java-Filter

Posted on 2014-05-11 19:39  星尘的天空  阅读(1304)  评论(0编辑  收藏  举报

java-Filter

过滤器是小型的Web组件,它们负责拦截请求以及响应,以便查看、提取或以某种方式操作正在客户机和服务器之间交换的数据。简单的说,过滤器就类似于客户端发送的web请求与服务器之间的防火墙,经过该防火墙验明正身后放可以传入后天进行进一步的数据请求。

 

过滤器其实是一个Java的类,然后实现了几个函数,创建filter文件的时候,创建Class文件即可,参考代码如下所示:

package common;

  

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;  

publicclass filter implements Filter 

{  

    private FilterConfig filterConfig;  

  

    public void doFilter(ServletRequest request, ServletResponse response,  

            FilterChain chain) throws IOException, ServletException 

      {  

  /*

  再这里读取参数,并进行响应的过滤操作

  */

        chain.doFilter(request, response);//放行。让其走到下个链或目标资源中  

    }  

  

    public void init(FilterConfig filterConfig) throws ServletException {  

        System.out.println("初始化了");  

        this.filterConfig = filterConfig;  

    }  

  

    public void destroy() {  

        System.out.println("销毁了");  

    }  

 

Filter可以过滤某一个Servlet或者JSP文件,或者顾虑一组Servlet或者JSP文件,这些功能是在web.XML文件中进行配置。

web.xml参考代码:

<?xmlversion="1.0"encoding="UTF-8"?>

<web-appversion="2.5" 

xmlns="http://java.sun.com/xml/ns/javaee" 

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 

xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 

http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">

  <display-name></display-name>

  

<filter>  

    <filter-name>filter</filter-name>  

    <filter-class>common.filter</filter-class>  

    <init-param>  

        <param-name>param1</param-name>  

        <param-value>value在这里呢</param-value>  

    </init-param>  

</filter>  

 

<filter-mapping>  

    <filter-name>filter</filter-name>  

    <url-pattern>/ms/*</url-pattern>

 // <servlet-name></servlet-name>

    <dispatcher>REQUEST</dispatcher><!-- 没有配置dispatcher就是默认request方式的 -->  

    <dispatcher>FORWARD</dispatcher>  

    <dispatcher>ERROR</dispatcher>  

    <dispatcher>INCLUDE</dispatcher>  

</filter-mapping>  

  

  

  

  <servlet>

    <description>This is the description of my J2EE component</description>

    <display-name>This is the display name of my J2EE component</display-name>

    <servlet-name>myservlet</servlet-name>

    <servlet-class>myservlet</servlet-class>

  </servlet>

  <servlet>

    <description>This is the description of my J2EE component</description>

    <display-name>This is the display name of my J2EE component</display-name>

    <servlet-name>SecondServlet</servlet-name>

    <servlet-class>SecondServlet</servlet-class>

  </servlet>

  <servlet-mapping>

    <servlet-name>myservlet</servlet-name>

    <url-pattern>/ms/one/myservlet</url-pattern>

  </servlet-mapping>

  <servlet-mapping>

    <servlet-name>SecondServlet</servlet-name>

    <url-pattern>/ms/tow/SecondServlet</url-pattern>

  </servlet-mapping>

 

  <welcome-file-list>

    <welcome-file>index.jsp</welcome-file>

  </welcome-file-list>

</web-app>

---------------------

再<filter-mapping> 映射节点中,如果我们对某一个Servlet文件进行过滤,可以设置

<servlet-name>TargetFilterServletFileName</servlet>

TargetFilterServletFileName表示将要进行过滤的Servlet文件,

如果要对一组文件记性过滤,可以设置
<url-pattern>/FilePath</url-pattern>其中*表示上一级路径下的所有文件,

比如:/mm/servletForder/* 表示对/mm/servletForder/之后的所有文件进行过滤,

 

再web.xml配置文件中,需要注意的一点是:如果使用过滤文件,那么Filter的配置必须放到 <servlet>节点之前

 

 

Jason

2014年05月11日