Einführung:
Nehmen wir zum Vergleich zwei große Websites:
51job und Zhaopin Recruitment (Ich muss zunächst sagen, dass ich keine Werbung für sie mache, sondern sie nur als Beispiele für technische Vergleiche verwende)
51job verwendet relativ „fortgeschrittene“ PHP-Technologie, während Zhaopin relativ rückständiges ASP verwendet. Aber wir haben möglicherweise das Gefühl, dass die Reaktionsgeschwindigkeit von 51job im Vergleich zu Zhaopin zu langsam ist. Eine aufmerksame Person kann es bemerken. Obwohl Zhilian ASP verwendet, verwendet es eine andere, cleverere Technologie – die ASP-Technologie zur statischen Seitengenerierung. Alle dynamischen Seiten werden grundsätzlich ohne Zugriff auf die Datenbank in statische HTML-Seiten umgewandelt. Die Reaktion erfolgt natürlich schnell.
Lassen Sie uns besprechen, wie man JSP in HTML konvertiert?
Erstellen Sie zunächst eine Vorlage. Für das Suffix gibt es keine Beschränkung, im Allgemeinen wird jedoch *.template als Beispiel verwendet.
<html>
<Kopf>
<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">
#title#<BR><BR><BR>
Autor: #author#<BR><BR>
<BR>
#content#<BR><BR><BR><BR>
</P>
</body>
</html>
Erstellen Sie eine Klasse oder JSP-Datei, die Vorlagen verarbeitet (zur Veranschaulichung des Problems beginnen wir mit einer einfachen JSP-Datei als Beispiel).
filePath = request.getRealPath("/")+"WEB-INF/templates/template.htm";
out.print(filePath);
String templateContent="";
FileInputStream fileinputstream = new FileInputStream(filePath);// Moduldatei lesen
int length = fileinputstream.available();
Byte Bytes[] = neues Byte[Länge];
fileinputstream.read(bytes);
fileinputstream.close();
templateContent = new String(bytes);
out.print("Das Folgende ist der Inhalt der Vorlage:<br>"+templateContent+"<br> Das Folgende ist der HTML-Inhalt nach der Ersetzung<br><hr>");
templateContent=templateContent.replaceAll("#title#",title);
templateContent=templateContent.replaceAll("#author#",editer);//Ersetzen Sie die entsprechenden Stellen im Modul
templateContent=templateContent.replaceAll("#content#",content);
// Dateinamen basierend auf der Zeit abrufen
Kalender Calendar = Calendar.getInstance();
String fileame = String.valueOf(calendar.getTimeInMillis()) +".html";
fileame = request.getRealPath("/")+fileame;//Der generierte HTML-Dateispeicherpfad
out.print(templateContent);
FileOutputStream fileoutputstream = new FileOutputStream(fileame);//Erstelle einen Dateiausgabestream
byte tag_bytes[] = templateContent.getBytes();
fileoutputstream.write(tag_bytes);
fileoutputstream.close();
Nun, die Kerntechnologie ist so. Wenn Sie eine höhere Leistung benötigen, können Sie stattdessen FreeMarker als Vorlage verwenden.
Nach einigem Debuggen war es erfolgreich. . Im Anhang
ist der Quellcode. .
JDK 1.5 +ECLIPSE +TOMCAT 5.0.28 + MYSQL 5.0
Datenbanktest, Tabellennamen-Neuigkeiten
Felder: id int wächst automatisch, Titel varchar(20), Inhalt varchar(200), Autor varchar(10)
makeFile.jsp
<%
Verbindung conn = DBconn.getConnection();
Anweisung stmt = conn.createStatement();
ResultSet Rs = stmt.executeQuery("select * from news");
"
);
<%
String filePath = request.getRealPath("/")+"template.htm"
;
String templateContent;
FileInputStream fileinputstream = new FileInputStream(filePath);
int length = fileinputstream.available(); //available() Gibt die Anzahl der Bytes zurück, die aus diesem Dateieingabestream ohne Blockierung gelesen werden können.
byte bytes[] = new byte[lenght];
fileinputstream.read(bytes); //read(byte[] b) Liest bis zu b.length Bytes an Daten aus diesem Eingabestream in ein Byte-Array.
fileinputstream.close();
//templateContent = new String(bytes);
String-Titel;
String-Inhalt;
String-Autor;
while(Rs.next())
{
templateContent = new String(bytes);//Wenn Sie diesen Satz nicht verwenden, gibt es nach einmaligem Ersetzen keine #**#-Markierung im templateContent. Also zum regenerieren
title = Rs.getString("Titel");
content = Rs.getString("Content");
author = Rs.getString("Author");
out.println(title+"********"+content+"****"+author);
out.print("Das Folgende ist der Inhalt der Vorlage:<br>"+templateContent+"<br> Das Folgende ist der HTML-Inhalt nach der Ersetzung<br><hr>");
templateContent=templateContent.replaceAll("#title#",title);
templateContent=templateContent.replaceAll("#author#",author);//Ersetzen Sie die entsprechenden Stellen im Modul
templateContent=templateContent.replaceAll("#content#",content);
// Dateinamen basierend auf der Zeit abrufen
Kalender Calendar = Calendar.getInstance();
String fileame = String.valueOf(calendar.getTimeInMillis()) +".html";
fileame = request.getRealPath("/")+"Html/"+fileame;//Generierter HTML-Dateispeicherpfad
out.print(templateContent);
FileOutputStream fileoutputstream = new FileOutputStream(fileame);//Erstelle einen Dateiausgabestream
byte tag_bytes[] = templateContent.getBytes();
fileoutputstream.write(tag_bytes);
fileoutputstream.close();
}
if(conn!=null)
{
conn.close();
}
if(stmt!=null)
{
stmt.close();
}
%>
//Datenbankverbindungsdateiimport
java.sql.*;
öffentliche Klasse DBconn {
publicDBconn() {
// TODO Automatisch generierter Konstruktor-Stub
}
öffentliche statische Verbindung getConnection()
{
Verbindungsverbindung = null;
versuchen {
Class.forName("org.gjt.mm.mysql.Driver");
conn = DriverManager.getConnection("jdbc:mysql://" + "localhost" + "/" + "test" +
"?useUnicode=true&characterEncoding=GB2312","root","111111");
}
Catch (Ausnahme e)
{
e.printStackTrace();
}
Rücklaufverbindung;
}
/*public static void main(String[] args) löst eine Ausnahme aus
{
Verbindung con=getConnection();
System.out.println(con.isClosed());
}
*/
}
//Vorlagendatei
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 ">
<Kopf>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title>#title#</title>
</head>
<body>
<table width="380" height="107" border="0" cellpadding="0" cellspacing="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>
</table>
</body>
</html>