在某些應(yīng)用中,將本該由動(dòng)態(tài)頁(yè)面每次獲取客戶端請(qǐng)求時(shí)去調(diào)用數(shù)據(jù)的過程轉(zhuǎn)換為在添加數(shù)據(jù)時(shí)即生成為靜態(tài)頁(yè)面,對(duì)服務(wù)器的壓力,數(shù)據(jù)庫(kù)檢索的壓力,以及搜索引擎收錄,包括防止SQL注入都是由極大的好處的。常見的做法有很多種,包括web服務(wù)器啟用rewrite,io操作生成文件等等,我正好有一段以前做j2ee開發(fā)時(shí)保留的一段io操作的方式生成html.
原理都很簡(jiǎn)單,主要是對(duì)模板的解析.so,我們先準(zhǔn)備一個(gè)html模板
mb.html,做個(gè)文件其中的###title###之類的標(biāo)簽用于程序進(jìn)行查詢替換.
###title###
下面是具體的代碼:JspToHtml.java
import javax.servlet.http.HttpServletRequest;
import java.util.List;
import java.util.ArrayList;
import java.util.Date;
import java.net.URL;
import java.net.URLConnection;
import java.io.*;
/**
* Filename: JspToHtml.java
* Ttitle: jsp轉(zhuǎn)換成html
* De.ion: 把動(dòng)態(tài)網(wǎng)頁(yè)轉(zhuǎn)換成靜態(tài)網(wǎng)頁(yè)
* Copyright:Copyright (c) 2002-2008 BocSoft,Inc.All Rights Reserved.
* Company: BocSoft
* Author:阿汐
* Date: 2006-6-19
* Time: 16:41:09
* Version: 2.0.0
*/
public class JspToHtml {
private static String title ="標(biāo)題測(cè)試";
private static String context ="標(biāo)題測(cè)試";
private static String editer ="標(biāo)題測(cè)試";
/**
* 根據(jù)本地模板生成靜態(tài)頁(yè)面
* @param JspFilejsp路經(jīng)
* @param HtmlFile html路經(jīng)
* @return
*/
public static boolean JspToHtmlFile(String filePath, String HtmlFile) {
String str = "";
long beginDate = (new Date()).getTime();
try {
String tempStr = "";
FileInputStream is = new FileInputStream(filePath);//讀取模塊文件
BufferedReader br = new BufferedReader(new InputStreamReader(is));
while ((tempStr = br.readLine()) != null)
str = str + tempStr ;
is.close();
} catch (IOException e) {
e.printStackTrace();
return false;
}
try {
str = str.replaceAll("###title###",
title);
str = str.replaceAll("###content###",
context);
str = str.replaceAll("###author###",
editer);//替換掉模塊中相應(yīng)的地方
File f = new File(HtmlFile);
BufferedWriter o = new BufferedWriter(new FileWriter(f));
o.write(str);
o.close();
System.out.println("共用時(shí):" + ((new Date()).getTime() - beginDate) + "ms");
} catch (IOException e) {
e.printStackTrace();
return false;
}
return true;
}
/**
* 根據(jù)url生成靜態(tài)頁(yè)面
*
* @param u動(dòng)態(tài)文件路經(jīng) 如:http://www.examda.com/x.jsp
* @param path 文件存放路經(jīng)如:x:\\abc\bbb.html
* @return
*/
public static boolean JspToHtmlByURL(String u, String path) {
//從utl中讀取html存為str
String str = "";
try {
URL url = new URL(u);
URLConnection uc = url.openConnection();
InputStream is = uc.getInputStream();
BufferedReader br = new BufferedReader(new InputStreamReader(is));
while (br.ready()) {
str += br.readLine() + "\n";
}
is.close();
//寫入文件
File f = new File(path);
BufferedWriter o = new BufferedWriter(new FileWriter(f));
o.write(str);
o.close();
str = "";
return true;
} catch (Exception e) {
e.printStackTrace();
return false;
}
}
/**
* 根據(jù)url生成靜態(tài)頁(yè)面
*
* @param url 動(dòng)態(tài)文件路經(jīng) 如:http://www.examda.com/x.jsp
* @return d
*/
public static StringBuffer getHtmlTextByURL(String url) {
//從utl中讀取html存為str
StringBuffer sb = new StringBuffer();
try {
URL u = new URL(url);
URLConnection uc = u.openConnection();
InputStream is = uc.getInputStream();
BufferedReader br = new BufferedReader(new InputStreamReader(is));
while (br.ready()) {
sb.append(br.readLine() + "\n");
}
is.close();
return sb;
} catch (Exception e) {
e.printStackTrace();
return sb;
}
}
/**
* 測(cè)試main 函數(shù)
*
* @param arg
*/
public static void main(String[] arg) {
long begin = System.currentTimeMillis();
//循環(huán)生成20個(gè)html文件
for (int k = 0; k < 20; k++) {
String url = "E:\\workspace\\oa\\golatel\\utils\\Temp\\mb.htm";//模板文件地址
String savepath = "d:/" + k + ".html";//生成文件地址
JspToHtmlFile(url, savepath);
}
System.out.println("用時(shí):" + (System.currentTimeMillis() - begin) + "ms");
}
}
原理都很簡(jiǎn)單,主要是對(duì)模板的解析.so,我們先準(zhǔn)備一個(gè)html模板
mb.html,做個(gè)文件其中的###title###之類的標(biāo)簽用于程序進(jìn)行查詢替換.
###title### |
###author### |
###content### |
###html### |
下面是具體的代碼:JspToHtml.java
import javax.servlet.http.HttpServletRequest;
import java.util.List;
import java.util.ArrayList;
import java.util.Date;
import java.net.URL;
import java.net.URLConnection;
import java.io.*;
/**
* Filename: JspToHtml.java
* Ttitle: jsp轉(zhuǎn)換成html
* De.ion: 把動(dòng)態(tài)網(wǎng)頁(yè)轉(zhuǎn)換成靜態(tài)網(wǎng)頁(yè)
* Copyright:Copyright (c) 2002-2008 BocSoft,Inc.All Rights Reserved.
* Company: BocSoft
* Author:阿汐
* Date: 2006-6-19
* Time: 16:41:09
* Version: 2.0.0
*/
public class JspToHtml {
private static String title ="標(biāo)題測(cè)試";
private static String context ="標(biāo)題測(cè)試";
private static String editer ="標(biāo)題測(cè)試";
/**
* 根據(jù)本地模板生成靜態(tài)頁(yè)面
* @param JspFilejsp路經(jīng)
* @param HtmlFile html路經(jīng)
* @return
*/
public static boolean JspToHtmlFile(String filePath, String HtmlFile) {
String str = "";
long beginDate = (new Date()).getTime();
try {
String tempStr = "";
FileInputStream is = new FileInputStream(filePath);//讀取模塊文件
BufferedReader br = new BufferedReader(new InputStreamReader(is));
while ((tempStr = br.readLine()) != null)
str = str + tempStr ;
is.close();
} catch (IOException e) {
e.printStackTrace();
return false;
}
try {
str = str.replaceAll("###title###",
title);
str = str.replaceAll("###content###",
context);
str = str.replaceAll("###author###",
editer);//替換掉模塊中相應(yīng)的地方
File f = new File(HtmlFile);
BufferedWriter o = new BufferedWriter(new FileWriter(f));
o.write(str);
o.close();
System.out.println("共用時(shí):" + ((new Date()).getTime() - beginDate) + "ms");
} catch (IOException e) {
e.printStackTrace();
return false;
}
return true;
}
/**
* 根據(jù)url生成靜態(tài)頁(yè)面
*
* @param u動(dòng)態(tài)文件路經(jīng) 如:http://www.examda.com/x.jsp
* @param path 文件存放路經(jīng)如:x:\\abc\bbb.html
* @return
*/
public static boolean JspToHtmlByURL(String u, String path) {
//從utl中讀取html存為str
String str = "";
try {
URL url = new URL(u);
URLConnection uc = url.openConnection();
InputStream is = uc.getInputStream();
BufferedReader br = new BufferedReader(new InputStreamReader(is));
while (br.ready()) {
str += br.readLine() + "\n";
}
is.close();
//寫入文件
File f = new File(path);
BufferedWriter o = new BufferedWriter(new FileWriter(f));
o.write(str);
o.close();
str = "";
return true;
} catch (Exception e) {
e.printStackTrace();
return false;
}
}
/**
* 根據(jù)url生成靜態(tài)頁(yè)面
*
* @param url 動(dòng)態(tài)文件路經(jīng) 如:http://www.examda.com/x.jsp
* @return d
*/
public static StringBuffer getHtmlTextByURL(String url) {
//從utl中讀取html存為str
StringBuffer sb = new StringBuffer();
try {
URL u = new URL(url);
URLConnection uc = u.openConnection();
InputStream is = uc.getInputStream();
BufferedReader br = new BufferedReader(new InputStreamReader(is));
while (br.ready()) {
sb.append(br.readLine() + "\n");
}
is.close();
return sb;
} catch (Exception e) {
e.printStackTrace();
return sb;
}
}
/**
* 測(cè)試main 函數(shù)
*
* @param arg
*/
public static void main(String[] arg) {
long begin = System.currentTimeMillis();
//循環(huán)生成20個(gè)html文件
for (int k = 0; k < 20; k++) {
String url = "E:\\workspace\\oa\\golatel\\utils\\Temp\\mb.htm";//模板文件地址
String savepath = "d:/" + k + ".html";//生成文件地址
JspToHtmlFile(url, savepath);
}
System.out.println("用時(shí):" + (System.currentTimeMillis() - begin) + "ms");
}
}