在CSDN里面看了一篇关于将动态JSP内容保存为静态页面的文章,忘记网址了,大家可以搜索一下 :)。他没有提供源代码,然后自己测试着写了一个.主要想法是捕获 out 的输出后,可以保存到一些静态文件中,可以写一个 JSP的缓冲程序. 代码有待完善, 希望有这方面经验的朋友来共同完善. 在RESIN环境中测试成功,没有在tomcat其他服务器下测试,还存在一个问题,就是不能够同时输出到IE浏览器中. 以下为程序代码, 例如保存到 test.jsp 文件中,然后在IE中执行 http://....../test.jsp 将看不到任何输出,但是可以在后台resin的DOS窗口中看到输出的内容
| <%@ page language="java" contentType="text/html;charset=gb2312"%> <%@ page import="java.io.*"%> <%@ page import="java.util.*"%> <%! //继承 JspWriter 类 class MyOut extends JspWriter { private HttpServletResponse response; //将输出语句都存入os中 public CharArrayWriter os; public MyOut() { super(0, false); os = new CharArrayWriter(); } public String getString() { return os.toString(); } public final void write(byte buf[], int off, int len) throws IOException { os.write( new String(buf, off, len) ); } public final void write(char buf[], int off, int len) throws IOException { os.write( new String(buf, off, len) ); } |
| public final void write(int ch) throws IOException { os.write( String.valueOf(ch) ); } public final void write(char buf[]) throws IOException { os.write( String.valueOf(buf) ); } public final void write(String s) throws IOException { os.write( s ); } public final void write(String s, int off, int len) throws IOException { os.write( s, off, len ); } public final void newLine() throws IOException { os.write( "/n/r" ); } public final void print(boolean b) throws IOException { os.write( String.valueOf(b) ); } public final void print(char ch) throws IOException { os.write( String.valueOf(ch) ); } public final void print(int i) throws IOException { os.write( String.valueOf(i) ); } public final void print(long l) throws IOException { os.write( String.valueOf(l) ); } |
| public final void print(float f) throws IOException { os.write( String.valueOf(f) ); } public final void print(double d) throws IOException { os.write( String.valueOf(d) ); } public final void print(char s[]) throws IOException { os.write( String.valueOf(s) ); } public final void print(String s) throws IOException { os.write( s ); } public final void print(Object o) throws IOException { os.write( String.valueOf(o) ); } public final void println() throws IOException { os.write( "/n/r" ); } public final void println(boolean b) throws IOException { os.write( String.valueOf(b) ); } public final void println(char ch) throws IOException { os.write( String.valueOf(ch) ); } public final void println(int i) throws IOException { |
| os.write( String.valueOf(i) ); } public final void println(long l) throws IOException { os.write( String.valueOf(l) ); } public final void println(float f) throws IOException { os.write( String.valueOf(f) ); } public final void println(double d) throws IOException { os.write( String.valueOf(d) ); } public final void println(char s[]) throws IOException { os.write(s, 0, s.length); } public final void println(String s) throws IOException { os.write(s); } public final void println(Object o) throws IOException { os.write( String.valueOf(o) ); } public final void clear() throws IOException { os.reset(); } public final void flush() throws IOException { os.flush(); } |
| public void clearBuffer() { os.reset(); } public ServletOutputStream getOutputStream() throws java.io.IOException { return response.getOutputStream(); } //执行该方法可以将内容输出,或者保存为文件 public final void close() throws IOException { System.out.println( "以下为静态输出" ); System.out.println( os.toString() ); } public final int getBufferSize() { if(bufferSize == 0) return bufferSize; else return response.getBufferSize(); } public final int getRemaining() { return os.size(); } public final boolean isAutoFlush() { return autoFlush; } } %> <% out = new MyOut(); out.println( "开始输出, 在浏览器将会什么都不到<BR>" ); %> <html> <head> <body> <% out.println( "文件内容" ); %> </body> </head> </html> <% out.close(); %> | |