導入:
比較のための例として 2 つの大規模な Web サイトを取り上げてみましょう。
51job と Zhaopin Recruitment (最初に断っておきますが、私はそれらを宣伝しているわけではありません。技術的な比較のための例として使用しているだけです)
51job は比較的「高度な」PHP テクノロジーを使用していますが、Zhaopin は比較的後進的な ASP を使用しています。しかし、51job の応答速度が Zhaopin に比べて遅すぎると感じるのはなぜでしょうか。注意深い人は気づくかもしれません。 Zhilian は ASP を使用していますが、別のより賢いテクノロジである ASP 静的ページ生成テクノロジも使用しています。すべての動的ページは基本的にデータベースにアクセスせずに HTML 静的ページに変換されます。もちろん、応答は高速です。
JSP を HTML に変換する方法について話し合いましょう??
まずはテンプレートを作ります。接尾辞に制限はありませんが、通常は *.template が例として使用されます。
<html>
<頭>
<title>#title#</title>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<LINK href="../css.css" rel=stylesheet type=text/css>
</head>
<body>
<P align="center">
#タイトル#<BR><BR><BR>
著者: #著者#<BR><BR>
<BR>
#コンテンツ#<BR><BR><BR><BR>
</P>
</body>
</html>
テンプレートを処理するクラスまたは JSP ファイルを作成します (問題を説明するために、例として単純な JSP ファイルから始めましょう)
filePath = request.getRealPath("/")+"WEB-INF/templates/template.htm";
out.print(ファイルパス);
文字列 templateContent="";
FileInputStream fileinputstream = new FileInputStream(filePath);//モジュール ファイルを読み取ります
int length = fileinputstream.available();
バイト bytes[] = 新しいバイト[長さ];
ファイル入力ストリーム.読み取り(バイト);
ファイル入力ストリーム.close();
templateContent = 新しい文字列(バイト);
out.print("以下はテンプレートの内容です:<br>"+templateContent+"<br> 以下は置換後のHTMLの内容です<br><hr>");
templateContent=templateContent.replaceAll("#title#",title);
templateContent=templateContent.replaceAll("#author#",editor);//モジュール内の対応する場所を置き換えます
templateContent=templateContent.replaceAll("#content#",content);
// 時刻に基づいてファイル名を取得します
カレンダー Calendar = Calendar.getInstance();
String fileame = String.valueOf(calendar.getTimeInMillis()) +".html";
fileame = request.getRealPath("/")+fileame;//生成された HTML ファイルの保存パス
out.print(templateContent);
FileOutputStream fileoutputstream = new FileOutputStream(fileame);//ファイル出力ストリームを作成する
バイトtag_bytes[] = templateContent.getBytes();
fileoutputstream.write(tag_bytes);
ファイル出力ストリーム.close();
まあ、コアテクノロジーは次のようなものです。より高いパフォーマンスが必要な場合は、代わりに FreeMarker をテンプレートとして使用できます。
いくつかのデバッグの後、成功しました。 。
ソースコードを
添付します
。。
JDK 1.5 +ECLIPSE +TOMCAT 5.0.28 + MYSQL 5.0
データベース TEST、テーブル名ニュース
フィールド: id int は自動的に増加します、タイトル varchar(20)、コンテンツ varchar(200)、作成者 varchar(10)
makeFile.jsp
<%
接続 conn = DBconn.getConnection();
ステートメント stmt = conn.createStatement();
ResultSet Rs = stmt.executeQuery("ニュースから * を選択");
System.out.println
("成功");
<%
文字列ファイルパス = request.getRealPath("/")+"template.htm"
;
文字列 templateContent;
FileInputStream fileinputstream = 新しい FileInputStream(filePath);
int length = fileinputstream.available(); //available() ブロックせずにこのファイル入力ストリームから読み取ることができるバイト数を返します。
byte bytes[] = new byte[length];
fileinputstream.read(bytes); //read(byte[] b) この入力ストリームから最大 b.length バイトのデータをバイト配列に読み取ります。
ファイル入力ストリーム.close();
//templateContent = 新しい文字列(バイト);
文字列タイトル。
文字列の内容。
文字列作成者。
while(Rs.next())
{
templateContent = new String(bytes);//この文を使用しない場合は、一度置き換えるとtemplateContentに#**#マークがなくなります。それで再生するには
title = Rs.getString("タイトル");
content = Rs.getString("コンテンツ");
著者 = Rs.getString("著者");
out.println(タイトル+"********"+コンテンツ+"****"+著者);
out.print("以下はテンプレートの内容です:<br>"+templateContent+"<br> 以下は置換後のHTMLの内容です<br><hr>");
templateContent=templateContent.replaceAll("#title#",title);
templateContent=templateContent.replaceAll("#author#",author);//モジュール内の対応する場所を置き換えます
templateContent=templateContent.replaceAll("#content#",content);
// 時刻に基づいてファイル名を取得します。
カレンダー Calendar = Calendar.getInstance();
String fileame = String.valueOf(calendar.getTimeInMillis()) +".html";
fileame = request.getRealPath("/")+"Html/"+fileame;//生成されたHTMLファイルの保存パス
out.print(templateContent);
FileOutputStream fileoutputstream = new FileOutputStream(fileame);//ファイル出力ストリームを作成する
バイトtag_bytes[] = templateContent.getBytes();
fileoutputstream.write(tag_bytes);
ファイル出力ストリーム.close();
}
if(conn!=null)
{
conn.close();
}
if(stmt!=null)
{
stmt.close();
}
%>
//データベース接続ファイル
import java.sql.*;
パブリック クラス DBconn {
publicDBconn() {
// TODO 自動生成されたコンストラクター スタブ
パブリック
静的接続 getConnection()
{
接続 conn = null;
試す {
Class.forName("org.gjt.mm.mysql.Driver");
conn = DriverManager.getConnection("jdbc:mysql://" + "localhost" + "/" + "test" +
"?useUnicode=true&characterEncoding=GB2312","root","111111");
}
catch(例外 e)
{
e.printStackTrace();
}
コンを返します。
}
/*public static void main(String[] args) は例外をスローします
{
接続 con=getConnection();
System.out.println(con.isClosed());
}
*/
}
//テンプレートファイル
template.htm
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" " http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd ">
<html xmlns=" http://www.w3.org/1999/xhtml ">
<頭>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title>#title#</title>
</head>
<body>
<table width="380" height="107" border="0" cellpadding="0" cellpacing="1" bgcolor="#FFCC99">
<tr>
<td height="16" bgcolor="#FFCC99"><div align="center">#title#</div></td>
</tr>
<tr>
<td bgcolor="#FFFFFF">#content#</td>
</tr>
<tr>
<td height="13" align="right" bgcolor="#FFFFFF">#author#</td>
</tr>
</テーブル>
</body>
</html>