Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/395.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 自动存储JSF页面的html代码_Java_Html_Jsf_Servlet Filters - Fatal编程技术网

Java 自动存储JSF页面的html代码

Java 自动存储JSF页面的html代码,java,html,jsf,servlet-filters,Java,Html,Jsf,Servlet Filters,我有一个JSF(IceFaces1.8.2)网站。我需要以下功能:当显示特定的JSF页面时,我希望将其HTML代码存储在数据库中。我尝试使用Servlet过滤器捕获代码(使用在SUN WebPage和许多教程中编写的HttpResponseWrapper对象),但响应总是空的。有人能帮我吗 以下是doFilter: public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)

我有一个JSF(IceFaces1.8.2)网站。我需要以下功能:当显示特定的JSF页面时,我希望将其HTML代码存储在数据库中。我尝试使用Servlet过滤器捕获代码(使用在SUN WebPage和许多教程中编写的HttpResponseWrapper对象),但响应总是空的。有人能帮我吗

以下是doFilter:

public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
    throws IOException, ServletException {  

    Wrapper responseWrapper = new Wrapper((HttpServletResponse)response);
    chain.doFilter(request, responseWrapper);
    //I just want the output on stdout at the moment...
    System.out.println(responseWrapper.toString());
    PrintWriter out = response.getWriter();
    out.write(responseWrapper.toString()); 
    }
这是包装纸:

public class Wrapper extends HttpServletResponseWrapper{
    private CharArrayWriter writer;
    public Wrapper(HttpServletResponse response){
        super(response);
        writer = new CharArrayWriter();
}

public PrintWriter getWriter(){
    return (new PrintWriter(writer));
}

public String toString(){
    return writer.toString();
}

public char[] toCharArray(){
    return (writer.toCharArray());
 }
}
以及web.xml:

<filter>
  <filter-name>MyFilter</filter-name>
  <filter-class>foo.myfilter</filter-class>
</filter> 
<filter-mapping>
  <filter-name>MyFilter</filter-name>
  <url-pattern>*.iface</url-pattern>
</filter-mapping>

我的过滤器
foo.myfilter
我的过滤器
*伊法斯先生

也许JSF发送重定向,或者使用
response.getOutputStream()
写入响应?尝试在
HttpServletResponseWrapper
的所有方法中设置断点,以发现JSF调用了哪些方法。

也许您的代码中存在错误,请发布您的工作以提供更好的指导。不要在注释中发布代码。编辑您的问题并在此处添加代码。不要担心格式,任何人都可以编辑它,直到您了解了SO的基本知识。JSF使用getOutputStream。我必须从ServletOutputStream创建一个子类,以使响应可读。感谢您还可以通过ui:debug标记激活jsf调试。它将页面输出的完整副本放入会话对象中。使用阶段侦听器或simlar事件机制检索并推送到db。请注意,ui:debug将使会话对象膨胀,因此我建议只在低可用性或非生产产品中使用它。