Introducción:
Tomemos dos sitios web grandes como ejemplo para comparar:
51job y Zhaopin Recruitment (primero debo decir que no los estoy publicitando, solo los uso como ejemplos para comparación técnica)
51job usa tecnología PHP relativamente "avanzada", mientras que Zhaopin usa ASP relativamente atrasado. Pero podemos sentir claramente que la velocidad de respuesta de 51job es demasiado lenta en comparación con Zhaopin. Una persona atenta puede notarlo. Aunque Zhilian usa ASP, utiliza otra tecnología más inteligente: la tecnología de generación de páginas estáticas ASP. Todas las páginas dinámicas se convierten básicamente en páginas estáticas HTML sin acceder a la base de datos. Por supuesto, la respuesta es rápida.
Analicemos cómo convertir jsp a html.
Primero haz una plantilla. No hay límite para el sufijo, pero *.template generalmente se usa como ejemplo.
<html>
<cabeza>
<título>#título#</título>
<meta http-equiv="Tipo de contenido" content="text/html; charset=gb2312">
<ENLACE href="../css.css" rel=hoja de estilo tipo=texto/css>
</cabeza>
<cuerpo>
<P align="centro">
#título#<BR><BR><BR>
Autor: #autor#<BR><BR>
<BR>
#contenido#<BR><BR><BR><BR>
</P>
</cuerpo>
</html>
Cree una clase o un archivo jsp que procese plantillas (para ilustrar el problema, comencemos con un archivo jsp simple como ejemplo)
filePath = request.getRealPath("/")+"WEB-INF/templates/template.htm";
out.print(rutadelarchivo);
Cadena templateContent="";
FileInputStream fileinputstream = new FileInputStream(filePath);//Leer archivo del módulo
int longitud = fileinputstream.available();
byte bytes[] = nuevo byte[longitud];
fileinputstream.read(bytes);
archivoinputstream.close();
contenido de plantilla = nueva cadena (bytes);
out.print("El siguiente es el contenido de la plantilla:<br>"+templateContent+"<br> El siguiente es el contenido html después del reemplazo<br><hr>");
templateContent=templateContent.replaceAll("#título#",título);
templateContent=templateContent.replaceAll("#author#",editer);//Reemplazar los lugares correspondientes en el módulo
templateContent=templateContent.replaceAll("#content#",contenido);
//Obtiene el nombre del archivo según el tiempo
Calendario calendario = Calendar.getInstance();
Nombre de archivo de cadena = String.valueOf(calendar.getTimeInMillis()) +".html";
fileame = request.getRealPath("/")+fileame;//La ruta para guardar el archivo html generado
out.print(templateContent);
FileOutputStream fileoutputstream = new FileOutputStream(fileame);//Crear un flujo de salida de archivo
byte tag_bytes[] = templateContent.getBytes();
fileoutputstream.write(tag_bytes);
fileoutputstream.close();
Bueno, la tecnología central es así. Si necesitas un mayor rendimiento, puedes usar FreeMarker como plantilla.
Después de algunas depuraciones, fue exitoso. . Adjunto
el código fuente. .
PRUEBA de base de datos
MYSQL 5.0
, noticias de nombre de tabla
Campos: id int crece automáticamente, Título varchar(20), Contenido varchar(200), Autor varchar(10)
makeFile.jsp
<%
Conexión de conexión = DBconn.getConnection();
Declaración stmt = conn.createStatement();
ResultSet Rs = stmt.executeQuery("seleccionar * de noticias");
"
);
<%
String filePath = request.getRealPath("/")+"template.htm"
System.out.println(filePath);
Contenido de plantilla de cadena;
FileInputStream fileinputstream = nuevo FileInputStream(filePath);
int length = fileinputstream.available(); //available() Devuelve el número de bytes que se pueden leer desde este flujo de entrada de archivo sin bloquear.
byte bytes[] = new byte[longitud];
fileinputstream.read(bytes); //read(byte[] b) Lee hasta b.longitud de bytes de datos de este flujo de entrada en una matriz de bytes.
archivoinputstream.close();
//templateContent = nueva cadena(bytes);
Título de cadena;
Contenido de cadena;
Autor de cadena;
mientras(Rs.siguiente())
{
templateContent = new String(bytes);// Si no usa esta oración, después de reemplazarla una vez, no habrá ninguna marca #**# en templateContent. Entonces para regenerarse
título = Rs.getString("Título");
contenido = Rs.getString("Contenido");
autor = Rs.getString("Autor");
out.println(título+"********"+contenido+"****"+autor);
out.print("El siguiente es el contenido de la plantilla:<br>"+templateContent+"<br> El siguiente es el contenido html después del reemplazo<br><hr>");
templateContent=templateContent.replaceAll("#título#",título);
templateContent=templateContent.replaceAll("#author#",author);//Reemplace los lugares correspondientes en el módulo
templateContent=templateContent.replaceAll("#content#",content
// Obtiene el nombre del archivo según el tiempo
Calendario calendario = Calendar.getInstance();
Nombre de archivo de cadena = String.valueOf(calendar.getTimeInMillis()) +".html";
fileame = request.getRealPath("/")+"Html/"+fileame;//Ruta para guardar el archivo html generado
out.print(contenido de plantilla);
FileOutputStream fileoutputstream = new FileOutputStream(fileame);//Crear un flujo de salida de archivo
byte tag_bytes[] = templateContent.getBytes();
fileoutputstream.write(tag_bytes);
fileoutputstream.close();
}
if(conex!=null)
{
conexión.close();
}
si(stmt!=nulo)
{
stmt.close();
}
%>
//Archivo de conexión de base de datos
import java.sql.*;
conexión DB de clase pública {
conexión publicDB() {
// TODO Código auxiliar de constructor generado automáticamente
}
Conexión estática pública getConnection()
{
Conexión de conexión = nula;
intentar {
Class.forName("org.gjt.mm.mysql.Driver");
conexión = DriverManager.getConnection("jdbc:mysql://" + "localhost" + "/" + "prueba" +
"?useUnicode=true&characterEncoding=GB2312","root","111111");
}
captura (Excepción e)
{
e.printStackTrace();
}
conexión de retorno;
}
/*public static void main(String[] args) lanza una excepción
{
Conexión con=getConnection();
System.out.println(con.isClosed());
}
*/
}
//Archivo de plantilla
template.htm
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transicional//EN" " http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd ">
<html xmlns=" http://www.w3.org/1999/xhtml ">
<cabeza>
<meta http-equiv="Tipo de contenido" content="text/html; charset=gb2312" />
<título>#título#</título>
</cabeza>
<cuerpo>
<table width="380" height="107" border="0" cellpadding="0" cellspace="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">#autor#</td>
</tr>
</tabla>
</cuerpo>
</html>