过滤器 监听器           Day41 监听器   监听域对象的创建  域中属性的变化

过滤器  监听器
 
 
 
 
 
Day41 监听器   监听域对象的创建  域中属性的变化

过滤器  监听器
 
 
 
 
 
Day41 监听器   监听域对象的创建  域中属性的变化

过滤器  监听器
 
 
 
 
 
Day41 监听器   监听域对象的创建  域中属性的变化

过滤器生命周期/执行流程:

1_服务器启动的时候,tomcat检查web.xml中是否配置过一些过滤器 <filter-class>,如果配置过,调用<filter-class>内部路径,通过反射创建过滤器, 调用过滤器init方法.init方法仅执行一次.

2_当客户端浏览器向服务端发起请求的时候,先到达tomcat, Tomcat将本次HTTP请求部分封装在HttpServletRequest对象,同时创建Htt pServletResponse对象.

3_Tomcat看本次请求要访问那个资源, 看是否有对应的过滤器被触发,如果被触发,将创建好的request,response传递给过滤器的方法doFilter, 执行doFilter中的代码

4_doFilter中如果执行了放行语句,那么tomcat继续执行本次要访问的资源(servlet/jsp),

5_被访问的资源执行完毕之后,再次经过过滤器,对客户端浏览器进行响应.

性能提升?  好软件? 运行快(语句算法),占用资源少(内存占用).

Java servlet/jsp filter listener ServletConetxt

Destroy() 并不能销毁过滤器对象 他是做一些收尾工作, 例如关闭流

 过滤器  监听器
 
 
 
 
 
Day41 监听器   监听域对象的创建  域中属性的变化

过滤器有哪些作用

验证客户是否来自可信网络

对客户提交的数据进行重新编码

过滤掉客户的某些不应该出现的词汇

验证用户是否可以登录

验证客户的浏览器是否支持当前的应用

记录系统日志

 过滤器  监听器
 
 
 
 
 
Day41 监听器   监听域对象的创建  域中属性的变化

 过滤器 过滤请求编码   post请求 可以直接过滤,get请求需要单独过滤

1.1.1 案例实现

步骤1:使用装饰者设计模式,编写自定义Request对象。

public class MyRequest extends HttpServletRequestWrapper {

 

public MyRequest(HttpServletRequest request) {

super(request);

 

}

 

/**

 * 获得指定名称的第一个参数

 */

@Override

public String getParameter(String name) {

String value = super.getParameter(name);

try {

if ("GET".equalsIgnoreCase(super.getMethod())) {

value = new String(value.getBytes("ISO-8859-1"), "UTF-8");

}

} catch (Exception e) {

throw new RuntimeException(e);

}

return value;

}

 

}

步骤2:修改过滤器,使用自定义request实现类

public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain)

throws IOException, ServletException {

//0 强转

HttpServletRequest request = (HttpServletRequest) req;

HttpServletResponse response = (HttpServletResponse) resp;

 

//1 设置编码

 

//2 创建自定义request

MyRequest myRequest = new MyRequest(request);

 

//3 放行,使用自定义request

chain.doFilter(myRequest, response);

}

 

 

 

Day41 监听器   监听域对象的创建  域中属性的变化

 过滤器  监听器
 
 
 
 
 
Day41 监听器   监听域对象的创建  域中属性的变化

 过滤器  监听器
 
 
 
 
 
Day41 监听器   监听域对象的创建  域中属性的变化

处理乱码

Get请求 在server.xml 中添加 URIEncodeing属性=utf-8

New String(name.getByte("iso-8859"),utf-8)