1 2 3 下一页 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: importjava.io.IOException; importjava.util.Enumeration; importjavax.servlet.Filter; importjavax.servlet.FilterChain; importjavax.servlet.FilterConfig; importjavax.servlet.ServletException; importjavax.servlet.ServletRequest; importjavax.servlet.ServletResponse; publicclassEncodeFilterimplementsFilter{ privateFilterConfigfilterConfig=null; privateStringencoding=null; //默认构造函数 publicEncodeFilter(){ } //初始化过滤器 publicvoidinit(FilterConfigfilterConfig)throwsServletException{ this.filterConfig=filterConfig; this.encoding=filterConfig.getInitParameter("encoding"); } //得到编码 privateStringgetEncoding(){ returnthis.encoding; } //执行过滤操作 publicvoiddoFilter(ServletRequestrequest,ServletResponseresponse, FilterChainfilterChain)throws IOException,ServletException{ //设置编码格式 if(request.getCharacterEncoding()==null){ Stringencoding=getEncoding(); if(encoding!=null){ request.setCharacterEncoding(encoding); } //传递过滤器 filterChain.doFilter(request,response); } } publicvoiddestroy(){ filterConfig=null; encoding=null; } }
(责任编辑:admin) |