网络编程 | 站长之家 | 网页制作 | 图形图象 | 操作系统 | 冲浪宝典 | 软件教学 | 网络办公 | 邮件系统 | 网络安全 | 认证考试 | 系统进程
Firefox | IE | Maxthon | 迅雷 | 电驴 | BitComet | FlashGet | QQ | QQ空间 | Vista | 输入法 | Ghost | Word | Excel | wps | Powerpoint
asp | .net | php | jsp | Sql | c# | Ajax | xml | Dreamweaver | FrontPages | Javascript | css | photoshop | fireworks | Flash | Cad | Discuz!
当前位置 > 网站建设学院 > 网络编程 > Java
Tag:注入,存储过程,分页,安全,优化,xmlhttp,fso,jmail,application,session,防盗链,stream,无组件,组件,md5,乱码,缓存,加密,验证码,算法,cookies,ubb,正则表达式,水印,索引,日志,压缩,base64,url重写,上传,控件,Web.config,JDBC,函数,内存,PDF,迁移,结构,破解,编译,配置,进程,分词,IIS,Apache,Tomcat,phpmyadmin,Gzip,触发器,socket
网络编程:ASP教程,ASP.NET教程,PHP教程,JSP教程,C#教程,数据库,XML教程,Ajax,Java,Perl,Shell,VB教程,Delphi,C/C++教程,软件工程,J2EE/J2ME,移动开发
本月文章推荐
.Hibernate下数据批量处理解决方案.
.一个正则表达式网站.
.J2EE探索者:用JMS进行企业消息传.
.在Swing中使用高级的MVC和POJOs.
.在J2ME手机编程中使用字体和颜色.
.您的 Java 代码安全吗.
.在Struts中使用Tiles框架.
.Spring框架下实现基于组的用户权.
.Java 命 名 人 谈 Java.
.Maven 2.0:编译、测试、部署.
.保存Java程序状态及设置Properti.
.再谈客户端的Java技术.
.探讨与比较Java和.NET的事件处理.
.JAVA中配置环境变量设置方法大全.
.在Applet中实现数字签名.
.《敏捷Acegi、CAS:构建安全的Ja.
.如何避免程序中的死锁.
.用游戏串起程序员的基本功.
.Java实时应用程序中的内存管理.
.EJB的困惑:组件与可重用性的矛盾.

编写 Servlet 2.3 Filter (一)

发表日期:2008-1-5



  Servlets Filter 是Servlet 2.3 规范中新增加的,它是截取用户从客户端提交的请求,在还没有到达需要访问的资源时运行的一个类。它操纵来自客户端的请求,在资源还没有初发送到客户端前截取响应,并处理这些还没有发送到客户端的响应。
  
  Filters 有许多的应用场合。Servlet 2.3 规范建议如下的地方可以应用Filter:
  
   authentication filters 
   logging and auditing filters
   image conversion filters
   data compression filters
   encryption filters
   tokenizing filters
   filters that trigger resource Access events
   XSL/T filters that transform XML content
   MIME-type chain filters
  
  编写一个简单的 Filter
  
  学习怎么样写Filter的第一步,是看一个非常简单的实例。Filter 是一个实现了 Javax.servlet.Filter 接口的类。javax.servlet.Filter 接口定义了三个方法:
  
  public void doFilter (ServletRequest request, ServletResponse response, FilterChain chain)
  public FilterConfig getFilterConfig()
  public void setFilterConfig (FilterConfig filterConfig)
  
  创建 javax.servlet.FilterConfig 对象,并完成初始化后传递给 Filter ,是容器的职责。javax.servlet.FilterConfig 可以被用来:
  
  提取 Filter name(在配置描述符中定义的)
  提取初始化变量(在配置描述符中定义的)
  得到 ServletContext 对象的引用
  
  setFilterConfig() 方法可以被用来设置一个对象为某个 Filter 的属性。doFilter() 方法实际上真正要进行 filter 动作的地方。在这里,你可以解析用户的请求,记录统计到文件,处理返回客户端的响应,等等。列表1是一人非常简单的例子,当它 filter 客户端请求时,打印一个消息到控制台;然后当它 filter 一个返回客户端的响应时再打印一个消息到控制台。图1是一个示例这个简单的 Filter 怎样处理请求-响应模型的图表。
  
  列表1: 一个非常简单的 Filter (SimpleFilter.java)
  
  package com.filters;
  
  import javax.servlet.Filter;
  import javax.servlet.FilterChain;
  import javax.servlet.FilterConfig;
  import javax.servlet.ServletRequest;
  import javax.servlet.ServletResponse;
  
  import java.io.IOException;
  import javax.servlet.ServletException;
  
  public class SimpleFilter implements Filter
  {
   private FilterConfig filterConfig;
  
   public void doFilter (ServletRequest request,
         ServletResponse response,
         FilterChain chain)
   {
  
    try
    {
     System.out.print ("Within Simple Filter ... ");
     System.out.println ("Filtering the Request ...");
  
     chain.doFilter (request, response);
  
     System.out.print ("Within Simple Filter ... ");
     System.out.println ("Filtering the Response ...");
  
    } catch (IOException io) {
     System.out.println ("IOException raised in SimpleFilter");
    } catch (ServletException se) {
     System.out.println ("ServletException raised in SimpleFilter");
    }
   }
  
   public FilterConfig getFilterConfig()
   {
    return this.filterConfig;
   }
  
   public void setFilterConfig (FilterConfig filterConfig)
   {
    this.filterConfig = filterConfig;
   }
  }
  
  以上的代码中可以看出,这个 Filter 是一个名为 SimpleFilter.java 类,它实现了 javax.servlet.Filter 接口,并提供了这个接口中三个方法的实现。
  
  注重,doFilter 可以分为二个部分:filter request 与 filter response 。这二部分由 javax.servlet.FilterChain 对象调用 chain 中的下一个对象来隔开,这下一个对象可能是一个 Servlet 或者另外的一个 Filter 。
  
  现在,我们写好了这样的一个简单的 Filter ,需要把它配置到一个容器中,看看运行结果。
  
  Apache Jatarka Tomcat,4.0 以上版本都支持 Servlet 2.3 规范。本文所有的实例都在此环境下测试通过。
  
  Filters 定义在web应用描述符中,即 web.xml 文件。Filters 先被定义,然后映射(map)到 Servlet 或者 URL ,这与 Servlet 的定义与映射是完全一样的。列表2是 web.xml 文件中,配置 SimpleFilter.java ,并映射(map)到一个 Servlet 。
  
  Listing 2: web.xml
  
  <?xml version = "1.0" encoding = "ISO-8859-1"?>
  <!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/j2ee/dtds/web-app_2_3.dtd";>
  
  <web-app>
   <!-- Define the filters within the Web Application -->
   <filter>
    <filter-name>
     Simple Filter Example
    </filter-name>
    <filter-class>
     com.filters.SimpleFilter
    </filter-class>
   </filter>
   <!-- Map the filter to a Servlet or URL -->
   <filter-mapping>
    <filter-name>
     Simple Filter Example
    </filter-name>
    <url-pattern>
     /simple
    </url-pattern>
   </filter-mapping>
   <!-- Define the Servlets within the Web Application -->
   <servlet>
    <servlet-name>
     Simple Servlet
    </servlet-name>
    <servlet-class>
     com.servlets.SimpleServlet
    </servlet-class>
   </servlet>
   <!-- Define Servlet mappings to urls -->
   <servlet-mapping>
    <servlet-name>
     Simple Servlet
    </servlet-name>
    <url-pattern>
     /simple
    </url-pattern>
   </servlet-mapping>
  </web-app>
上一篇:Servlet 容器的工作原理 ( 三 ) 人气:713
下一篇:Servlet 容器的工作原理 ( 四 ) 人气:570
浏览全部Java的内容 Dreamweaver插件下载 网页广告代码 祝你圣诞节快乐 2009年新年快乐