我正在使用JSP生成动态页面,我想将这个动态生成的完整页面保存在文件中作为存档。
在JSP语言中,所有内容都写入PrintWriter out = response.getWriter();
在页面的末尾,在向客户端发送响应之前,我希望将此页面保存在文件或缓冲区中作为字符串,以便以后处理。
如何保存Printwriter
内容或转换为String
发布于 2012-02-10 19:25:24
这将取决于: PrintWriter是如何构造和使用的。
如果首先构造PrintWriter,然后将其传递给写入它的代码,则可以使用装饰器模式,它允许您创建Writer的子类,该子类将PrintWriter作为委托,并将调用转发给委托,但还会维护内容的副本,然后您可以对其进行存档。
public class DecoratedWriter extends Writer
{
private final Writer delegate;
private final StringWriter archive = new StringWriter();
//pass in the original PrintWriter here
public DecoratedWriter( Writer delegate )
{
this.delegate = delegate;
}
public String getForArchive()
{
return this.archive.toString();
}
public void write( char[] cbuf, int off, int len ) throws IOException
{
this.delegate.write( cbuf, off, len );
this.archive.write( cbuf, off, len );
}
public void flush() throws IOException
{
this.delegate.flush();
this.archive.flush();
}
public void close() throws IOException
{
this.delegate.close();
this.archive.close();
}
}
发布于 2017-03-01 23:40:29
要从PrintWriter
的输出中获取字符串,可以通过构造函数将StringWriter
传递给PrintWriter
:
@Test
public void writerTest(){
StringWriter out = new StringWriter();
PrintWriter writer = new PrintWriter(out);
// use writer, e.g.:
writer.print("ABC");
writer.print("DEF");
writer.flush(); // flush is really optional here, as Writer calls the empty StringWriter.flush
String result = out.toString();
assertEquals("ABCDEF", result);
}
发布于 2013-03-20 12:01:17
为什么不使用StringWriter
呢?我认为这应该能够提供你需要的东西。
举个例子:
StringWriter strOut = new StringWriter();
...
String output = strOut.toString();
System.out.println(output);
https://stackoverflow.com/questions/9226794
复制相似问题