servlet和JSP过滤器Filter(26) doGet(request, response); }}3. 从过滤器中访问servlet环境前一节的ReportFilter只要调用指定的servlet或JSP页面,就在标准输出上打印一个报告。当你在自己的桌面系统上运行一个服务器时,一般会用一个显示标准输出的窗口,在开发过程中,标准输出上的报告很好用。但在部署过程中,不可能访问这个窗口。因此,一种自然的改进是将报告写入servlet日志文件写到标准输出。Servlet API提供了两个log方法:一个取一个简单的String而另一个取一个String和一个Throwable。这两个方法都可以从GeneriCServlet或ServletContext类中使用。关于这两个方法所用的日志文件的准确位置,请查看相关服务器的帮助文档。问题是doFilter方法在与其相关的serlvet或JSP页面之前执行。因此,你不能访问该servlet的实例,从而不能调用从GeneriCServlet继承的log方法。此外,API没有体统从doFilter方法中访问ServletContext的简单方法。可以访问ServletContext的方法并且与过滤器相关的唯一类是FilterConfig,访问ServletContext的方法为getServletContext。FilterConfig对象被传输给init方法,但不会自动存放到doFilter可使用的某个位置。因此,你必须自己存放FilterConfig。可建立一个FilterConfig类型的字段,然后重载init,将它的参数分配给该字段。因为一般只使用FilterConfig对象来访问ServletContext和过滤器名,所以可以存放该ServletContext和名称在字段中。相面举一个例子: public class SomeFilter implements Filter { protected FilterConfig config; private ServletContext context; private String filterName; public void init(FilterConfig config) throws ServletException { this.config = config; // In case it is needed by subclass. context = config.getServletContext(); filterName = config.getFilterName(); } // doFilter and destroy methods...