在 url 中直接输入 .xhtml 时如何强制使用 .jsf 文件扩展名
How to force .jsf file extension when .xhtml is typed directly in url
使用 JSF 时,可以从多个扩展中进行选择,例如:
- /面孔/*
- *.jsf
- *.xhtml
最后一个至少推荐用于 JSF 2.2。
但是如果我想使用 .jsf
扩展怎么办,我在这里遇到一个问题,如果有人输入 "curiosity" .xhtml
那么奇怪的事情可能会开始发生,例如你将 JSF 标签与普通 HTML 标签混合。
所以我知道 GlassFish 服务器的管理控制台会强制将 URL 重写为 .jsf
如果我键入 .xhtml
,我该怎么做?
两种方式:
简单地限制直接访问web.xml
中的.xhtml
个文件。
<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。
创建一个 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?
使用 JSF 时,可以从多个扩展中进行选择,例如:
- /面孔/*
- *.jsf
- *.xhtml
最后一个至少推荐用于 JSF 2.2。
但是如果我想使用 .jsf
扩展怎么办,我在这里遇到一个问题,如果有人输入 "curiosity" .xhtml
那么奇怪的事情可能会开始发生,例如你将 JSF 标签与普通 HTML 标签混合。
所以我知道 GlassFish 服务器的管理控制台会强制将 URL 重写为 .jsf
如果我键入 .xhtml
,我该怎么做?
两种方式:
简单地限制直接访问
web.xml
中的.xhtml
个文件。<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。
创建一个 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?