2012-11-06 19 views
1

我需要根據頁面內容修改此標題。如果已經設置瞭如何修改一個http頭文件?

例如:這是一個例子contrieved-因爲它被請求。我不能進入特定的頭 該servlet的細節/頁面設置頁眉基於被訪問哪些後端系統specialheader = XYZ。如果設置了這個專欄,過濾器會將其修改爲xyz + abc。如果未設置標題,則篩選器將其設置爲123.

我可以使用篩選器創建包裝的HttpServletResponse並在其返回時對其進行修改。但是,我對細節很模糊。

我知道我必須阻止我的過濾器,它的工作之前被送回客戶機的輸出。爲了做到這一點,我需要通過我自己的OutputStream並緩衝輸出嗎?

我真的需要做的是什麼?我能避免緩衝輸出,可以把服務器

,如果我需要修改標題中的doFilter調用後的基本問題是 - 上的負載,什麼是最小的,我需要做什麼? 有沒有其他方式來防止輸出被提交,如過度沖洗等等,?

+0

您能否提供一個'基於頁面內容修改此頁眉的具體示例? – Vikdor

回答

1

只實現getHeader和getHeaderNames不理你想放棄,並設置包裝作爲過濾頭。

import java.io.ByteArrayOutputStream; 
import java.io.PrintWriter; 
import java.util.Collection; 

import javax.servlet.ServletOutputStream; 
import javax.servlet.http.HttpServletResponse; 
import javax.servlet.http.HttpServletResponseWrapper; 

public class GenericResponseWrapper extends HttpServletResponseWrapper { 



    public GenericResponseWrapper(final HttpServletResponse response) { 
     super(response);  
    } 

    @Override 
    public String getHeader(String name) { 
     // TODO Auto-generated method stub 
     return super.getHeader(name); 
    } 
    @Override 
    public Collection<String> getHeaderNames() { 
     // TODO Auto-generated method stub 
     return super.getHeaderNames(); 
    } 
} 


public class Wrapper implements Filter { 

    @Override 
    public void doFilter(final ServletRequest request, final ServletResponse response, final FilterChain chain) throws IOException, ServletException { 
     final HttpServletRequest httpRequest = (HttpServletRequest) request; 
     final HttpServletResponse httpResponse = (HttpServletResponse) response; 
      final GenericResponseWrapper wrapper = new GenericResponseWrapper(httpResponse); 
      wrapper.getResponse().setCharacterEncoding("UTF-8"); 

      chain.doFilter(request, wrapper); 
} 
} 
相關問題