用servlet將jsp檔案內容轉為html。代碼如下:
package examples;
import java.io.ByteArrayOutputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpServletResponseWrapper;
public class ToHtml extends HttpServlet { private static final String CONTENT_TYPE = "text/html; charset=GBK"; // Initialize global variables public void init() throws ServletException { } // Process the HTTP Get request public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType(CONTENT_TYPE); service(request, response); /** * 只有成功初始化後此方法才能被調用處理使用者請求。前一個參數提供訪問初始請求資料的方法和欄位, * 後一個提供servlet構造響應的方法。 */ } // Process the HTTP Post request public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); } public void destroy() { } public void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { ServletContext sc = getServletContext(); String url = "/index.jsp"; String name = "index.htm"; // 這是產生的html檔案名稱 String pName = "e:\\Tomcat 5.5\\webapps\\jspTohtml\\index.htm";
// 產生html的完整路徑 RequestDispatcher rd = sc.getRequestDispatcher(url); final ByteArrayOutputStream os = new ByteArrayOutputStream(); final ServletOutputStream stream = new ServletOutputStream() { public void write(byte[] data, int offset, int length) { os.write(data, offset, length); } public void write(int b) throws IOException { os.write(b); } }; final PrintWriter pw = new PrintWriter(new OutputStreamWriter(os)); HttpServletResponse rep = new HttpServletResponseWrapper(response) { public ServletOutputStream getOutputStream() { return stream; } public PrintWriter getWriter() { return pw; } }; rd.include(request, rep); pw.flush(); FileOutputStream fos = new FileOutputStream(pName);
// 把jsp輸出的內容寫到指定路徑的htm檔案中 os.writeTo(fos); fos.close(); response.sendRedirect(name); // 書寫完畢後轉向htm頁面 }}在web.xml檔案中配置:<servlet>
<servlet-name>Tohtml</servlet-name>
<servlet-class>examples.ToHtml</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>Tohtml</servlet-name>
<url-pattern>/Tohtml</url-pattern>
</servlet-mapping>
下面是用來測試的index.jsp:<%@ page contentType="text/html; charset=gb2312" %>
<html>
<head>
<title>Cache Filter Test</title>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
</head>
<body>
簡單測試:s=
<%
int s=0;
// mock time-consuming code
for (int i=0;i<1000;i++) {
for (int j=0;j<1000;j++) {
s=s+j;
}
}
out.print(s);
%>
</body>
</html>
效果圖: