网络编程 | 站长之家 | 网页制作 | 图形图象 | 操作系统 | 冲浪宝典 | 软件教学 | 网络办公 | 邮件系统 | 网络安全 | 认证考试 | 系统进程
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!
当前位置 > 网站建设学院 > 网络编程 > J2EE/J2ME
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,移动开发
本月文章推荐
.jBPM实例化一个流程.
.使用SPRING AOP框架和EJB组件.
.J2MEGame开发笔记(第二辑).
.使用 MIDP 列表组件.
.Web服务器和应用程序服务器有什么.
.在J2EE上部署Web服务(Web Servi.
.J2ME中RMS的使用解析.
.windy‘s j2ee1.4 tutorial (chi.
.Jboss文档(一).
.J2EEclusteringpart1.
.EnterpriseJavaBeans导论四.
.Java中关于XML的API一瞥.
.对RMS中的数据进行排序.
.介绍J2ME的安全结构.
.RMS从入门到精通之四.
.jBPM发送信号,流程进入下一步.
.HTTP联网开发小例子.
.Blob和Clob在JDBC中的简介.
.J2ME最佳实践之系统适配.
.J2ME程序优化方法二十条.

Filter技术的应用

发表日期:2007-12-23


    J2EE提供了一种特殊的Servlet,就是Filter。它不是一种单独的网络组件,因为它不产生请求和响应信息,它必须依附于其他的网络组件存在。所以我们利用它完成信息的编码转化、数据加密、身份验证、数据压缩、日志记录等很多种工作。下面我们共同看一下Filter的结构和具体的应用方法,并且结合实例进行讲解。
  一、Filter的结构
  我们自己编写的Filter必须要实现Javax.servlet.Filter接口,这个接口只要包含了三个主要的方法:
  init()-初始化过滤器,它的输入参数javax.servlet.FilterConfig的一个实例,可以这里初始化过滤要使用到的FilterConfig。这个方法由Web容器自动调用。
  doFilter()-进行具体的过滤操作,这个方法以javax.servlet.ServletRequest请求信息,javax.servlet.ServletResponse响应信息,javax.servlet.FilterChain过滤链。过滤链,在Web应用程序中所有的过滤器会构成一个链状,符合过滤条件的程序将会根据定义的顺序执行所有链中的过滤器。在这个方法中调用FilterChain的doFilter(javax.servlet.ServletRequest, javax.servlet.SerletResponse)方法就可以传递到链中的下一个过滤器。
  destory()-销毁过滤器,可以在这里释放使用完的资源,例如设置过滤器中FilterConfig为null。
  二、在Web程序中建立过滤器
  1、建立实现javax.servlet.Filter接口的自定义Filter程序。下面是一个进行请求信息编码转化的Filter:
import java.io.IOException;
import java.util.Enumeration;

import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;

public class EncodeFilter implements Filter{
  private FilterConfig filterConfig = null;
  private String encoding = null;

  //默认构造函数
  public EncodeFilter() {
  }

  //初始化过滤器
  public void init(FilterConfig filterConfig) throws ServletException {
    this.filterConfig = filterConfig;
    this.encoding = filterConfig.getInitParameter("encoding");
  }

  //得到编码
  private String getEncoding() {
    return this.encoding;
  }

  //执行过滤操作
  public void doFilter(ServletRequest request, ServletResponse response,
                       FilterChain filterChain) throws
    IOException, ServletException {
    //设置编码格式
    if(request.getCharacterEncoding() == null) {
      String encoding = getEncoding();

      if(encoding != null) {
        request.setCharacterEncoding(encoding);
      }

      //传递过滤器
      filterChain.doFilter(request, response);
    }
  }

  public void destroy() {
    filterConfig = null;
    encoding = null;
  }
}
    2、配置web.XML文件。要想让Filter在程序其他作用必须要在web.xml配置,上面过滤器对应配置文件:
 
   <filter>
    <filter-name>Set Encoding Filter</filter-name>
    <filter-class>cn.mblogger.mydeman.EncodeFilter</filter-class>
    <init-param>
      <param-name>encoding</param-name>
      <param-value>GBK</param-value>
    </init-param>
  </filter>
  <filter-mapping>
    <filter-name>Set Encoding Filter</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping>  
  <filter>元素是配置Filter相关信息,<filter-name>:指定这个Filter的名字,可以任意指定,其实相当于对Filter的描述。<filter-class>:Filter完整的类路径(包路径.类)。<init-param>:指定Filter用到的参数的初始值,其中<param-name>是参数名,<param-value>是参数值。在Filter中我们可以使用FilterConfig.getInitParameter(String)获得,其中String代表参数名也就是的值,例如在上面的Filter中获得encoding的值:filterConfig.getInitParameter("encoding");
  <filter-mapping>用来指定经过该Filter的URL样式。<filter-name>是Filter的名字,这个要和相对应的<filter>中<filter-name>一致。<url-pattern>是URL的样式,它定义所有经过这个Filter的URL所应该满足的样式,例如<url-pattern>/*</url-pattern>就是指定了所有的url都会经过这个Filter。
   完成了以上过程后,就定义了一个完成的Filter,我们可以添加辅助代码进行测试。
   在上面我们提到了过滤链的概念,它有一个执行顺序的问题,那么这个顺序的设置也是在web.xml中完成的,其中的先后顺序指定了这个顺序。在范例中,一共包含了两个过滤器,并且包含了测试代码,我们可以通过调整两个过滤器的先后顺序,查看调整前后结果的不同。


范例程序可以在这里下载。Filter

(出处:)


上一篇:通过SCMAD认证考试的经验 人气:819
下一篇:使用JSR172解析XML 人气:763
浏览全部J2EE/J2ME的内容 Dreamweaver插件下载 网页广告代码 祝你圣诞节快乐 2009年新年快乐