private FilterChainImpl getFilterChain(final String path, final ServletContextImpl servletContext, final Servlet servlet) throws FilterInitializationException, ServletException { Deque<Filter> deque = new ArrayDeque<>(getFilterMappingsForPath(path, servletContext)); deque.add(new Filter() { @Override public void init(final FilterConfig filterConfig) { // Do nothing } @Override public void doFilter(final HttpServletRequest request, final HttpServletResponse response, final FilterChain filterChain) throws ServletException { servlet.service(request, response); } }); return new FilterChainImpl(deque); }
/** * {@inheritDoc} */ @Override public void load(final String path, final HttpServletRequestImpl request, final HttpServletResponseImpl response) throws IOException { ServletContextImpl servletContext = servletContextHelper.getResolvedContext(servletContexts, path); Objects.requireNonNull(servletContext); ServletMapping servletMapping = servletContextHelper.getResolvedServletMapping(servletContext, path); request.setServletContext(servletContext); Servlet servlet = getServlet(servletMapping, new ServletConfigImpl(servletContext)); response.setStatus(HttpServletResponse.STATUS_OK); try { FilterChainImpl filterChain = getFilterChain(path, servletContext, servlet); filterChain.doFilter(request, response); terminate(request, response); } catch (ServletException | FilterInitializationException e) { throw new UnexpectedSituationException(e); } }