0
我們有一個在Glassfish 3.1上運行的帶有JSF 2.0的Java EE 6 Web應用程序。在Glassfish上爲JSF Web應用程序強制特定響應標頭
在那裏我們遇到了一個奇怪的bug:Glassfish發送給客戶端的響應頭的Mime類型取決於瀏覽器發送的請求頭中允許的MIME類型的順序。因此,在某些情況下(取決於瀏覽器),響應的MIME類型錯誤,導致HTML頁面出現故障。 但解釋這件事需要相當長的時間。因此,要解決此問題,我們現在只想做一件事:
強制整個Web應用程序的響應標題類型爲「text/html」。
目前,我們做到這一點與在web.xml配置了Servlet過濾器:
@WebFilter("/BaseFilter")
public class BaseFilter implements Filter {
public BaseFilter() {
}
public void destroy() {
}
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
response.setContentType("text/html;charset=UTF-8");
chain.doFilter(request, response);
}
public void init(FilterConfig fConfig) throws ServletException {
}
}
配置在web.xml:
<filter>
<filter-name>BaseFilter</filter-name>
<filter-class>com.company.web.filter.BaseFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>BaseFilter</filter-name>
<url-pattern>/*</url-pattern>
<!-- these patterns should match cached resources -->
<dispatcher>REQUEST</dispatcher>
<dispatcher>FORWARD</dispatcher>
</filter-mapping>
所以我的問題是,是否有更好的辦法強制執行特定的響應頭,特別是通過配置它而不是實現ServletFilter?
是否有Glassfish選項可以做到這一點?
返回的是什麼? Facelets默認爲'text/html',只有字符集可能因服務器/客戶端的細節而異。至於過濾方法,你不想發送帶有該內容類型的JS/CSS /圖像文件。而是映射到JSF servlet的''而不是'/ *'的''。 –
BalusC
2011-04-27 18:15:27
「Facelets默認爲text/html,只有字符集可能因服務器/客戶端詳細信息而異」。在我們的應用程序中,響應標頭會有所不同,具體取決於請求標頭中允許的Mime類型的順序。它看起來不同(是否borken),取決於瀏覽器(它的text/html或其application/xhtml,它打破了渲染)。所以我們想強制它爲text/html。感謝關於JS/CSS的提示,我們將改變它以僅過濾JSF Servlet。 – ifischer 2011-04-27 18:20:32
嗯,聽起來更像是瀏覽器的錯誤,它說它更喜歡'application/xhtml',但無法正確呈現它。 – BalusC 2011-04-27 18:34:45