code: @Override
      public void doFilter(ServletRequest request, final ServletResponse response,
              final FilterChain filterChain) throws IOException, ServletException {
          // cast
          final HttpServletRequest httpRequest = (HttpServletRequest) request;
          final HttpServletResponse httpResponse = (HttpServletResponse) response;
  
          // 打开DEBUG级别信息能看到所有进入RoseFilter的请求
          if (logger.isDebugEnabled()) {
              StringBuffer sb = httpRequest.getRequestURL();
              String query = httpRequest.getQueryString();
              if (query != null && query.length() > 0) {
                  sb.append("?").append(query);
              }
              logger.debug(httpRequest.getMethod() + " " + sb.toString());
          }
  
          supportsRosepipe(httpRequest);
  
          // 创建RequestPath对象，用于记录对地址解析的结果
          final RequestPath requestPath = new RequestPath(httpRequest);
  
          //  简单、快速判断本次请求，如果不应由Rose执行，返回true
          if (quicklyPass(requestPath)) {
              notMatched(filterChain, httpRequest, httpResponse, requestPath);
              return;
          }
  
          // matched为true代表本次请求被Rose匹配，不需要转发给容器的其他 flter 或 servlet
          boolean matched = false;
          try {
              // rose 对象代表Rose框架对一次请求的执行：一朵玫瑰出墙来
              final Rose rose = new Rose(modules, mappingTree, httpRequest, httpResponse, requestPath);
  
              // 对请求进行匹配、处理、渲染以及渲染后的操作，如果找不到映配则返回false
              matched = rose.start();
  
          } catch (Throwable exception) {
              throwServletException(requestPath, exception);
          }
  
          // 非Rose的请求转发给WEB容器的其他组件处理，而且不放到上面的try-catch块中
          if (!matched) {
              notMatched(filterChain, httpRequest, httpResponse, requestPath);
          }
      }
docs: 接收所有进入 RoseFilter 的请求进行匹配，如果匹配到有相应的处理类处理它则由这个类来处理他、渲染并响应给客户端。
  如果没有找到匹配的处理器，Rose将把请求转交给整个过滤链的下一个组件，让web容器的其他组件来处理它。