こんなんしてみた

FrontControllerをServletじゃなくてFilterにやらせる.

  • 動機
    • JSPを直撃させたくない
    • それに加えて,受けるリクエストは常に一枚かみたい
    • Servlet増やすのはイヤ

'/*'にして,こんなフィルタメソッド実装してみたよ.

public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws ServletException, IOException {
    HttpServletRequest request = (HttpServletRequest)req;
    HttpServletResponse response = (HttpServletResponse)res;

    String ctxPath = request.getContextPath();
    String reqUri = request.getRequestURI();
    String surfix = StringUtil.rightStripLast(reqUri, ".");
    if (StringUtil.equalsIgnoreCase(surfix, "jsp")) {
        // ".jsp"の場合
        String jspFile = StringUtil.rightStripFirst(reqUri, ctxPath);
        ServletContext servletContext = request.getSession().getServletContext();
        RequestDispatcher requestDispatcher = servletContext.getRequestDispatcher(jspFile);
        requestDispatcher.forward(request, response);
    }
    else if (StringUtil.equalsIgnoreCase(surfix, "csv")) {
        // ".csv"の場合
        //   :
    }
    else {
        // デフォはすり抜け
        chain.doFilter(request, response);
    }
}

一応,期待どおりに動いたぞ.