过滤器 监听器

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

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() 并不能销毁过滤器对象 他是做一些收尾工作, 例如关闭流

 

过滤器有哪些作用

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

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

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

验证用户是否可以登录

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

记录系统日志

 

 

 过滤器 过滤请求编码   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 监听器   监听域对象的创建  域中属性的变化

 

 

处理乱码

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

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

原文地址:https://www.cnblogs.com/shan1393/p/8945385.html