一、filter的概念及功能
Filter就像用滤纸来过滤杂物一样,它也叫过滤器。过滤器是Servlet2.3之后新增加的功能,它可以更变一个request请求也可以修改一个response。它可以在request到达Servlet之前预处理request,他也可以在response离开Servlet时处理response,总之,可以叫他Servlet链。一般作用在一下方面:
1.在request到达Servlet之前:
1)对用户的请求统一的认证;
2)编码的转换;
3)对用户发过来的数据进行替换,也可以进行加密行为等。
2.在response离开Servlet之后:
1)修改response的头及数据等。
二、代码实现
首先要实现 javax.servlet.Filter接口以及三个方法:
1. init(FilterConfig filterConfig)-->初始化过滤器多用于获取初始化参数。
2.doFilter(ServletRequest servletRequest , ServletResponse servletResponse , FilterChain chain )-->过 滤处理的相关操作都在这里完成,需要调chain.doFilter(servletRequest ,servletResponse )方法,把请求继续向 后传递,可以是对下一个过滤器doFilter方法的调用,或者相应的web组件。所以Filter采用了职责链设计模式。
3.destroy() 过滤器销毁 Servlet容器在销毁过滤器实例之前该方法得到调用,以释放占用的资源。
最后编码的实现:
对用户的请求统一的认证,获取用户名,如果用户名为空,则调到登录界面,否则放行。
@webFilter里相关属性的介绍:
属性名 类型 描述
filterName String 指定过滤器的name属性,等价于<filter-name>
value String[] 该属性等价于urlPatterns属性,两者不能同时使用
urlPatterns String[] 指定过滤器的URL匹配模式,等价于<url-pattern>
servletNames String[] 指定过滤器将应用到哪些Servlet。取值是@WebServlet的name属性或者<servlet-name>的值
dispatcherTypes DispatcherType 指定过滤器的转发模式,取值有:ASYNC ERROR FORWARD INCLUDE REQUEST
initParams WebInitParam[] 指定一组过滤器初始化参数,等价于<init-Param>
asyncSupported boolean 指定过滤器是否支持异步操作模式,等价于<async-supported>
description String 该过滤器的描述信息,等价于<description>
displayName String 该过滤器的显示名,通常配合工具使用,等价于<display-name>