当.xhtml直接在url中输入时,如何强制.jsf文件扩展名

时间:2016-01-29 02:37:34

标签: jsf jsf-2 url-rewriting glassfish file-extension

使用JSF时,可以选择以下几种扩展名:

  1. /面/ *
  2. *。JSF
  3. *。XHTML
  4. 至少推荐最后一个用于JSF 2.2。 但是,如果我想使用.jsf扩展名,那么我在这里遇到的问题是,如果有人要输出好奇心" .xhtml如果您将JSF标记与普通HTML标记混合,那么奇怪的东西就会开始发生。

    所以我知道,如果我输入.jsf,GlassFish服务器的管理控制台会强制将网址重写为.xhtml,我该怎么做?

1 个答案:

答案 0 :(得分:1)

两种方式:

  1. 只需限制.xhtml中对web.xml文件的直接访问即可。

    <security-constraint>
        <display-name>Restrict direct access to XHTML files</display-name>
        <web-resource-collection>
            <web-resource-name>XHTML files</web-resource-name>
            <url-pattern>*.xhtml</url-pattern>
        </web-resource-collection>
        <auth-constraint />
    </security-constraint> 
    

    另见JSF returns blank/unparsed page with plain/raw XHTML/XML/EL source instead of rendered HTML output

  2. 创建一个servlet filter来监听*.xhtml并重定向到*.jsf

    @WebFilter("*.xhtml")
    public class FacesUrlRewriteFilter implements Filter {
    
        @Override
        public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws ServletException, IOException {
            HttpServletRequest request = (HttpServletRequest) req;
            HttpServletResponse response = (HttpServletResponse) res;
    
            String redirectURI = request.getRequestURI().replaceAll("xhtml$", "jsf");
            String queryString = request.getQueryString();
    
            if (queryString != null) {
                redirectURI += "?" + queryString;
            }
    
            response.sendRedirect(redirectURI);
        }
    
        // ...
    }
    

    另见How to use a servlet filter in Java to change an incoming servlet request url?