การแนะนำ:
ลองใช้เว็บไซต์ขนาดใหญ่สองแห่งเป็นตัวอย่างในการเปรียบเทียบ:
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>
</หัว>
<ร่างกาย>
<P align="ศูนย์">
#title#<BR><BR><BR>
ผู้แต่ง: #author#<BR><BR>
<บีอาร์>
#เนื้อหา#<BR><BR><BR><BR>
</ป>
</ร่างกาย>
</html>
สร้างคลาสหรือไฟล์ jsp ที่ประมวลผลเทมเพลต (เพื่ออธิบายปัญหา เรามาเริ่มด้วยไฟล์ jsp ธรรมดาเป็นตัวอย่าง)
filePath = request.getRealPath("/")+"WEB-INF/templates/template.htm";
out.print(เส้นทางไฟล์);
สตริง templateContent="";
FileInputStream fileinputstream = new FileInputStream(filePath);//อ่านไฟล์โมดูล
ความยาว int = fileinputstream.available ();
ไบต์ไบต์ [] = ไบต์ใหม่ [ความยาว];
fileinputstream.read(ไบต์);
ไฟล์อินพุทสตรีม.ปิด();
templateContent = สตริงใหม่ (ไบต์);
out.print("ต่อไปนี้คือเนื้อหาเทมเพลต:<br>"+templateContent+"<br> ต่อไปนี้คือเนื้อหา html หลังจากการแทนที่<br><hr>");
templateContent=templateContent.replaceAll("#title#",หัวข้อ);
templateContent=templateContent.replaceAll("#author#",editor);//แทนที่ตำแหน่งที่เกี่ยวข้องในโมดูล
templateContent=templateContent.replaceAll("#content#",เนื้อหา);
// รับชื่อไฟล์ตามเวลา
ปฏิทินปฏิทิน = 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);
fileoutputstream.close();
เทคโนโลยีหลักก็เป็นเช่นนี้ หากคุณต้องการประสิทธิภาพที่สูงขึ้น คุณสามารถใช้ FreeMarker เป็นเทมเพลตแทนได้
หลังจากการดีบักบางอย่างก็สำเร็จ - สิ่งที่แนบมา
คือซอร์สโค้ด -
JDK 1.5 +ECLIPSE +TOMCAT 5.0.28 +
การทดสอบฐานข้อมูล MYSQL 5.0 ข่าวชื่อตาราง
ช่อง: id 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("ความสำเร็จ");
%>
-
สตริง filePath = request.getRealPath("/")+"template.htm";
System.out.println(filePath);
เทมเพลตสตริงเนื้อหา;
FileInputStream fileinputstream = ใหม่ FileInputStream (filePath);
int lenght = fileinputstream.available(); //available() ส่งกลับจำนวนไบต์ที่สามารถอ่านได้จากสตรีมอินพุตของไฟล์นี้โดยไม่ปิดกั้น
ไบต์ไบต์ [] = ไบต์ใหม่ [ความยาว];
fileinputstream.read (ไบต์); // อ่าน (ไบต์ [] b) อ่านข้อมูลได้ถึง b.length ไบต์จากสตรีมอินพุตนี้ลงในอาร์เรย์ไบต์
ไฟล์อินพุทสตรีม.ปิด();
//templateContent = สตริงใหม่ (ไบต์);
ชื่อสตริง;
เนื้อหาสตริง
ผู้เขียนสตริง;
ในขณะที่(อาร์เอสถัดไป())
-
templateContent = new String(bytes);//หากคุณไม่ใช้ประโยคนี้ หลังจากแทนที่ครั้งเดียว จะไม่มีเครื่องหมาย #**# ใน templateContent จึงจะเกิดใหม่ได้
title = Rs.getString("ชื่อเรื่อง");
content = Rs.getString("เนื้อหา");
ผู้เขียน = Rs.getString("ผู้เขียน");
out.println(ชื่อ+"********"+เนื้อหา+"****"+ผู้เขียน);
out.print("ต่อไปนี้คือเนื้อหาเทมเพลต:<br>"+templateContent+"<br> ต่อไปนี้คือเนื้อหา html หลังจากการแทนที่<br><hr>");
templateContent=templateContent.replaceAll("#title#",หัวข้อ);
templateContent=templateContent.replaceAll("#author#",author);//แทนที่ตำแหน่งที่เกี่ยวข้องในโมดูล
templateContent=templateContent.replaceAll("#content#",content);
// รับชื่อไฟล์ตามเวลา
ปฏิทินปฏิทิน = Calendar.getInstance();
ไฟล์สตริง = String.valueOf(calendar.getTimeInMillis()) +".html";
fileame = request.getRealPath("/")+"Html/"+fileame;//พาธการบันทึกไฟล์ html ที่สร้างขึ้น
out.print(เนื้อหาแม่แบบ);
FileOutputStream fileoutputstream = new FileOutputStream(fileame);//สร้างไฟล์สตรีมเอาต์พุต
ไบต์ tag_bytes[] = templateContent.getBytes();
fileoutputstream.write(tag_bytes);
fileoutputstream.close();
}
ถ้า (conn!=null)
-
conn.ปิด();
-
ถ้า(stmt!=null)
-
stmt.ปิด();
-
%>
//
นำเข้าไฟล์การเชื่อมต่อฐานข้อมูล java.sql.*;
DBconn คลาสสาธารณะ {
publicDBconn() {
// TODO ต้นขั้วคอนสตรัคเตอร์ที่สร้างขึ้นอัตโนมัติ
}
การเชื่อมต่อแบบคงที่สาธารณะ getConnection()
-
การเชื่อมต่อการเชื่อมต่อ = null;
พยายาม {
Class.forName("org.gjt.mm.mysql.Driver");
conn = DriverManager.getConnection("jdbc:mysql://" + "localhost" + "/" + "ทดสอบ" +
"?useUnicode=true&CharacterEncoding=GB2312", "root", "111111");
-
จับ (ยกเว้น e)
-
e.printStackTrace();
-
กลับคอน;
-
/* โมฆะสาธารณะคงที่ 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>
</หัว>
<ร่างกาย>
<table width="380" height="107" border="0" cellpadding="0" cellspacing="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>
</ตาราง>
</ร่างกาย>
</html>