• 过滤器 监听器


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

    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)

  • 相关阅读:
    「译」JVM是如何使用那些你从未听过的x86魔幻指令实现String.compareTo的
    「译」Graal JIT编译器是如何工作的
    [Inside HotSpot] C1循环不变代码提升优化
    Java逆变(Covariant)和协变(Contravariant)
    [Inside HotSpot] Xcode编译调试OpenJDK12
    [Inside HotSpot] UseParallelGC和UseParallelOldGC的区别
    [Inside HotSpot] Java分代堆
    [Inside HotSpot] Serial垃圾回收器 (二) Minor GC
    [Inside HotSpot] Epsilon GC
    [Inside HotSpot] Serial垃圾回收器 (一) Full GC
  • 原文地址:https://www.cnblogs.com/shan1393/p/8945385.html
Copyright © 2020-2023  润新知