【叶凡网络】关于Servlet中的doFilter方法
- 2014-01-15 10:17:14 | 新闻来源:叶凡网络 | 点击量:547
整洁地嵌套在javax.servlet包中那 3个接口分别是FilterFilterChain和 FilterConfig从编程的角度看,过滤器 API包括 3个简单的接口。过滤器类将实现 Filter 接口,然后使用这个过滤器类中的FilterChain和 FilterConfig接口。该过滤器类的一个引用将传递给 FilterChain对象,以允许过滤器把控制权传送给链中的下一个资源。FilterConfig对象将由容器提供给过滤器,以允许访问该过滤器的初始化数据。
过滤器必需运用三个方法,为了与我三步模式坚持一致。以便完全实现 Filter 接口:主要设计用于使过滤器为处置做准备。该方法接受一个 FilterConfig类型的对象作为输入。init这个方法在容器实例化过滤器时被调用。过滤器拥有单个用于处置请求和响应的方法—doFilt方法。这个方法接受三个输入参数:一个 ServletRequestrespons和一个 FilterChain对象。doFilt与 servlet拥有一个 servic方法(这个方法又调用 doPost或者 doGet来处置请求一样。
这个方法执行任何清理操作,destroi正如您想像的那样。这些操作可能需要在自动垃圾收集之前进行。跟踪满足一个客户机的Web请求所花的大致时间。清单 1展示了一个非常简单的过滤器。
清单 1.一个过滤器类实现
importjavax.servlet.*;
importjava.util.*;
importjava.io.*;
publicclassTimeTrackFiltimplementFilter{
privatFilterConfigfilterConfig=null;
publicvoidinitFilterConfigfilterConfigthrowServletExcept{
this.filterConfig=filterConfig;
}
publicvoiddestroi{
this.filterConfig=null;
}
ServletResponsresponse,publicvoiddoFiltServletRequestrequest.
ServletExcept{ FilterChainchainthrowIOException.
endTime; DatestartTime.
doubltotalTime;
startTim=newDate;//Forwardtherequesttothenextresourcin
wrapper; thechainchain.doFiltrequest.
//--Processtherespons--\\
//Calculthedifferbetweenthestarttimeandendtime
endTim=newDate;
totalTim=endTime.getTim-startTime.getTim;
totalTimetotalTim=totalTim/1000;//Convertfrommillisecondto
secondStringWritsw=newStringWrit;
PrintWritwriter=newPrintWritsw;
writer.println;
writer.println"===============";
writer.println"Totalelapstimeis:"+totalTim+"seconds.";
writer.println"===============";//Logtheresultstringwriter.flush;
filterConfig.getServletContext.logsw.getBuff.toStr;
}
}
不管怎样,这个过滤器的生命周期很简单。还是研究一下它吧:init方法将被调用。该类在这个方法中包含了一个指向 FilterConfig对象的引用。过滤器实际上并不需要这样做,当容器第一次加载该过滤器时。因为其中没有使用初始化信息,这里只是出于演示的目的同时传入分别指向这个请求/响应链中的ServletRequestServletRespons和 FilterChain对象的引用。然后过滤器就有机会处理请求,过滤器的大多数时间都消耗在这里。doFilt方法被容器调用。将处置任务传送给链中的下一个资源(通过调用 FilterChain对象引用上的doFilt方法)之后在处置控制权返回该过滤器时处理响应。
上一篇:【叶凡网络】日本民间组织称安倍参拜无道理可言要求安倍下台
下一篇:【叶凡网络】中央明确禁入提拔考察为裸官跑官等6类人