2010-04-26 100 views
1

是否有可能讓JSP頁面不響應設置任何內容類型?在我的設置中,JSP不直接生成響應,而是直接生成中間表示,然後由附加的Java代碼處理,然後根據此代碼創建HTML或JSON。那麼,我可以以某種方式使JSP 不是在響應中設置content-type並將其留給中間代碼?如果我只是在JSP中刪除contentType="...",它仍然默認爲text/html使JSP頁面未設置響應內容類型

回答

1

您可以使其忽略JSP頁面設置的內容類型。這足夠好嗎?
你怎麼做水暖?

基本思路是實現一個ServletResponseWrapper,重寫對setContentType的調用,然後使用過濾器將此響應傳遞給JSP而不是真實的響應。

ResponseWrapperToIgnoreContentType.java

import javax.servlet.ServletResponse; 
import javax.servlet.ServletResponseWrapper; 

public class ResponseWrapperToIgnoreContentType extends ServletResponseWrapper{ 

    public ResponseWrapperToIgnoreContentType(final ServletResponse response) { 
     super(response);   
    } 

    @Override 
    public void setContentType(final String type) { 
     System.out.println("Ignoring call to set the content type to : " + type); 
    } 
} 

過濾器應用它:

import java.io.IOException; 

import javax.servlet.Filter; 
import javax.servlet.FilterChain; 
import javax.servlet.FilterConfig; 
import javax.servlet.ServletException; 
import javax.servlet.ServletRequest; 
import javax.servlet.ServletResponse; 

public class ResponseContentTypeFilter implements Filter{ 

    @Override 
    public void destroy() { 

    } 

    @Override 
    public void doFilter(final ServletRequest request, final ServletResponse response, final FilterChain chain) throws IOException, ServletException { 
     chain.doFilter(request, new ResponseWrapperToIgnoreContentType(response)); 
    } 

    @Override 
    public void init(final FilterConfig filterConfig) throws ServletException { 

    } 

} 

編輯:只是發現在我的邏輯存在缺陷。在調用response.getWriter()之前,需要設置內容類型,以便它可以使用正確的字符編碼。 不知道如果這會影響你。

+0

謝謝,這可能是我會做的。我會在後面對這些假響應對象上的內容類型進行分類。 – doublep 2010-04-27 16:35:49

0

沒有。

爲什麼不在你正在創建的類中存儲首選的內容類型,併爲它生成訪問器並讓JSP從中獲取它?

+0

「有JSP從那裏得到它」 - 如何? – doublep 2010-04-26 19:01:12

相關問題