总结时间:2009-03-13
1 javax.servlet 包
1.1 接口
该包下面一共有14个接口对象,11个类(其中有两个为异常处理类ServletException,UnavailableException)
1.1.1 Filter 接口描述
首先对Filter有一个大概认识是很重要,你可能会问为什么呢?如果你不知道你这个东西可以用来干什么,你就不知道怎么去学习,了解也不够那么深刻。每一个规范或者技术的产生应该都是为了解决特定或普遍的问题。
Filte是源数据和目的数据之间起过滤作用的中间组件,当目标资源对请求作出
响应时候,容器同样会将响应先转发给过滤器,再过滤器中,你可以对响应的内容进行
相应的处理,然后再将响应发送到客户端,该接口的实现只初始化一次,多线程公用。从Servlet 2.3规范起定义了该接口,使用Filter可以对进行用户权限认证、对请求进行记录和审核,对加密请求和响应等进行处理。
具体的过滤器都必须实现Filter接口,该接口有destroy(), doFilter(ServletRequest request, ServletResponse response, FilterChain chain), init(FilterConfig filterConfig)有三个方法需要实现,简单介绍一下这三个方法:
destroy():通过方法名可以猜测出是容器准备销毁过滤器,过滤器应该进行的相关操作,一旦所有还在执行doFilter()方法的线程执行完毕,或者执行doFilter方法超时,该方法就会被调用一次。一旦容器调用destroy()方法后(只要调用了destroy()方法不管该方法是否执行完毕),容器就不会在调用该Filter实例的doFilter方法了。使用destroy()方法可以主动释放内存,文件处理等。
doFilter(ServletRequest request, ServletResponse response, FilterChain chain): 当客户端请求目标资源的时候,容器就会调用与这个目标资源相关联的过滤器的doFilter()方法。在特定的操作完成后,可以调用chain.doFilter(request,response)将请求传给下一个过滤器(或目标资源),也可以直接向客户端返回响应信息,或者利用RequestDispatcher的forward()和include()方法,以及HttpServletResponse的sendRedirect()方法将请求转向到其他资源。需要注意的是,这个方法的请求和响应参数的类型是ServletRequest和ServletResponse,也就是说,过滤器的使用并不依赖于具体的协议。
init(FilterConfig filterConfig):一旦过滤器被被实例化以后,容器调用该方法初始化过滤器相关参数,正确的初始化后,容器才能正常工作(这里所说的正常是指没有抛出ServletException类型的异常信息)。这里需要注意的是初始化抛出ServletException异常或初始化超时该过滤器都不可以正常的工作。