Introduction:
Prenons deux grands sites Web comme exemple de comparaison :
51job et Zhaopin Recruitment (je dois d'abord préciser que je ne fais pas de publicité pour eux, je les utilise uniquement comme exemples à des fins de comparaison technique)
51job utilise une technologie PHP relativement "avancée", tandis que Zhaopin utilise un ASP relativement arriéré. Mais nous pouvons clairement penser que la vitesse de réponse de 51job est trop lente par rapport à Zhaopin. Pourquoi ? Une personne attentive peut le remarquer. Bien que Zhilian utilise ASP, il utilise une autre technologie plus intelligente : la technologie de génération de pages statiques ASP. Toutes les pages dynamiques sont essentiellement converties en pages HTML statiques sans accéder à la base de données. Bien entendu, la réponse est rapide.
Discutons de la façon de convertir jsp en HTML ??
Créez d’abord un modèle. Il n'y a pas de limite au suffixe, mais *.template est généralement utilisé comme exemple.
<html>
<tête>
<titre>#titre#</titre>
<méta http-equiv="Content-Type" content="text/html; charset=gb2312">
<LINK href="../css.css" rel=stylesheet type=text/css>
</tête>
<corps>
<P align="center">
#titre#<BR><BR><BR>
Auteur : #auteur#<BR><BR>
<BR>
#content#<BR><BR><BR><BR>
</P>
</corps>
</html>
Créez une classe ou un fichier jsp qui traite les modèles (pour illustrer le problème, commençons par un simple fichier jsp comme exemple)
filePath = request.getRealPath("/")+"WEB-INF/templates/template.htm";
out.print(filePath);
Chaîne templateContent="";
FileInputStream fileinputstream = new FileInputStream(filePath);//Lire le fichier du module
int longueur = fileinputstream.available();
octet octets[] = nouvel octet[longueur];
fileinputstream.read(octets);
fileinputstream.close();
templateContent = new String (octets);
out.print("Ce qui suit est le contenu du modèle :<br>"+templateContent+"<br> Ce qui suit est le contenu HTML après remplacement<br><hr>");
templateContent=templateContent.replaceAll("#title#",title);
templateContent=templateContent.replaceAll("#author#",editer);//Remplacer les emplacements correspondants dans le module
templateContent=templateContent.replaceAll("#content#",content);
// Récupère le nom du fichier en fonction de l'heure
Calendrier calendrier = Calendar.getInstance();
String fileame = String.valueOf(calendar.getTimeInMillis()) +".html";
fileame = request.getRealPath("/")+fileame;//Le chemin d'enregistrement du fichier HTML généré
out.print(templateContent);
FileOutputStream fileoutputstream = new FileOutputStream(fileame);//Créer un flux de sortie de fichier
octet tag_bytes[] = templateContent.getBytes();
fileoutputstream.write(tag_bytes);
fileoutputstream.close();
Eh bien, la technologie de base est la suivante. Si vous avez besoin de performances plus élevées, vous pouvez plutôt utiliser FreeMarker comme modèle.
Après quelques débogages, c’est réussi. . Ci-joint
le code source. .
JDK 1.5 +ECLIPSE +TOMCAT 5.0.28 + base de données MYSQL 5.0
TEST, actualités sur les noms de table
Champs : id int grandit automatiquement, Titre varchar(20), Contenu varchar(200), Auteur varchar(10)
makeFile.jsp
<%
Connexion conn = DBconn.getConnection();
Instruction stmt = conn.createStatement();
ResultSet Rs = stmt.executeQuery("select * from news");
System.out.println("succès");
%>
<%
Chaîne filePath = request.getRealPath("/")+"template.htm"
System.out.println(filePath);
Modèle de chaîneContent ;
FileInputStream fileinputstream = new FileInputStream(filePath);
int length = fileinputstream.available(); //available() Renvoie le nombre d'octets pouvant être lus à partir de ce flux d'entrée de fichier sans blocage.
byte bytes[] = new byte[length];
fileinputstream.read(bytes); //read(byte[] b) Lit jusqu'à b.length octets de données de ce flux d'entrée dans un tableau d'octets.
fileinputstream.close();
//templateContent = new String(octets);
Titre de la chaîne ;
Contenu de chaîne ;
Auteur de chaîne ;
tandis que (Rs.next())
{
templateContent = new String(bytes);//Si vous n'utilisez pas cette phrase, après l'avoir remplacée une fois, il n'y aura pas de marque #**# dans templateContent. Alors pour régénérer
titre = Rs.getString("Titre");
content = Rs.getString("Contenu");
auteur = Rs.getString("Auteur");
out.println(titre+"*********"+contenu+"****"+auteur);
out.print("Ce qui suit est le contenu du modèle :<br>"+templateContent+"<br> Ce qui suit est le contenu HTML après remplacement<br><hr>");
templateContent=templateContent.replaceAll("#title#",title);
templateContent=templateContent.replaceAll("#author#",author);//Remplacer les emplacements correspondants dans le module
templateContent=templateContent.replaceAll("#content#",content);
// Récupère le nom du fichier en fonction de l'heure
Calendrier calendrier = Calendar.getInstance();
String fileame = String.valueOf(calendar.getTimeInMillis()) +".html";
fileame = request.getRealPath("/")+"Html/"+fileame;//Chemin d'enregistrement du fichier HTML généré
out.print(templateContent);
FileOutputStream fileoutputstream = new FileOutputStream(fileame);//Créer un flux de sortie de fichier
octet tag_bytes[] = templateContent.getBytes();
fileoutputstream.write(tag_bytes);
fileoutputstream.close();
}
if(conn!=null)
{
conn.close();
}
si(stmt!=null)
{
stmt.close();
}
%>
//
Import du fichier de connexion à la base de données java.sql.*;
classe publique DBconn {
publicDBconn() {
// TODO Stub de constructeur généré automatiquement
}
Connexion statique publique getConnection()
{
Connexion de connexion = null ;
essayer {
Class.forName("org.gjt.mm.mysql.Driver");
conn = DriverManager.getConnection("jdbc:mysql://" + "localhost" + "/" + "test" +
"?useUnicode=true&characterEncoding=GB2312","root","111111");
}
attraper (Exception e)
{
e.printStackTrace();
}
connexion de retour ;
}
/*public static void main(String[] args) lève une exception
{
Connexion con=getConnection();
System.out.println(con.isClosed());
}
*/
}
//Fichier modèle
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 ">
<tête>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<titre>#titre#</titre>
</tête>
<corps>
<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>
</table>
</corps>
</html>