JSFを拡張子htmlで動くようにする

これまでJSFの動作対象URLを「拡張子xhtml」にしていたのですが「html」で動くようにしたい。
ついでに、xhtmlへの直接アクセスを禁止したい。

というわけでちょっと手を加えました。

web.xml

FacesServletが動作対象とするservlet-mappingを書き換えます。

旧)

  <servlet-mapping>
    <servlet-name>Faces Servlet</servlet-name>
    <url-pattern>*.xhtml</url-pattern>
  </servlet-mapping>

新)

  <servlet-mapping>
    <servlet-name>Faces Servlet</servlet-name>
    <url-pattern>*.html</url-pattern>
  </servlet-mapping>

拡張子を変えただけ。

Filterを追加

拡張子xhtmlへの直接アクセスを禁止します。

@WebFilter(urlPatterns = "*.xhtml", dispatcherTypes = { DispatcherType.REQUEST })
public class XhtmlProhibitionFilter implements Filter {

    @Override
    public void doFilter(final ServletRequest pRequest, final ServletResponse pResponse, final FilterChain pChain)
            throws IOException {
        ((HttpServletResponse) pResponse).sendError(HttpServletResponse.SC_NOT_FOUND);
    }

    @Override
    public void init(final FilterConfig pFilterConfig) {
        // 処理なし
    }

    @Override
    public void destroy() {
        // 処理なし
    }
}

こっちはもう少し良い方法があるかもしれません。