Servlet过滤器-日志记录
一,什么是servlet过滤器?
过滤器是在数据交互之间过滤数据的中间组件,独立于任何平台或者 Servlet 容器。
Servlet过滤器可以应用在客户机和 servlet 之间、servlet 和 servlet 或 JSP 页面之间,以及所包括的每个 JSP 页面之间。
二,sevlet过滤器的作用
servlet过滤器用于根性进入servlet的请求和走出servlet的相应中的有效负载和头信息。过滤器不产生响应,他们只修改或适配请求和响应。servlet过滤器即filter可以认为是servlet的一种加强版,它主要用于对用户亲求进行预处理。
filter的主要用处:1,在HttpServletRequest到达Servlet之前,拦截客户的HttpServletRequest。
2,根据需要检查HttpServletRequest,也可以修改HttpServletRequest头和数据。
3,在HttpServletRequest到达客户端之前,拦截HttpServletResponse。
4,根据需要检查HttpServletResponse,也可以修改HttpServletResponse头和数据。
filter的典型用例:身份验证,日志记录,数据压缩和加密
三,使用filter写日志
创建Filter必须实现javax.servlet.Filter接口,接口的的三个方法如下:
init(FilterConfig config):这是Servlet过滤器的初始化方法,Servlet容器创建Servlet过滤器实例后将调用这个方法。在这个方法中可以读取web.xml文件中Servlet过滤器的初始化参数。
destroy():Servlet容器在销毁过滤器实例前调用该方法,这个方法中可以释放Servlet过滤器占用的资源。
doFilter(ServletRequest req, ServletResponse resp, FilterChain chain):这个方法完成实际的过滤操作,当客户请求访问于过滤器关联的URL时,Servlet容器将先调用过滤器的doFilter方法。FilterChain参数用于访问后续过滤器。
我们可以使用注解(@WebFilter)的方式来定义一个filter,在urlPattens中指定你想要拦截的url地址,在这次实验中我拦截的是全部的用户请求地址(/*),filter的配置方式与servlet的配置方式擦汗不多,现在开始实际操作一下吧!
我使用的是gradle官网的构建webapplication的例子,用户首先访问到的是index.jsp,在界面中,设置了一个提交按钮,通过post方法提交表单,并且交给servlet处理,再通过forward函数设置处理的文件为response.jsp
以下是一些实验文件及结果:
HelloServlet.java
LogFilter.java
index.jsp
response.jsp
最后的实验结果如下: