พื้นฐานของเซิร์ฟเล็ต การสร้างแอปพลิเคชัน Java โดยใช้ Servlets การใช้เซิร์ฟเล็ตในแอปพลิเคชันเว็บ

Servlets คือโปรแกรม Java ที่ทำงานบนฝั่งเซิร์ฟเวอร์ของเว็บแอปพลิเคชัน เช่นเดียวกับที่แอปเพล็ตขยายฟังก์ชันการทำงานของเว็บเบราว์เซอร์แบบไดนามิก เซิร์ฟเล็ตจะขยายฟังก์ชันการทำงานของเว็บเซิร์ฟเวอร์แบบไดนามิก แม้ว่าเซิร์ฟเล็ตจะสามารถตอบสนองคำขอใดๆ ได้ แต่โดยทั่วไปแล้วจะใช้เพื่อขยายเว็บเซิร์ฟเวอร์ สำหรับแอปพลิเคชันดังกล่าว เทคโนโลยี Java Servlet จะกำหนดคลาสเซิร์ฟเล็ตเฉพาะ HTTP แพ็คเกจ javax.servlet และ javax.servlet.http จัดเตรียมอินเทอร์เฟซและคลาสสำหรับการสร้างเซิร์ฟเล็ต

  • โครงสร้างของโครงการเว็บคืออะไร?

  • คอนเทนเนอร์เซิร์ฟเล็ตคืออะไร? วงจรชีวิตของเซิร์ฟเล็ต

คอนเทนเนอร์เซิร์ฟเล็ตเป็นโปรแกรมที่จัดการวงจรชีวิตของเซิร์ฟเล็ต
วงจรชีวิตของเซิร์ฟเล็ต: มันถูกจัดการโดยคอนเทนเนอร์เซิร์ฟเล็ต ในครั้งแรกที่มีการเข้าถึงเซิร์ฟเล็ต เซิร์ฟเล็ตจะถูกโหลดเข้าสู่หน่วยความจำ และเรียกใช้เมธอด init() ตลอดการดำเนินการของแอปพลิเคชัน การเรียกใช้เมธอด service() จะเกิดขึ้นเพื่อประมวลผลคำขอของไคลเอ็นต์ เมื่อแอปพลิเคชันสิ้นสุดลง เมธอด destroy() จะถูกเรียกใช้ และเซิร์ฟเล็ตจะถูกยกเลิกการโหลดจากหน่วยความจำ

  • งานและฟังก์ชันการทำงานของคอนเทนเนอร์เซิร์ฟเล็ตคืออะไร?

คอนเทนเนอร์เซิร์ฟเล็ตสามารถทำหน้าที่เป็นเว็บเซิร์ฟเวอร์แบบสแตนด์อโลนเต็มรูปแบบ ทำหน้าที่เป็นผู้ให้บริการเพจสำหรับเว็บเซิร์ฟเวอร์อื่น เช่น Apache หรือรวมเข้ากับแอปพลิเคชันเซิร์ฟเวอร์ Java EE ให้การแลกเปลี่ยนข้อมูลระหว่างเซิร์ฟเล็ตและไคลเอนต์ ทำหน้าที่ต่างๆ เช่น การสร้างสภาพแวดล้อมซอฟต์แวร์สำหรับเซิร์ฟเล็ตที่ทำงาน การระบุและการอนุญาตไคลเอนต์ การจัดระเบียบเซสชั่นสำหรับแต่ละเซิร์ฟเล็ต

  • sendRedirect() และ forward() แตกต่างกันอย่างไร?

ในการเรียก JSP โดยใช้พาธสัมพัทธ์ จะใช้เมธอด sendRedirect() ในการเข้าถึง JSP โดยใช้พาธสัมบูรณ์ ความแตกต่างระหว่างเมธอดเหล่านี้ก็คือ เมื่อใช้เมธอด forward() ออบเจ็กต์คำขอที่มีอยู่แล้วจะถูกส่งผ่าน และเมื่อมีการเรียกใช้เมธอด sendRedirect() คำขอใหม่จะถูกสร้างขึ้น ในกรณีหลังนี้ ข้อมูลควรถูกส่งไปยังวัตถุอื่น นอกจากนี้ เมธอด forward() ยังทำงานได้เร็วกว่าอีกด้วย

  • คุณรู้อะไรเกี่ยวกับตัวกรองเซิร์ฟเล็ต

การใช้อินเทอร์เฟซตัวกรองทำให้คุณสามารถสร้างออบเจ็กต์ที่ดักฟังคำขอและสามารถเปลี่ยนส่วนหัวและเนื้อหาของคำขอไคลเอ็นต์ได้ ตัวกรองไม่ได้สร้างคำขอหรือการตอบกลับ แต่เพียงแก้ไขเท่านั้น ตัวกรองดำเนินการประมวลผลคำร้องขอล่วงหน้าก่อนที่จะถึงเซิร์ฟเล็ต ตามด้วย (ถ้าจำเป็น) โดยการประมวลผลการตอบสนองที่มาจากเซิร์ฟเล็ต ตัวกรองสามารถโต้ตอบกับรีซอร์สประเภทต่างๆ โดยเฉพาะ ทั้งเซิร์ฟเล็ตและเพจ JSP ตัวกรองเซิร์ฟเล็ตสามารถ:

  • สกัดกั้นการเริ่มต้นเซิร์ฟเล็ตก่อนที่จะเริ่มต้นเซิร์ฟเล็ต
  • กำหนดเนื้อหาของคำร้องขอก่อนที่จะเริ่มต้นเซิร์ฟเล็ต
  • แก้ไขส่วนหัวของคำขอและข้อมูลซึ่งบรรจุคำขอที่เข้ามา
  • แก้ไขส่วนหัวการตอบกลับและข้อมูลซึ่งบรรจุการตอบกลับที่ได้รับ
  • สกัดกั้นการเริ่มต้นเซิร์ฟเล็ตหลังจากเข้าถึงเซิร์ฟเล็ต

ตัวกรองเซิร์ฟเล็ตสามารถกำหนดค่าให้ทำงานบนเซิร์ฟเล็ตเดียวหรือกลุ่มของเซิร์ฟเล็ตได้ พื้นฐานสำหรับการสร้างตัวกรองคืออินเทอร์เฟซ javax.servlet.Filter ซึ่งใช้สามวิธี:

  • เป็นโมฆะ init (การกำหนดค่า FilterConfig) พ่น ServletException;
  • โมฆะทำลาย();
  • เป็นโมฆะ doFilter (คำขอ ServletRequest, การตอบสนอง ServletResponse, ห่วงโซ่ FilterChain) พ่น IOException, ServletException;

มีการเรียกเมธอด init() ก่อนที่ตัวกรองจะเริ่มทำงานและตั้งค่าออบเจ็กต์การกำหนดค่าของตัวกรอง วิธีการ doFilter จะทำงานจริงของตัวกรอง ดังนั้น เซิร์ฟเวอร์จะเรียก init() หนึ่งครั้งเพื่อเริ่มตัวกรอง จากนั้นจึงเรียก doFilter() หลายครั้งตามที่ร้องขอไปยังตัวกรองนี้โดยตรง หลังจากที่ตัวกรองทำงานเสร็จสิ้นแล้ว จะเรียกเมธอด destroy()

  • เหตุใดเราจึงต้องมีผู้ฟังในเซิร์ฟเล็ต?

Listener บริบทและเซสชันคือคลาสที่สามารถติดตามเมื่อบริบทหรือเซสชันถูกเตรียมใช้งาน หรือติดตามว่าเมื่อใดควรถูกทำลาย และเมื่อใดที่คุณลักษณะถูกเพิ่มหรือลบออกจากบริบทหรือเซสชัน Servlet 2.4 ขยายโมเดลตัวฟังคำขอโดยอนุญาตให้คุณติดตามวิธีการสร้างและทำลายคำขอ และวิธีเพิ่มและลบคุณลักษณะออกจากเซิร์ฟเล็ต Servlet 2.4 เพิ่มคลาสต่อไปนี้:

  • ServletRequestListener
  • ServletRequestEvent
  • ServletRequestAttributeListener
  • ServletRequestAttributeEvent

  • วิธีจัดการกับข้อยกเว้นที่เกิดจากเซิร์ฟเล็ตอื่นในแอปพลิเคชัน

เนื่องจากเบราว์เซอร์เข้าใจเฉพาะ HTML เท่านั้น เมื่อแอปพลิเคชันส่งข้อยกเว้น คอนเทนเนอร์เซิร์ฟเล็ตจะจัดการข้อยกเว้นและสร้างการตอบกลับ HTML ซึ่งคล้ายกับสิ่งที่เกิดขึ้นกับรหัสข้อผิดพลาดเช่น 404, 403 เป็นต้น Servlet API ให้การสนับสนุนเซิร์ฟเล็ตดั้งเดิมเพื่อจัดการกับข้อยกเว้นและข้อผิดพลาด ซึ่งเราสามารถระบุในตัวอธิบายการปรับใช้ งานหลักของเซิร์ฟเล็ตดังกล่าวคือการจัดการข้อผิดพลาดหรือข้อยกเว้น และส่งการตอบสนอง HTML ที่ชัดเจนไปยังผู้ใช้ ตัวอย่างเช่น คุณสามารถระบุลิงก์ไปยังหน้าหลัก รวมถึงคำอธิบายรายละเอียดบางอย่างเกี่ยวกับข้อผิดพลาดได้

  • ตัวอธิบายการปรับใช้คืออะไร?

ตัวอธิบายการปรับใช้คือไฟล์การกำหนดค่าของสิ่งประดิษฐ์ที่จะนำไปใช้กับคอนเทนเนอร์เซิร์ฟเล็ต ในข้อกำหนดของแพลตฟอร์ม Java, Enterprise Edition ตัวอธิบายการปรับใช้จะอธิบายถึงวิธีการปรับใช้ส่วนประกอบ โมดูล หรือแอปพลิเคชัน (เช่น เว็บหรือแอปพลิเคชันระดับองค์กร)

ไฟล์การกำหนดค่านี้ระบุตัวเลือกการปรับใช้สำหรับโมดูลหรือแอปพลิเคชันที่มีการตั้งค่าเฉพาะ ตัวเลือกความปลอดภัย และอธิบายข้อกำหนดการกำหนดค่าเฉพาะ ไวยากรณ์สำหรับไฟล์ตัวอธิบายการปรับใช้ใช้ XML

  • จะใช้การเปิดตัวเซิร์ฟเล็ตด้วยการเปิดตัวแอปพลิเคชันได้อย่างไร

โดยปกติคอนเทนเนอร์เซิร์ฟเล็ตจะโหลดเซิร์ฟเล็ตตามคำขอแรกของไคลเอ็นต์ แต่บางครั้งจำเป็นต้องโหลดเซิร์ฟเล็ตทันทีที่จุดเริ่มต้นของแอปพลิเคชัน (เช่น หากเซิร์ฟเล็ตมีขนาดใหญ่และจะใช้เวลานานในการโหลด) เมื่อต้องการทำเช่นนี้ คุณต้องใช้องค์ประกอบ load-on-startup ในตัวอธิบาย (หรือหมายเหตุประกอบ loadOnStartup) ซึ่งจะระบุว่าควรโหลดเซิร์ฟเล็ตเมื่อเริ่มต้นหรือไม่

ค่าจะต้องเป็น int หากค่าเป็นลบ เซิร์ฟเล็ตจะถูกโหลดเมื่อไคลเอนต์ร้องขอ และหากเป็น 0 และมากกว่านั้น เซิร์ฟเล็ตจะถูกโหลดเมื่อเริ่มต้นแอปพลิเคชัน ยิ่งตัวเลขต่ำ เซิร์ฟเล็ตก็จะยิ่งอยู่ในคิวการดาวน์โหลดเร็วขึ้นเท่านั้น

  • วัตถุ ServletConfig คืออะไร

อินเทอร์เฟซ javax.servlet.ServletConfig ใช้เพื่อส่งข้อมูลการกำหนดค่าไปยังเซิร์ฟเล็ต แต่ละเซิร์ฟเล็ตมีอ็อบเจ็กต์ ServletConfig ของตัวเอง ซึ่งคอนเทนเนอร์เซิร์ฟเล็ตมีหน้าที่ในการสร้างอินสแตนซ์ หากต้องการตั้งค่าพารามิเตอร์การกำหนดค่า ให้ใช้พารามิเตอร์ init ใน web.xml (หรือคำอธิบายประกอบ WebInitParam) เมธอด getServletConfig() ใช้เพื่อรับอ็อบเจ็กต์ ServletConfig ของเซิร์ฟเล็ตที่กำหนด

  • วัตถุ ServletContext คืออะไร

อินเทอร์เฟซ javax.servlet.ServletContext กำหนดชุดวิธีการที่เซิร์ฟเล็ตใช้เพื่อสื่อสารกับคอนเทนเนอร์เซิร์ฟเล็ต ตัวอย่างเช่น การรับประเภท MIME ของไฟล์ การส่งคำขอ หรือการเขียนลงในไฟล์บันทึก ออบเจ็กต์ ServletContext มีลักษณะเฉพาะและพร้อมใช้งานสำหรับเซิร์ฟเล็ตทั้งหมดในแอปพลิเคชันเว็บ เราสามารถใช้วัตถุ ServletContext เมื่อเราต้องการให้การเข้าถึงเซิร์ฟเล็ตอย่างน้อยหนึ่งรายการกับพารามิเตอร์เริ่มต้นของเว็บแอปพลิเคชัน องค์ประกอบนี้ใช้สำหรับสิ่งนี้ ใน web.xml สามารถรับออบเจ็กต์ ServletContext ได้โดยใช้เมธอด getServletContext() บนอินเทอร์เฟซ ServletConfig

คอนเทนเนอร์เซิร์ฟเล็ตยังสามารถจัดเตรียมวัตถุบริบทที่ไม่ซ้ำกับกลุ่มของเซิร์ฟเล็ต แต่ละกลุ่มจะเชื่อมโยงกับชุด URL เส้นทางโฮสต์ของตนเอง

ServletContext ได้รับการขยายในข้อกำหนดของ Servlet 3 และมอบความสามารถในการเพิ่ม Listener และตัวกรองให้กับแอปพลิเคชันโดยทางโปรแกรม อินเทอร์เฟซนี้ยังมีวิธีการที่มีประโยชน์มากมาย เช่น getMimeType(), getResourceAsStream() เป็นต้น

  • ความแตกต่างระหว่าง ServletContext และ ServletConfig คืออะไร?

ด้านล่างนี้คือข้อแตกต่างบางประการ:

  • ServletConfig เป็นออบเจ็กต์ที่ไม่ซ้ำกันสำหรับแต่ละเซิร์ฟเล็ต ในขณะที่ ServletContext จะไม่ซ้ำกันสำหรับแอปพลิเคชันทั้งหมด
  • ServletConfig ใช้เพื่อจัดเตรียมพารามิเตอร์การเริ่มต้นให้กับเซิร์ฟเล็ต และ ServletContext ใช้เพื่อจัดเตรียมพารามิเตอร์การเริ่มต้นแอปพลิเคชันให้กับเซิร์ฟเล็ตทั้งหมด
  • เราไม่สามารถตั้งค่าแอตทริบิวต์ในวัตถุ ServletConfig ในขณะที่เราสามารถตั้งค่าคุณลักษณะในวัตถุ ServletContext ที่จะพร้อมใช้งานสำหรับเซิร์ฟเล็ตอื่น

  • อินเทอร์เฟซ ServletResponse

อินเทอร์เฟซ ServletResponse เป็นเครื่องมือสำหรับการส่งข้อมูลไปยังไคลเอนต์ วิธีการทั้งหมดในเครื่องมือนี้ตอบสนองจุดประสงค์นี้ทุกประการ

  • อินเทอร์เฟซ ServletRequest

อินเทอร์เฟซ ServletRequest เป็นเครื่องมือสำหรับรับพารามิเตอร์คำขอ HTTP อินเทอร์เฟซนี้มีวิธีการบางอย่างเหมือนกันในชื่อและวัตถุประสงค์ของ ServletContext

  • Request Dispatcher คืออะไร?

อินเทอร์เฟซ RequestDispatcher ใช้เพื่อส่งคำขอไปยังทรัพยากรอื่น (ซึ่งอาจเป็น HTML, JSP หรือเซิร์ฟเล็ตอื่นในแอปพลิเคชันเดียวกัน) เราสามารถใช้สิ่งนี้เพื่อเพิ่มเนื้อหาจากแหล่งข้อมูลอื่นในการตอบกลับ อินเทอร์เฟซนี้ใช้สำหรับการสื่อสารภายในระหว่างเซิร์ฟเล็ตในบริบทเดียวกัน อินเทอร์เฟซใช้สองวิธี:

  • ถือเป็นโมฆะไปข้างหน้า(ServletRequest var1, ServletResponse var2) - ส่งต่อคำขอจากเซิร์ฟเล็ตไปยังทรัพยากรอื่น (ไฟล์เซิร์ฟเล็ต, JSP หรือ HTML) บนเซิร์ฟเวอร์
  • เป็นโมฆะรวม(ServletRequest var1, ServletResponse var2) - รวมเนื้อหาของทรัพยากร (เซิร์ฟเล็ต, JSP หรือเพจ HTML) ในการตอบกลับ

อินเทอร์เฟซสามารถเข้าถึงได้โดยใช้เมธอด ServletContext getRequestDispatcher(String s) เส้นทางต้องขึ้นต้นด้วย / ซึ่งจะถูกตีความโดยสัมพันธ์กับเส้นทางรูทบริบทปัจจุบัน

  • คุณจะสร้างการหยุดชะงักในเซิร์ฟเล็ตได้อย่างไร?

การหยุดชะงักสามารถรับได้โดยการใช้การเรียกเมธอดแบบวนซ้ำ ตัวอย่างเช่น โดยการเรียกเมธอด doPost() ในเมธอด doGet() และการเรียก doGet() ในเมธอด doPost()

  • จะรับที่อยู่ของเซิร์ฟเล็ตบนเซิร์ฟเวอร์ได้อย่างไร?

หากต้องการรับเส้นทางเซิร์ฟเล็ตจริงบนเซิร์ฟเวอร์ คุณสามารถใช้โครงสร้างนี้: getServletContext().getRealPath(request.getServletPath())

  • จะรับข้อมูลเซิร์ฟเวอร์จากเซิร์ฟเล็ตได้อย่างไร?

ข้อมูลเซิร์ฟเวอร์สามารถรับได้โดยใช้วัตถุ ServletContext โดยใช้เมธอด getServerInfo() เหล่านั้น. getServletContext().getServerInfo()

  • จะรับที่อยู่ IP ของลูกค้าบนเซิร์ฟเวอร์ได้อย่างไร

ใช้ request.getRemoteAddr() เพื่อรับ IP ของไคลเอ็นต์ในเซิร์ฟเล็ต

  • คุณรู้อะไรเกี่ยวกับคลาสของ servlet wrapper?

Servlet HTTP API มีคลาส wrapper สองคลาส - HttpServletRequestWrapper และ HttpServletResponseWrapper ช่วยให้นักพัฒนานำการใช้งานคำขอและประเภทการตอบกลับของเซิร์ฟเล็ตมาใช้เอง เราสามารถขยายคลาสเหล่านี้และแทนที่เฉพาะวิธีการที่จำเป็นเพื่อใช้การตอบสนองและประเภทออบเจ็กต์คำขอของเราเอง คลาสเหล่านี้ไม่ได้ใช้ในการเขียนโปรแกรมเซิร์ฟเล็ตมาตรฐาน

หนึ่งในสิ่งที่ดีที่สุดเกี่ยวกับ Java ก็คือลักษณะการใช้งานที่หลากหลาย แน่นอนว่าการสร้างเดสก์ท็อปแบบดั้งเดิมและแม้แต่แอปพลิเคชันมือถือก็ยอดเยี่ยม แต่ถ้าคุณต้องการออกนอกเส้นทางที่ถูกตีและเข้าสู่ขอบเขตของการพัฒนาแอปพลิเคชันเว็บใน Java? ข่าวดีสำหรับคุณก็คือภาษานี้มาพร้อมกับ Servlet API ที่มีคุณสมบัติครบถ้วน ซึ่งช่วยให้คุณสามารถสร้างแอปพลิเคชันเว็บที่เชื่อถือได้โดยไม่ต้องยุ่งยากมากนัก

การสร้างแอปพลิเคชัน Java ด้วย Servlets

ดังนั้นเราจึงได้สร้างไฟล์การกำหนดค่าแอปพลิเคชันแล้ว อย่างไรก็ตาม ในสถานะปัจจุบัน มันไม่ได้ทำอะไรเลยอย่างแท้จริง เราต้องการให้ลูกค้าสามารถลงทะเบียนโดยใช้แบบฟอร์ม HTML ได้ ดังนั้นสิ่งต่อไปที่เราต้องทำคือสร้างไฟล์ JSP ที่จะแสดงแบบฟอร์มด้านบนและรายละเอียดลูกค้าเมื่อการลงทะเบียนเสร็จสมบูรณ์ นี่คือสิ่งที่เราจะทำตอนนี้

เรากำลังดำเนินการเกี่ยวกับรูปลักษณ์ภายนอก

ลักษณะที่ปรากฏของแอปพลิเคชันจะถูกกำหนดโดยไฟล์ JSP สองไฟล์ - ในบริบท MVC ไฟล์เหล่านี้เรียกว่ามุมมอง คนแรกจะต้องรับผิดชอบในการแสดงแบบฟอร์มการลงทะเบียนและข้อผิดพลาดที่อาจเกิดขึ้นหลังจากตรวจสอบข้อมูลที่ป้อน ส่วนที่สองจะเป็นหน้าต้อนรับปกติที่จะแสดงรายละเอียดที่ลูกค้าป้อนหลังจากกระบวนการลงทะเบียนเสร็จสมบูรณ์

นี่คือไฟล์ JSP ไฟล์แรก:

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> การลงทะเบียน

การลงทะเบียน

$(การละเมิด)