2014-10-02 65 views
-2

我想將由結果生成的HTML保存到數據庫。捕獲結果的xhtml

我一直尋找,但我迷路了,我不知道如何開始:S。

有人知道一種方法來捕獲該HTML?

Thx。

+0

沒什麼,我我還在尋找,我不知道如何做到這一點。 – podrick 2014-10-02 11:15:58

+0

我完全失去了 – podrick 2014-10-02 11:16:40

+0

我發現這個帖子http://stackoverflow.com/questions/3323089/capture-generated-html-output-of-jsf-page但它不適合我,因爲我可以' t使用URL – podrick 2014-10-02 11:22:27

回答

1

我認爲你可以使用ServletFilter中,HttpServletResponse的包裝和包裝的PrintWriter。

1.創建java.io.PrintWriter中的子類

public class PrintWriterWrapper extends PrintWriter { 
    public PrintWriterWrapper(Writer out) { 
     super(out); 
    } 
    @Override 
    public void write(int c) { 
     super.write(c); 
     char ch = (char)c; 
     System.out.println(ch); //<-please change to use DB. and others too. 
    } 
    @Override 
    public void write(char[] buf, int off, int len) { 
     super.write(buf, off, len); 
     String str = new String(buf, off, len); 
     System.out.println(str); 
    } 
    @Override 
    public void write(String s, int off, int len) { 
     super.write(s, off, len); 
     System.out.println(s.substring(off, off+len)); 
    } 
} 

請忽略其他的方法,如果你需要。

2.創建HttpServletResponse的包裝類

public class MyResponseWrapper extends HttpServletResponseWrapper { 
    public MyResponseWrapper(HttpServletResponse response) { 
     super(response); 
    } 

    @Override 
    public PrintWriter getWriter() throws IOException { 
     PrintWriter writer = super.getWriter(); 
     PrintWriterWrapper wrapper = new PrintWriterWrapper(writer); 
     return wrapper; 
    } 
} 

3.創建ServletFilter中,並使用包裝

public class MyFilter implements Filter { 
    public void destroy() { 
    } 

    public void doFilter(ServletRequest req, ServletResponse res, 
     FilterChain chain) throws IOException, ServletException { 
     MyResponseWrapper wrapper = new MyResponseWrapper((HttpServletResponse)res); 
     chain.doFilter(req, wrapper); 
    } 
} 

4.增加過濾器設置到web.xml

<filter> 
    <filter-name>MyFilter</filter-name> 
    <filter-class>hoge.MyFilter</filter-class> 
</filter> 
<filter-mapping> 
    <filter-name>MyFilter</filter-name> 
    <url-pattern>/faces/*</url-pattern> 
</filter-mapping>