Введение:
В качестве примера для сравнения возьмем два крупных сайта:
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>
<тело>
<P выравнивание="центр">
#title#<BR><BR><BR>
Автор: #author#<BR><BR>
<BR>
#content#<BR><BR><BR><BR>
</P>
</тело>
</html>
Создайте класс или файл jsp, который обрабатывает шаблоны (чтобы проиллюстрировать проблему, начнем с простого файла jsp в качестве примера).
filePath = request.getRealPath("/")+"WEB-INF/templates/template.htm";
out.print(путь к файлу);
Строка templateContent="";
FileInputStream fileinputstream = новый FileInputStream(filePath);//Читать файл модуля
длина int = fileinputstream.available();
байт байты[] = новый байт[длина];
fileinputstream.read(байты);
файлвходной поток.закрыть();
templateContent = новая строка (байты);
out.print("Ниже приведено содержимое шаблона:<br>"+templateContent+"<br> Ниже приведено содержимое HTML после замены<br><hr>");
templateContent=templateContent.replaceAll("#title#",title);
templateContent=templateContent.replaceAll("#author#",editer);//Заменяем соответствующие места в модуле
templateContent=templateContent.replaceAll("#content#",content);
// Получаем имя файла по времени
Календарь Calendar = Calendar.getInstance();
Строковое имя файла = 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);
файлoutputstream.close();
Итак, основная технология такова. Если вам требуется более высокая производительность, вы можете использовать FreeMarker в качестве шаблона.
После некоторой отладки все прошло успешно. . Прилагается
исходный код. .
JDK 1.5 +ECLIPSE +TOMCAT 5.0.28 + база данных MYSQL 5.0
TEST, новости имени таблицы
Поля: id int автоматически увеличивается, Title varchar(20), Content varchar(200), Author varchar(10)
makeFile.jsp
<%
Соединение conn = DBconn.getConnection();
Заявление stmt = conn.createStatement();
ResultSet Rs = stmt.executeQuery("выберите * из новостей");
"
);
<%
Строка filePath = request.getRealPath("/")+"template.htm";
System.out.println(filePath);
Строка templateContent;
FileInputStream fileinputstream = новый FileInputStream (filePath);
int lenght = fileinputstream.available(); //available() Возвращает количество байтов, которые можно прочитать из входного потока файла без блокировки.
byte bytes[] = new byte[lenght];
fileinputstream.read(bytes); //read(byte[] b) Считайте до b.length байт данных из этого входного потока в массив байтов.
файлвходной поток.закрыть();
//templateContent = новая строка (байты);
Строковый заголовок;
Строковое содержимое;
Автор строки;
в то время как (Rs.next())
{
templateContent = new String(bytes);//Если вы не используете это предложение, после его замены один раз в templateContent не будет знака #**#. Итак, чтобы возродить
title = Rs.getString("Название");
контент = Rs.getString("Содержимое");
автор = Rs.getString("Автор");
out.println(title+"********"+content+"****"+автор);
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.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);
fileoutputstream.close();
если
(conn!=null)
{
конн.закрыть();
}
если (стмт! = ноль)
{
стмт.закрыть();
}
%>
//Импорт файла подключения к базе данных
java.sql.*;
общественный класс DBconn {
publicDBconn() {
// TODO Автоматически сгенерированная заглушка конструктора
}
публичное статическое соединение getConnection()
{
Соединение конн = ноль;
пытаться {
Class.forName("org.gjt.mm.mysql.Driver");
conn = DriverManager.getConnection("jdbc:mysql://" + "localhost" + "/" + "test" +
"?useUnicode=true&characterEncoding=GB2312","root","111111");
}
поймать (Исключение е)
{
е.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>
<тело>
<table width="380" height="107" border="0" cellpadding="0" cellpacing="1" bgcolor="#FFCC99">
<тр>
<td height="16" bgcolor="#FFCC99"><div align="center">#title#</div></td>
</tr>
<тр>
<td bgcolor="#FFFFFF">#content#</td>
</tr>
<тр>
<td height="13" align="right" bgcolor="#FFFFFF">#author#</td>
</tr>
</таблица>
</тело>
</html>