1.Filter是什么?
可以对发生到servlet、jsp、html的请求进行拦截,并对响应也进行拦截
2.怎么去实现Filter
(1)实现Filter接口,重写filter接口里面的方法
public class OneFilter implements Filter
(2)需要在web.xml中配置和映射Filter
url-pattern:指定是该Filter可以拦截哪些资源
<filter>
<filter-name>oneFilter</filter-name>
<filter-class>com.hpe.filter.OneFilter</filter-class>
</filter>
<!--配置filter拦截资源-->
<filter-mapping>
<filter-name>oneFilter</filter-name>
<url-pattern>/oneServlet</url-pattern>
</filter-mapping>
3.filter也是由Servlet容器负责管理的,管理Filter的生命周期
(1)构造方法:执行一次,当服务器加载的时候调用 filter也是一个单例的
(2)init():执行一次,当服务器加载的时候调用,负责对Filter进行初始化
(3)doFilter:每次请求和响应都会执行
(4)destroy:执行一次,当服务关闭或当期项目被卸载的时候执行,用于释放资源
4.如果有多个过滤器,那么过滤器的执行顺序由在web.xml配置filter先后顺序决定
5.FilterChain:Filter链,多个filter可以组成一个Filter链
doFilter(request,response):把请求转给filter链的下一个filter,如果当前filter是filter链中最后一个filter,将直接把请求发给目标资源
6.FilterConfig:代表的是当前filter,可以获取当前filter的配置信息
7.如果使用注解Filter根据filter名字字母的顺序来绝对,一般命名为filter01、filter02以此类推
过滤器设置编码格式
,列如判断是不时utf-8,不是则设置为utf-8。
首先,doFilter方法参数为ServletRequest,ServletResponse,而编码格式是针对于请求和响应,而请求响应又针对于HTTP,所以需要强转成httpservlet类型
HttpServletRequest req =(HttpServletRequest )request
配置方法:
xml配置文件中的标签中加一个
<init-param>
<param-name>enconding</param-name>
<param-value>utf-8</param-value>
</ init-param>
在Filter里面设置一个String变量 encoding,通过filterConfig.getInitParameter(“encoding”)方法把 “utf-8” 赋给encoding
再通过强转成Httpservlet类型的req对象设置编码格式
实现自动登录
cookie本身不支持中文,可以在设置时编码,在取cookie时解码:
(例如设置一个登陆,name登录名 pwd密码)
name = URLEncoding(name,“utf-8”)
pwd = URLEncoding(“pwd”,“utf-8”)
取值的时候可以对value根据#分割 split()(返回的是一个数组)
Cookie cookie = new Cookie(name:“login”,value:name+"#"+pwd);
创建一个过滤器检测cookie,遍历cookie,根据name(login)查找
如果有就取出value,进行解码,
解码方法 URLDecoder.decode(须解码的对象,解码的格式)
解码后判断用户名密码是否正确
监听器
专门用于对其他对象身上发生的时间或状态改变进行监听和相应处理的对象
Servlet监听器
用于监听 servletContext,HttpSession,ServletRequest三个域对象的创建和销毁事件,以及监听域对象中的属性发生修改的事件
Servlet事件监听器的注册和调用过程都是由web容器自动完成的
一、监听域对象的创建和销毁
ServletContextListener(最常用,其他的了解就行),可以在当前web应用加载的时候完成相关资源的初始化,比如数据库连接池
实现servlet监听器
1、实现相应的接口(servletContextListener)重写其中的方法
2、Web.xml中配置监听器,(一个web.xml可以注册多个监听器,监听器的顺序也是按照在web.xml文件中的注册顺序来加载和注册)
<listener>
<listener-class>com.hpe.listener.MyServletContextListener</listener-class>
</listener>
二、监听属性变更(了解就行)
监听ServletContext属性变更的接口为ServletContextAttributeListener