เอกสารการเรียนของ Jsp&Servelet (1)
ผู้เขียน:Eve Cole
เวลาอัปเดต:2009-07-02 17:15:10
1.1 เขียนโปรแกรมเซิร์ฟเล็ต
1.2 เขียนโปรแกรม Jsp
1.3 คอมไพล์โปรแกรม Servlet
1.4 จัดทำแพ็คเกจโปรแกรม Servlets และ Jsps
1.5 สร้างตัวอธิบายการใช้งาน
1.1 เขียนโปรแกรมเซิร์ฟเล็ต
ปัญหา คุณต้องการเขียนเซิร์ฟเล็ตเป็นเว็บแอปพลิเคชัน วิธีแก้ไข เขียนคลาส java ที่สืบทอดจาก javax.servlet.http.HttpServlet อันดับแรก จะต้องเทแพ็กเกจคลาส servlet.jar คุณจะต้องมีคลาสไลบรารีอยู่ข้างในเพื่อคอมไพล์โปรแกรมเซิร์ฟเล็ตนี้
การสนทนา โปรแกรมเซิร์ฟเล็ตคือคลาส Java ที่ใช้เพื่อตอบสนองเนื้อหาไดนามิกที่ร้องขอโดยไคลเอ็นต์ผ่านเครือข่าย หากคุณคุ้นเคยกับโปรแกรม (CGI) เซิร์ฟเล็ตเทคโนโลยี java ก็สามารถแทนที่โปรแกรม CGI ได้อย่างสมบูรณ์ มักเรียกว่าคอมโพเนนต์ของเว็บ โปรแกรมเซิร์ฟเล็ตที่ทำงานในสภาพแวดล้อมรันไทม์จะถูกจัดเตรียมโดยคอนเทนเนอร์เซิร์ฟ เช่น Tomcat และ Bea WebLogic
หมายเหตุ: คอนเทนเนอร์เว็บสามารถเป็นได้
Servlets ได้รับการติดตั้งในเว็บคอนเทนเนอร์โดยเป็นส่วนหนึ่งของเว็บแอปพลิเคชัน แอปพลิเคชันนี้จะมีทรัพยากรบนเว็บ เช่นเดียวกับหน้า HTML, รูปภาพ, คลิปมัลติมีเดีย, เซิร์ฟเล็ต, jsps, ไฟล์การกำหนดค่า xml, คลาสรันไทม์ของ Java และไลบรารีคลาส เมื่อปรับใช้เว็บแอปพลิเคชันในคอนเทนเนอร์ของเว็บ คอนเทนเนอร์จะสร้างและโหลดอินสแตนซ์ของคลาสเซิร์ฟเล็ต java ลงใน JVM . จัดการคำขอสำหรับเซิร์ฟเล็ต
เซิร์ฟเล็ตทั้งหมดสืบทอดอินเทอร์เฟซ javax.servlet.Servlet โปรแกรมเมอร์ที่พัฒนาเว็บแอปพลิเคชันจะเขียนเซิร์ฟเล็ตพิเศษ
สืบทอดมาจาก javax.servlet.http.HttpServlet คลาสนามธรรมใช้อินเทอร์เฟซ Servlet และได้รับการออกแบบมาโดยเฉพาะสำหรับการจัดการคำขอ HTTP
เมื่อเว็บคอนเทนเนอร์สร้างอินสแตนซ์เซิร์ฟเล็ต ลำดับพื้นฐานจะเป็นดังนี้:
1. อันดับแรก เซิร์ฟเล็ตคอนเทนเนอร์จะเรียกใช้เมธอด init() ของเซิร์ฟเล็ต ซึ่งจะเริ่มต้นทรัพยากรสำหรับเซิร์ฟเล็ตที่จะใช้ จดทะเบียนเป็นคนตัดไม้ วิธีการ init() นี้จะถูกเรียกเพียงครั้งเดียวตลอดวงจรชีวิตของเซิร์ฟเล็ตทั้งหมด
2. เมธอด init() เตรียมข้อมูลเบื้องต้นให้กับอ็อบเจ็กต์ ซึ่งสืบทอดอินเทอร์เฟซ java.servlet.ServletConfig อ็อบเจ็กต์นี้ช่วยให้เซิร์ฟเล็ตเริ่มต้นพารามิเตอร์ที่ประกาศในตัวให้คำอธิบายถึงการใช้งาน ServletConfig ยังให้สิทธิ์การเข้าถึงเซิร์ฟเล็ตไปยังอ็อบเจ็กต์ javax.servlet.ServletContext ซึ่งเซิร์ฟเล็ตสามารถใช้เพื่อบันทึกข้อมูล ส่งคำขอไปยังส่วนประกอบของเว็บอื่นๆ และใช้ทรัพยากรเว็บอื่นๆ ในแอปพลิเคชันเดียวกัน
3. เซิร์ฟเล็ตคอนเทนเนอร์เรียกใช้เมธอด service() ของเซิร์ฟเล็ตนี้เพื่อตอบสนองต่อคำขอบางอย่างของเซิร์ฟเล็ต ตาม HttpServlets นั้น service() จะเรียกใช้วิธี HTTP ที่เหมาะสมโดยอัตโนมัติเพื่อจัดการคำขอโดยการเรียกเมธอด doGet() หรือ doPost() ของเซิร์ฟเล็ต สำหรับหลายๆ ตัวอย่าง ผู้ใช้ส่งคำขอ Post และเซิร์ฟเล็ตตอบกลับคำขอโดยดำเนินการเมธอด doPost()
4. เมื่อเรียกใช้เมธอด doPost() และ doGet() ของ HttpServlets หลักสองตัว คอนเทนเนอร์เซิร์ฟเล็ตจะสร้างอ็อบเจ็กต์ javax..servlet.http.HttpServletRequest และ HttpServletResponse และส่งผ่านเป็นพารามิเตอร์ไปยังวิธีการประมวลผลคำขอเหล่านี้
http://www.downcodes.com/
5. จัดการวงจรชีวิตของเซิร์ฟเล็ต หรือกำหนดเวลาการประมวลผลของอินสแตนซ์เซิร์ฟเล็ตนี้ตามคำร้องขอและเวลาที่มีอยู่บนเครื่องเสมือน Java เมื่อเซิร์ฟเล็ตคอนเทนเนอร์เริ่มที่จะลบเซิร์ฟเล็ต เมธอด destroy() ของเซิร์ฟเล็ตจะถูกเรียกใช้ ซึ่งทรัพยากรทั้งหมด เช่น การเชื่อมต่อฐานข้อมูล จะถูกปล่อยออกมา
ตัวอย่าง HttpServlet ทั่วไป
แพ็คเกจ com.mydev;
นำเข้า java.io.IOException; นำเข้า java.io.PrintWriter;
นำเข้า java.util.Enumeration; นำเข้า javax.servlet.ServletException;
นำเข้า javax.servlet.http.HttpServlet;
นำเข้า javax.servlet.http.HttpServletRequest;
นำเข้า javax.servlet.http.HttpServletResponse;
//ต้องสืบทอดอินเทอร์เฟซ HttpServlet
FirstServlet คลาสสาธารณะขยาย HttpServlet ...{
โมฆะสาธารณะ doGet (คำขอ HttpServletRequest, การตอบสนอง HttpServletResponse) พ่น ServletException, java.io.IOException ...{
//ตั้งค่าประเภท MIME ของการตอบกลับ "text/html"
response.setContentType("ข้อความ/html");
//ใช้ PrintWriter เพื่อส่งข้อมูลข้อความไปยังไคลเอนต์ที่ร้องขอ
//เซิร์ฟเล็ต
java.io.PrintWriter ออก = response.getWriter( );
//เริ่มประกอบเนื้อหา HTML out.println("<html><head>");
out.println("<title>หน้าช่วยเหลือ</title></head><body>");
out.println("<h2>กรุณาส่งข้อมูลของคุณ</h2>");
//ตรวจสอบให้แน่ใจว่า method="post" เพื่อให้วิธีการบริการ servlet
//เรียก doPost เพื่อตอบสนองต่อการส่งแบบฟอร์มนี้
out.println( "<form method="post" action ="" + request.getContextPath( ) + "/firstservlet" >");
out.println("<table border="0"><tr><td valign="top">");
out.println("ชื่อของคุณ: </td> <td valign="top">");
out.println("<input type="text" name="firstname" size="20">");
out.println("</td></tr><tr><td valign="top">");
out.println("นามสกุลของคุณ: </td> <td valign="top">");
out.println("<input type="text" name="lastname" size="20">");
out.println("</td></tr><tr><td valign="top">");
out.println("อีเมลของคุณ: </td> <td valign="top">");
out.println("<input type="text" name="email" size="20">");
out.println("</td></tr><tr><td valign="top">");
out.println("<input type="submit" value="ส่งข้อมูล"></td></tr>");
out.println("</table></form>"); out.println("</body></html>");
-
//รับ
โมฆะสาธารณะ doPost (คำขอ HttpServletRequest, การตอบสนอง HttpServletResponse) พ่น ServletException, java.io.IOException ... {
//แสดงชื่อและค่าพารามิเตอร์
การแจงนับ paramNames = request.getParameterNames( );
สตริง parName;
//นี่จะเก็บชื่อของพารามิเตอร์
บูลีน EmptyEnum = เท็จ;
ถ้า (! paramNames.hasMoreElements( ))
EmptyEnum = จริง;
//ตั้งค่าประเภท MIME ของการตอบกลับ "text/html"
response.setContentType("ข้อความ/html");
//ใช้ PrintWriter เพื่อส่งข้อมูลข้อความไปยังไคลเอนต์
java.io.PrintWriter ออก = response.getWriter( );
//เริ่มประกอบเนื้อหา HTML
out.println("<html><head>");
out.println("<title>พารามิเตอร์ที่ส่ง</title></head><body>");
ถ้า (emptyEnum) ...{
out.println( "<h2>ขออภัย คำขอไม่มีพารามิเตอร์ใดๆ</h2>");
} อื่น ...{
out.println( "<h2>นี่คือค่าพารามิเตอร์ที่ส่ง</h2>");
-
ในขณะที่(paramNames.hasMoreElements( )) ...{
parName = (สตริง) paramNames.nextElement( );
out.println( "<strong>" + parName + "</strong> : " + request.getParameter(parName));
out.println("<br />");
}//ในขณะที่
out.println("</body></html>");
-
//doPost
-
คุณอาจสังเกตเห็นว่า doGet() และ doPost() แต่ละตัวจะส่ง ServletException และ IOException นั่นเป็นเพราะว่า response.getWriter() จะส่งข้อยกเว้น IO
http://blog.csdn.net/bruceleey/archive/2007/02/07/1503843.aspx