在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(); %> 
|