Introdução:
Vamos pegar dois grandes sites como exemplo de comparação:
51job e Zhaopin Recruitment (devo primeiro afirmar que não estou anunciando para eles, estou apenas usando-os como exemplos para comparação técnica)
51job usa tecnologia PHP relativamente "avançada", enquanto Zhaopin usa ASP relativamente atrasado. Mas podemos sentir claramente que a velocidade de resposta de 51job é muito lenta em comparação com Zhaopin. Uma pessoa atenta pode perceber isso. Embora Zhilian use ASP, ele usa outra tecnologia mais inteligente - tecnologia de geração de página estática ASP. Todas as páginas dinâmicas são basicamente convertidas em páginas estáticas HTML sem acessar o banco de dados. Claro, a resposta é rápida.
Vamos discutir como converter jsp em html?
Primeiro faça um modelo. Não há limite para o sufixo, mas *.template geralmente é usado como exemplo.
<html>
<cabeça>
<título>#título#</título>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<LINK href="../css.css" rel=stylesheet type=text/css>
</head>
<corpo>
<P alinhar="centro">
#título#<BR><BR><BR>
Autor: #autor#<BR><BR>
<BR>
#content#<BR><BR><BR><BR>
</P>
</body>
</html>
Faça uma classe ou arquivo jsp que processe templates (para ilustrar o problema, vamos começar com um arquivo jsp simples como exemplo)
filePath = request.getRealPath("/")+"WEB-INF/templates/template.htm";
out.print(filePath);
String templateContent="";
FileInputStream fileinputstream = new FileInputStream(filePath);//Lê o arquivo do módulo
comprimento interno = fileinputstream.available();
byte bytes[] = novo byte[comprimento];
arquivoinputstream.read(bytes);
arquivoinputstream.close();
templateContent = nova String(bytes);
out.print("A seguir está o conteúdo do modelo:<br>"+templateContent+"<br> A seguir está o conteúdo html após a substituição<br><hr>");
templateContent=templateContent.replaceAll("#title#",title);
templateContent=templateContent.replaceAll("#author#",editer);//Substitua os locais correspondentes no módulo
templateContent=templateContent.replaceAll("#content#",content);
// Obtém o nome do arquivo com base no tempo
Calendário calendário = Calendar.getInstance();
String nomedoarquivo = String.valueOf(calendar.getTimeInMillis()) +".html";
fileame = request.getRealPath("/")+fileame;//O caminho para salvar o arquivo html gerado
out.print(templateContent);
FileOutputStream fileoutputstream = new FileOutputStream(fileame);//Cria um fluxo de saída de arquivo
byte tag_bytes[] = templateContent.getBytes();
arquivooutputstream.write(tag_bytes);
arquivooutputstream.close();
Bem, a tecnologia principal é assim. Se você precisar de desempenho superior, poderá usar o FreeMarker como modelo.
Depois de alguma depuração, foi bem-sucedido. . Em anexo
está o código fonte. .
JDK 1.5 +ECLIPSE +TOMCAT 5.0.28 + banco de dados MYSQL 5.0
TEST, nome da tabela notícias
Campos: id int cresce automaticamente, Título varchar(20), Conteúdo varchar(200), Autor varchar(10)
makeFile.jsp
<%
Conexão conexão = DBconn.getConnection();
Instrução stmt = conn.createStatement();
ResultSet Rs = stmt.executeQuery("selecione * das notícias");
System.out.println
("sucesso");
<%
String filePath = request.getRealPath("/")+"template.htm";
System.out.println(filePath);
String templateContent;
FileInputStream fileinputstream = novo FileInputStream(filePath);
int length = fileinputstream.available(); //available() Retorna o número de bytes que podem ser lidos deste fluxo de entrada de arquivo sem bloqueio.
byte bytes[] = new byte[lenght];
fileinputstream.read(bytes); //read(byte[] b) Lê até b.length bytes de dados deste fluxo de entrada em uma matriz de bytes.
arquivoinputstream.close();
//templateContent = new String(bytes);
Título da sequência;
Conteúdo de string;
Autor da string;
enquanto(Rs.próximo())
{
templateContent = new String(bytes);//Se você não usar esta frase, após substituí-la uma vez, não haverá marca #**# em templateContent. Então, para regenerar
título = Rs.getString("Título");
conteúdo = Rs.getString("Conteúdo");
autor = Rs.getString("Autor");
out.println(título+"********"+conteúdo+"****"+autor);
out.print("A seguir está o conteúdo do modelo:<br>"+templateContent+"<br> A seguir está o conteúdo html após a substituição<br><hr>");
templateContent=templateContent.replaceAll("#title#",title);
templateContent=templateContent.replaceAll("#author#",author);//Substitua os locais correspondentes no módulo
templateContent=templateContent.replaceAll("#content#",content);
// Obtém o nome do arquivo com base na hora.
Calendário calendário = Calendar.getInstance();
String nomedoarquivo = String.valueOf(calendar.getTimeInMillis()) +".html";
fileame = request.getRealPath("/")+"Html/"+fileame;//Caminho de salvamento do arquivo html gerado
out.print(templateContent);
FileOutputStream fileoutputstream = new FileOutputStream(fileame);//Cria um fluxo de saída de arquivo
byte tag_bytes[] = templateContent.getBytes();
arquivooutputstream.write(tag_bytes);
arquivooutputstream.close();
}
if(conn!=null)
{
conn.close();
}
if(stmt!=nulo)
{
stmt.close();
}
%>
//Arquivo de conexão com banco de dados
import java.sql.*;
classe pública DBconn {
publicDBconn() {
// TODO stub do construtor gerado automaticamente
}
conexão estática pública getConnection()
{
Conexão conexão = null;
tentar {
Class.forName("org.gjt.mm.mysql.Driver");
conn = DriverManager.getConnection("jdbc:mysql://" + "localhost" + "/" + "teste" +
"?useUnicode=true&characterEncoding=GB2312","root","111111");
}
pegar(Exceção e)
{
e.printStackTrace();
}
conexão de retorno;
}
/*public static void main(String[] args) lança exceção
{
Conexão con=getConnection();
System.out.println(con.isClosed());
}
*/
}
//Arquivo de modelo
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 ">
<cabeça>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<título>#título#</título>
</head>
<corpo>
<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">#autor#</td>
</tr>
</tabela>
</body>
</html>