مقدمة:
لنأخذ موقعين إلكترونيين كبيرين كمثال للمقارنة:
51job وZhaopin Recruitment (يجب أن أذكر أولاً أنني لا أقوم بالإعلان عنهما، فأنا أستخدمهما فقط كأمثلة للمقارنة الفنية)
يستخدم 51job تقنية PHP "متقدمة" نسبيًا، بينما يستخدم Zhaopin تقنية ASP متخلفة نسبيًا، ولكن قد نشعر بوضوح أن سرعة استجابة 51job بطيئة جدًا مقارنة بـ Zhaopin. قد يلاحظ ذلك الشخص اليقظ. على الرغم من أن Zhilian يستخدم ASP، إلا أنه يستخدم تقنية أخرى أكثر ذكاءً - تقنية إنشاء الصفحات الثابتة لـ ASP. يتم تحويل جميع الصفحات الديناميكية بشكل أساسي إلى صفحات ثابتة بتنسيق HTML دون الوصول إلى قاعدة البيانات.
دعونا نناقش كيفية تحويل jsp إلى html؟؟
قم أولاً بعمل قالب. لا يوجد حد لللاحقة، ولكن يتم استخدام *.template بشكل عام كمثال.
<أتش تي أم أل>
<الرأس>
<title>#title#</title>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<LINK href="../css.css" rel=stylesheet type=text/css>
</الرأس>
<الجسم>
<P محاذاة = "المركز">
#العنوان#<BR><BR><BR>
المؤلف: #author#<BR><BR>
<ر>
#المحتوى#<BR><BR><BR><BR>
</ف>
</الجسم>
</html>
أنشئ ملف فئة أو ملف jsp يعالج القوالب (لتوضيح المشكلة، لنبدأ بملف jsp بسيط كمثال)
filePath = request.getRealPath("/")+"WEB-INF/templates/template.htm";
out.print(filePath);
محتوى سلسلة القالب = ""؛
FileInputStream fileinputstream = FileInputStream الجديد (filePath)؛ // قراءة ملف الوحدة النمطية
int lenght = fileinputstream.available();
بايت بايت[] = بايت جديد[الطول];
fileinputstream.read(bytes);
fileinputstream. Close();
templateContent = new String(bytes);
out.print("ما يلي هو محتوى القالب:<br>"+templateContent+"<br> ما يلي هو محتوى HTML بعد الاستبدال<br><hr>");
templateContent=templateContent.replaceAll("#title#",title);
templateContent=templateContent.replaceAll("#author#",editer);// استبدل الأماكن المقابلة في الوحدة النمطية
templateContent=templateContent.replaceAll("#content#",content);
// احصل على اسم الملف بناءً على الوقت
تقويم التقويم = Calendar.getInstance();
String fileame = 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);
fileoutputstream. Close();
حسنًا، التكنولوجيا الأساسية هي هكذا إذا كنت تحتاج إلى أداء أعلى، فيمكنك استخدام FreeMarker كقالب بدلاً من ذلك.
وبعد بعض التصحيح، كان ناجحا. . المرفقة
هي كود المصدر. .
JDK 1.5 +ECLIPSE +TOMCAT 5.0.28 +
اختبار قاعدة بيانات MYSQL 5.0، أخبار اسم الجدول
الحقول: المعرف int ينمو تلقائيًا، العنوان varchar(20)، المحتوى varchar(200)، المؤلف varchar(10)
makeFile.jsp
<%
اتصال conn = DBconn.getConnection();
البيان stmt = conn.createStatement();
ResultSet Rs = stmt.executeQuery("select * from news");
System.out.println("النجاح"
%>
<%
String filePath = request.getRealPath("/")+"template.htm";
System.out.println(filePath);
محتوى قالب السلسلة؛
FileInputStream fileinputstream = new FileInputStream(filePath);
int lenght = fileinputstream.available(); //available() يُرجع عدد البايتات التي يمكن قراءتها من دفق إدخال الملف هذا دون حظر.
byte bytes[] = new byte[lenght];
fileinputstream.read(bytes); //read(byte[] b) قراءة ما يصل إلى b.length بايت من البيانات من دفق الإدخال هذا إلى صفيف بايت.
fileinputstream. Close();
//templateContent = new String(bytes);
عنوان السلسلة؛
محتوى السلسلة؛
مؤلف السلسلة؛
بينما (Rs.next ())
{
templateContent = new String(bytes);// إذا لم تستخدم هذه الجملة، بعد استبدالها مرة واحدة، فلن تكون هناك علامة #**# في templateContent. حتى تتجدد
العنوان = Rs.getString("العنوان");
المحتوى = Rs.getString("المحتوى");
المؤلف = Rs.getString("المؤلف");
println(title+"********"+content+"****"+author);
out.print("ما يلي هو محتوى القالب:<br>"+templateContent+"<br> ما يلي هو محتوى HTML بعد الاستبدال<br><hr>");
templateContent=templateContent.replaceAll("#title#",title);
templateContent=templateContent.replaceAll("#author#",author);// استبدل الأماكن المقابلة في الوحدة النمطية
templateContent=templateContent.replaceAll("#content#",content);
// احصل على اسم الملف بناءً على الوقت
تقويم التقويم = Calendar.getInstance();
String fileame = 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();
}
if(conn!=null)
{
conn.Close();
}
إذا (ستمت! = فارغة)
{
stmt. Close();
}
%>
استيراد
ملف اتصال قاعدة البيانات
java.sql.*;
الطبقة العامة DBconn {
عامة دي بيكون () {
// TODO كعب المنشئ الذي تم إنشاؤه تلقائيًا
}
اتصال ثابت عام getConnection()
{
اتصال كون = فارغ؛
يحاول {
Class.forName("org.gjt.mm.mysql.Driver");
conn = DriverManager.getConnection("jdbc:mysql://" + "المضيف المحلي" + "/" + "اختبار" +
"?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>
</الرأس>
<الجسم>
<عرض الجدول = "380" الارتفاع = "107" الحدود = "0" خلية الحشو = "0" تباعد الخلايا = "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>