คำถามและคำตอบสัมภาษณ์ Servlet 40 อันดับแรก (2026)

คำถามและคำตอบสัมภาษณ์เกี่ยวกับ Servlet

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

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

👉 ดาวน์โหลดไฟล์ PDF ฟรี: คำถามและคำตอบสำหรับการสัมภาษณ์งานด้าน Servlet

คำถามและคำตอบสัมภาษณ์งานด้าน Servlet ที่ได้รับความนิยมสูงสุด

1) ก. คืออะไร Java เซิร์ฟเล็ต?

A Java เซิร์ฟเล็ต เป็นส่วนประกอบฝั่งเซิร์ฟเวอร์ที่เขียนด้วยภาษา Java ซึ่งทำงานอยู่ภายใน เว็บคอนเทนเนอร์ (เช่น Apache Tomcat, Jetty หรือ Glassfish) และประมวลผลคำขอ HTTP ที่เข้ามาเพื่อสร้างการตอบสนองแบบไดนามิก Servlet ทำหน้าที่เชื่อมต่อการสื่อสารระหว่างคำขอของไคลเอ็นต์ (โดยปกติมาจากเบราว์เซอร์) และทรัพยากรแบ็กเอนด์ เช่น ฐานข้อมูลหรือตรรกะทางธุรกิจ เช่นเดียวกับเครื่องมืออื่นๆ Java คลาสและเซิร์ฟเล็ตได้รับประโยชน์จากความเป็นอิสระของแพลตฟอร์ม ความปลอดภัย และคุณสมบัติที่แข็งแกร่งของคลาสเหล่านั้น Java ระบบนิเวศ

ตัวอย่าง: เซิร์ฟเล็ตสามารถจัดการแบบฟอร์มล็อกอินของผู้ใช้ได้โดยรับพารามิเตอร์ชื่อผู้ใช้และรหัสผ่านจากคำขอ ตรวจสอบกับฐานข้อมูล แล้วส่งคืนหน้า HTML ตามผลลัพธ์การล็อกอิน


2) ข้อดีของ Servlet เมื่อเทียบกับ CGI คืออะไร?

เซิร์ฟเล็ตมีข้อดีที่สำคัญหลายประการเมื่อเทียบกับ อินเทอร์เฟซเกตเวย์ทั่วไป (CGI) โปรแกรม:

คุณสมบัติ (Feature) เซิร์ฟเล็ต CGI
กระบวนการ จัดการคำขอโดยใช้เธรด สร้างกระบวนการใหม่ทุกครั้งที่มีการร้องขอ
ประสิทธิภาพ จุดสูง ต่ำ
Portability Java-อิงตามและไม่ขึ้นกับแพลตฟอร์ม ขึ้นอยู่กับไบนารีเนทีฟ
ใช้หน่วยความจำ ที่มีประสิทธิภาพ จุดสูง

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


3) อธิบายวงจรชีวิตของเซิร์ฟเล็ต

การขอ วงจรชีวิตของเซิร์ฟเล็ต กำหนดขั้นตอนต่างๆ ที่เซิร์ฟเล็ตต้องผ่าน ตั้งแต่การสร้างจนถึงการทำลายในคอนเทนเนอร์:

  1. การโหลดและการสร้างอินสแตนซ์คอนเทนเนอร์จะโหลดเซิร์ฟเล็ตและเรียกใช้คอนสตรัคเตอร์
  2. การเขียนอักษรย่อ: init() ฟังก์ชันนี้จะถูกเรียกเพียงครั้งเดียวเพื่อทำการตั้งค่าเริ่มต้นใดๆ
  3. การจัดการคำขอ: service() เมธอดนี้จะถูกเรียกใช้สำหรับทุกคำขอและส่งต่อไปยังเมธอดอื่นๆ เช่น doGet() or doPost().
  4. การทำลายล้าง: destroy() ฟังก์ชันนี้จะถูกเรียกก่อนที่เซิร์ฟเล็ตจะถูกลบออก ทำให้สามารถดำเนินการล้างข้อมูลได้

วงจรชีวิตนี้ช่วยให้มั่นใจได้ว่ามีการใช้ทรัพยากรอย่างมีประสิทธิภาพและการจัดการคำขอเป็นไปอย่างสม่ำเสมอ


4) GenericServlet และ HttpServlet แตกต่างกันอย่างไร?

GenericServlet และ HttpServlet ทั้งคู่เป็น abstracคำแนะนำสำหรับการสร้างเซิร์ฟเล็ต:

  • เจเนริกเซอร์ฟเล็ต: บทคัดย่อที่ไม่ขึ้นกับโปรโตคอลtracคลาส t ที่จัดการรูปแบบการร้องขอ/ตอบสนองทั่วไป
  • เซิร์ฟเวอร์ HTTP: กลุ่มย่อยของ GenericServlet ออกแบบมาโดยเฉพาะสำหรับ โปรโตคอล HTTPโดยนำเสนอวิธีการต่างๆ เช่น doGet(), doPost()ฯลฯ

เนื่องจากเว็บแอปพลิเคชันส่วนใหญ่ใช้ HTTP HttpServlet ในทางปฏิบัติแล้วพบได้บ่อยกว่ามาก


5) Servlet จัดการคำขอ HTTP GET และ POST อย่างไร?

เซิร์ฟเล็ตใช้วิธีการต่างๆ ภายใน HttpServlet คลาสสำหรับจัดการคำขอ HTTP:

  • doGet(HttpServletRequest req, HttpServletResponse res) จะถูกเรียกใช้สำหรับคำขอ GET (โดยปกติใช้สำหรับการดึงข้อมูล)
  • doPost(HttpServletRequest req, HttpServletResponse res) ใช้สำหรับคำขอ POST (โดยทั่วไปใช้สำหรับการส่งแบบฟอร์มหรือการแก้ไขสถานะของเซิร์ฟเวอร์)

การขอ service() วิธีการใน HttpServlet ระบบจะส่งคำขอไปยังตัวจัดการที่เหมาะสมโดยอัตโนมัติตามวิธีการ HTTP


6) จุดประสงค์ของไฟล์ web.xml ใน Servlet คืออะไร?

การขอ web.xml คำอธิบายการปรับใช้ เป็นไฟล์การกำหนดค่าที่อยู่ในไดเร็กทอรี WEB-INF ของเว็บแอปพลิเคชัน โดยจะแมปคลาสเซิร์ฟเล็ตไปยัง... URLs จะตั้งค่าพารามิเตอร์เริ่มต้น กำหนดค่าตัวกรองและตัวรับฟัง และกำหนดหน้าแสดงข้อผิดพลาด

ตัวอย่างเช่น:

<servlet>
    <servlet-name>MyServlet</servlet-name>    
    <servlet-class>com.example.MyServlet</servlet-class>
</servlet>
<servlet-mapping>
    <servlet-name>MyServlet</servlet-name>
    <url-pattern>/path</url-pattern>
</servlet-mapping>

คำสั่งนี้จะบอกให้คอนเทนเนอร์จัดการคำขอไปยัง /path ด้วย MyServlet.


7) พารามิเตอร์เริ่มต้นในเซิร์ฟเล็ตคืออะไร?

เซิร์ฟเล็ตมักต้องการข้อมูลการกำหนดค่า (เช่น สตริงการเชื่อมต่อฐานข้อมูล) ซึ่งสามารถระบุได้ผ่านทาง พารามิเตอร์เริ่มต้น ทั้งใน web.xml หรือใช้คำอธิบายประกอบเช่น @WebInitParam.

คุณสามารถหาค่าพารามิเตอร์เหล่านี้ได้โดยใช้:

ServletConfig config = getServletConfig();
String paramValue = config.getInitParameter("paramName");

วิธีนี้ช่วยให้สามารถปรับแต่งพฤติกรรมของเซิร์ฟเล็ตได้โดยไม่ต้องคอมไพล์โค้ดใหม่


8) สาธิตการจัดการเซสชันของเซิร์ฟเล็ต

HTTP เป็นภาษาที่ไม่มีสถานะ (stateless) โดยพื้นฐาน การจัดการเซสชัน ช่วยให้สามารถรักษาสถานะไว้ได้ระหว่างการร้องขอหลายครั้ง เทคนิคที่ใช้กันทั่วไป ได้แก่:

  1. คุกกี้ – ข้อมูลขนาดเล็กที่จัดเก็บไว้ในเบราว์เซอร์ของลูกค้า และถูกส่งไปพร้อมกับทุกคำขอ
  2. URL การเขียนใหม่ – การเพิ่มรหัสเซสชันลงใน URLเมื่อปิดใช้งานคุกกี้
  3. HTTP Session API – การจัดการเซสชันในตัวโดยใช้ HttpSession วัตถุ.

ตัวอย่าง:

HttpSession session = request.getSession();
session.setAttribute("user", userObject);

วิธีนี้จะสร้างอ็อบเจ็กต์เซสชันที่เชื่อมโยงกับไคลเอ็นต์


9) คืออะไร URL การเข้ารหัสเทียบกับ URL การเขียนใหม่?

ทั้งสองอย่างเป็นเทคนิคการจัดการเซสชัน:

  • URL การเข้ารหัส ปรับ URLโปรดใส่ตัวอักษรพิเศษเพื่อความปลอดภัยในการส่งข้อมูล
  • URL การเขียนใหม่ เพิ่มรหัสเซสชันต่อท้าย URL เมื่อไม่มีคุกกี้ให้ใช้งาน

ตัวอย่าง:

response.encodeURL("dashboard");

สิ่งนี้รับประกันเซสชัน tracถึงแม้ว่าจะปิดใช้งานคุกกี้แล้วก็ตาม


10) Servlet ปลอดภัยต่อการทำงานแบบมัลติเธรดหรือไม่? จะทำให้ Servlet ปลอดภัยต่อการทำงานแบบมัลติเธรดได้อย่างไร?

โดยปกติแล้ว อินสแตนซ์ของเซิร์ฟเล็ตจะจัดการคำขอหลายรายการโดยใช้เธรด ดังนั้น โดยพื้นฐานแล้วเซอร์ฟเล็ตไม่ได้ปลอดภัยต่อการใช้งานแบบมัลติเธรด เว้นแต่จะได้รับการออกแบบอย่างระมัดระวัง

กลยุทธ์เพื่อความปลอดภัยในการใช้งานเกลียว:

  • ควรหลีกเลี่ยงการใช้ตัวแปรอินสแตนซ์หากไม่มีการซิงโครไนซ์
  • ใช้ตัวแปรโลคอลภายในเมธอดการร้องขอ
  • Syncซิงโครไนซ์การเข้าถึงทรัพยากรที่ใช้ร่วมกันหากจำเป็น

ตัวอย่าง:

public void doGet(...) {
    int localVar = computeValue();
}

การใช้ตัวแปรโลคอลช่วยหลีกเลี่ยงปัญหาการใช้สถานะร่วมกัน


11) Servlet Filter คืออะไร และมีกรณีการใช้งานอย่างไรบ้าง?

A ตัวกรองเซิร์ฟเล็ต ตัวกรองจะดักจับคำขอต่างๆ ก่อนที่จะถึงเซิร์ฟเล็ต (หรือคำตอบก่อนที่จะถึงไคลเอ็นต์) ตัวกรองจะจัดการงานต่างๆ เช่น:

  • การยืนยันตัวตน
  • เข้าสู่ระบบ
  • การอัด
  • การตรวจสอบข้อมูลอินพุต

ตัวอย่าง: ใช้ตัวกรองเพื่อตรวจสอบว่าคำขอได้รับการตรวจสอบสิทธิ์แล้วหรือไม่ ก่อนที่จะส่งต่อไปยังหน้าเว็บที่มีการรักษาความปลอดภัย


12) Listener ของ Servlet คืออะไร?

ฟัง คือตัวจัดการเหตุการณ์ที่ตอบสนองต่อเหตุการณ์ต่างๆ ในวงจรชีวิตของแอปพลิเคชันเว็บ อินเทอร์เฟซตัวรับฟังเหตุการณ์ทั่วไป ได้แก่:

  • ServletContextListener — เหตุการณ์การเริ่มต้น/ปิดแอปพลิเคชัน
  • HttpSessionListener — การสร้างและการลบเซสชัน
  • ServletRequestListener — เหตุการณ์วงจรชีวิตของคำขอ

ผู้ฟังช่วยจัดการการจัดสรรทรัพยากรหรือการทำความสะอาดเพื่อตอบสนองต่อกิจกรรมของแอปพลิเคชัน


13) คุณจะส่งต่อคำขอไปยังแหล่งข้อมูลอื่นได้อย่างไร?

เพื่อส่งต่อคำขอภายในองค์กร:

RequestDispatcher rd = request.getRequestDispatcher("/otherServlet");
rd.forward(request, response);

เพื่อเปลี่ยนเส้นทางไปยังหน้าใหม่ URL:

response.sendRedirect("newURL");

ความแตกต่าง:

  • forward() ดำเนินการภายในโดยไม่ต้องเปลี่ยนเส้นทางไปยังไคลเอ็นต์
  • sendRedirect() สั่งให้ลูกค้าส่งคำขอใหม่

14) อธิบายความแตกต่างระหว่าง ServletContext และ ServletConfig

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

ServletContext ให้ข้อมูลที่ใช้ร่วมกันระหว่างเซิร์ฟเล็ตทั้งหมดในเว็บแอปพลิเคชัน ในขณะที่ ServletConfig เป็นคุณสมบัติเฉพาะของอินสแตนซ์เซิร์ฟเล็ตหนึ่งๆ


15) HttpSession คืออะไร และใช้งานอย่างไร?

การขอ HttpSession อ็อบเจ็กต์นี้แสดงถึงเซสชันของผู้ใช้ตลอดการร้องขอและตอบกลับ HTTP หลายครั้ง โดยมีข้อดีดังต่อไปนี้:

  • การจัดเก็บข้อมูลเฉพาะผู้ใช้
  • การจัดการหมดเวลาของเซสชัน
  • Tracking สถานะการเข้าสู่ระบบ

ตัวอย่าง:

HttpSession session = request.getSession(true);
session.setAttribute("cart", shoppingCart);

วิธีนี้จะช่วยคงข้อมูลไว้ได้แม้จะมีการร้องขอหลายครั้งก็ตาม


16) คุณจะอัปโหลดไฟล์โดยใช้เซิร์ฟเล็ตได้อย่างไร?

วิธีการอัปโหลดไฟล์:

  1. กำหนดค่า <multipart-config> in web.xml.
  2. ใช้ ServletFileUpload หรือคำอธิบายประกอบของเซิร์ฟเล็ต 3.0
  3. ประมวลผลส่วนต่างๆ ของไฟล์ใน doPost().

สถานการณ์เช่นนี้พบได้ทั่วไปในแอปพลิเคชันจริง เช่น การอัปโหลดรูปโปรไฟล์


17) อธิบายวิธีการจัดการข้อยกเว้นในเซิร์ฟเล็ต

เซิร์ฟเล็ตสามารถจัดการกับข้อผิดพลาดได้สองวิธี:

  • บล็อก try-catch ในโค้ดเซิร์ฟเล็ต
  • กำหนด <error-page> in web.xml เพื่อเชื่อมโยงข้อยกเว้นกับหน้าดีบักแบบกำหนดเอง

ตัวอย่าง:

<error-page>    <exception-type>java.lang.Exception</exception-type>
    <location>/error.jsp</location>
</error-page>

ซึ่งจะช่วยเพิ่มความน่าเชื่อถือและประสบการณ์การใช้งานของผู้ใช้


18) บทบาทของ Annotation ใน Servlet (Servlet 3.0 ขึ้นไป) คืออะไร?

ตั้งแต่ Servlet 3.0 เป็นต้นมา คำอธิบายประกอบสามารถใช้แทนกันได้ web.xml:

  • @WebServlet("/path")
  • @WebFilter
  • @WebListener

ตัวอย่าง:

@WebServlet("/hello")
public class HelloServlet extends HttpServlet { ... }

วิธีนี้ช่วยลดความซับซ้อนในการกำหนดค่าและการติดตั้งใช้งาน


19) Load-on-Startup คืออะไร?

<load-on-startup> in web.xml ตัวควบคุมการเริ่มต้นใช้งานเซิร์ฟเล็ต:

  • ค่าบวก → โหลดเมื่อเริ่มต้นแอปพลิเคชันตามลำดับที่กำหนดไว้
  • ค่าลบหรือไม่มีค่า → โหลดเมื่อมีการร้องขอครั้งแรก

ตัวอย่าง:

<load-on-startup>1</load-on-startup>

วิธีนี้จะช่วยให้เซิร์ฟเล็ตพร้อมใช้งานก่อนที่คำขอใดๆ จะเข้ามา


20) Servlet สนับสนุนบริการ RESTful อย่างไร?

Servlet สามารถใช้งาน REST ได้โดยการจัดการคำสั่ง HTTP ต่างๆ (GET, POST, PUT, DELETE) ในเมธอดการร้องขอ และสร้างการตอบกลับในรูปแบบ JSON/XML PrintWriter หรือสตรีม โดยทั่วไปแล้ว REST endpoint จะตรวจสอบความถูกต้อง URLและโต้ตอบกับตรรกะทางธุรกิจตามนั้น


21) อธิบายความแตกต่างระหว่าง sendRedirect() และ forward() ใน Servlet

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

sendRedirect() คือ การเปลี่ยนเส้นทางฝั่งไคลเอ็นต์เซอร์ฟเล็ตจะสั่งให้เบราว์เซอร์ส่งคำขอ HTTP ใหม่ไปยังที่อยู่เว็บอื่น URLผลที่ตามมาคือ แถบที่อยู่ของเบราว์เซอร์จะเปลี่ยนแปลง และคุณลักษณะของคำขอจะหายไป วิธีนี้มีประโยชน์เมื่อต้องการเปลี่ยนเส้นทางไปยังแหล่งข้อมูลภายนอก หรือหลีกเลี่ยงปัญหาการส่งแบบฟอร์มซ้ำ

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

แง่มุม sendRedirect() ซึ่งไปข้างหน้า()
ประเภทการเปลี่ยนเส้นทาง ด้านลูกค้า ฝั่งเซิร์ฟเวอร์
URL เปลี่ยนแปลง มี (ใบกำกับภาษีเต็มรูปแบบ) ไม่
อ็อบเจ็กต์คำขอ ใหม่ เดียวกัน
ประสิทธิภาพ ช้าลง ได้เร็วขึ้น

22) Servlet session มีกี่ประเภท tracกลไกของกษัตริย์?

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

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

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

ฟิลด์แบบฟอร์มที่ซ่อนอยู่ สามารถฝังข้อมูลเซสชันลงในแบบฟอร์ม HTML ได้ แต่วิธีนี้ใช้ได้เฉพาะกับการนำทางผ่านแบบฟอร์มเท่านั้น

วิธีแก้ปัญหาที่มีประสิทธิภาพที่สุดคือ HttpSessionซึ่ง abstracกลไกเหล่านี้ช่วยให้นักพัฒนาสามารถจัดเก็บข้อมูลเซสชันไว้ที่ฝั่งเซิร์ฟเวอร์ได้

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

23) วงจรชีวิตของ HttpSession ใน Servlet ทำงานอย่างไร?

การขอ HttpSession วงจรชีวิตเริ่มต้นเมื่อไคลเอ็นต์ส่งคำขอครั้งแรกที่ต้องการเซสชัน tracเซอร์ฟเล็ตคอนเทนเนอร์จะสร้างอ็อบเจ็กต์เซสชันและกำหนดรหัสเซสชันที่ไม่ซ้ำกันให้ โดยปกติรหัสนี้จะถูกเก็บไว้ในคุกกี้ชื่อ `king` JSESSIONID.

เซสชันจะยังคงใช้งานอยู่ตราบใดที่ยังมีการร้องขอภายในระยะเวลาหมดเวลาที่กำหนดไว้ นักพัฒนาสามารถควบคุมสิ่งนี้ได้โดยใช้ setMaxInactiveInterval() or web.xml การกำหนดค่า เซสชันอาจสิ้นสุดลงเนื่องจากหมดเวลา หรือการยกเลิกโดยชัดแจ้งโดยใช้ invalidate()หรือการปิดแอปพลิเคชัน

เหตุการณ์สำคัญในวงจรชีวิตเกิดขึ้นเมื่อมีการสร้างหรือทำลายเซสชัน ซึ่งสามารถตรวจสอบได้โดยใช้ HttpSessionListenerสิ่งนี้มีประโยชน์สำหรับการตรวจสอบหรือการจัดการทรัพยากรอย่างมีประสิทธิภาพ

ตัวอย่าง: Tracking การตรวจสอบผู้ใช้ที่ล็อกอินโดยการเพิ่มตัวนับเมื่อมีการสร้างเซสชันและลดตัวนับเมื่อเซสชันถูกทำลาย ช่วยให้มั่นใจได้ว่าเมตริกการทำงานพร้อมกันมีความแม่นยำ


24) ServletContext มีบทบาทอย่างไรในเว็บแอปพลิเคชัน?

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

นักพัฒนาใช้ ServletContext เพื่อจัดเก็บคุณลักษณะทั่วโลก อ่านพารามิเตอร์การเริ่มต้นใช้งานทั่วทั้งแอปพลิเคชัน และเข้าถึงทรัพยากรต่างๆ เช่น ไฟล์การกำหนดค่า ซึ่งแตกต่างจาก HttpSessionไม่ใช่ฟังก์ชันเฉพาะของผู้ใช้

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

คุณสมบัติ (Feature) ServletContext
ขอบเขต ทั่วทั้งแอปพลิเคชัน
ตลอดชีวิต แอปพลิเคชันทั้งหมด
ข้อมูลที่ใช้ร่วมกัน มี (ใบกำกับภาษีเต็มรูปแบบ)
เฉพาะผู้ใช้ ไม่

25) Servlet Filters ทำงานอย่างไร และมีข้อดีอย่างไรบ้าง?

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

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

สามารถเชื่อมต่อตัวกรองหลายตัวเข้าด้วยกันเพื่อสร้างเป็นไปป์ไลน์การประมวลผล ซึ่งส่งเสริมความเป็นโมดูลาร์และการแยกส่วนความรับผิดชอบ

ตัวอย่าง: ตัวกรองการตรวจสอบสิทธิ์จะตรวจสอบข้อมูลประจำตัวของผู้ใช้ก่อนอนุญาตให้เข้าถึงทรัพยากรที่ได้รับการรักษาความปลอดภัย เพื่อให้มั่นใจได้ว่ามีการบังคับใช้มาตรการรักษาความปลอดภัยอย่างสม่ำเสมอทั่วทั้งแอปพลิเคชัน


26) อธิบายโมเดลการทำงานแบบมัลติเธรดของเซิร์ฟเล็ตและการจัดการการทำงานพร้อมกัน

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

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

การใช้ระบบซิงโครไนซ์อย่างไม่ระมัดระวังอาจทำให้ประสิทธิภาพลดลง ดังนั้นความปลอดภัยของเกลียวจึงต้องเกิดจากการออกแบบอย่างระมัดระวังมากกว่าการล็อกที่มากเกินไป

ตัวอย่าง: เซิร์ฟเล็ตที่ใช้ตัวนับร่วมกันควรซิงโครไนซ์การอัปเดตหรือใช้ตัวแปรอะตอมิกเพื่อป้องกันสภาวะการแข่งขัน (race condition)


27) ความแตกต่างระหว่างเมธอด GET และ POST ใน Servlet คืออะไร?

GET และ POST เป็นเมธอด HTTP ที่ใช้บ่อยที่สุดใน Servlet แต่มีจุดประสงค์ที่แตกต่างกัน

GET ถูกออกแบบมาเพื่อ การดึงข้อมูล และเพิ่มพารามิเตอร์เข้าไปใน URLสามารถแคชและบุ๊กมาร์กได้ แต่เปิดเผยข้อมูลที่ละเอียดอ่อน

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

แง่มุม GET POST
การเปิดเผยข้อมูล URL ขอเนื้อความ
⁠ความปลอดภัย ต่ำ สูงกว่า
ไร้สมรรถภาพทางเพศ มี (ใบกำกับภาษีเต็มรูปแบบ) ไม่
ใช้กรณี การดึงข้อมูล ส่งข้อมูล

28) แอปพลิเคชันที่ใช้ Servlet จัดการกับข้อยกเว้นอย่างไร?

การจัดการข้อผิดพลาดใน Servlet สามารถทำได้ทั้งแบบเขียนโปรแกรมหรือแบบประกาศ การจัดการแบบเขียนโปรแกรมจะใช้บล็อก try-catch เพื่อดักจับและประมวลผลปัญหาที่เกิดขึ้นขณะรันไทม์โดยตรงในโค้ด

การจัดการแบบประกาศใช้ประโยชน์จาก web.xml เพื่อเชื่อมโยงข้อยกเว้นหรือรหัสสถานะ HTTP กับหน้าแสดงข้อผิดพลาดแบบกำหนดเอง วิธีนี้ช่วยปรับปรุงการบำรุงรักษาและประสบการณ์ผู้ใช้โดยการแยกตรรกะข้อผิดพลาดออกจากตรรกะทางธุรกิจ

ตัวอย่าง: แผนที่แสดงที่ตั้งบริษัทping NullPointerException JSP ช่วยให้การรายงานข้อผิดพลาดมีความสม่ำเสมอทั่วทั้งแอปพลิเคชันโดยไม่ต้องเขียนโค้ดซ้ำซ้อน

วิธีการแบบแบ่งชั้นนี้ช่วยให้โครงสร้างมีความแข็งแกร่งและเป็นระเบียบมากขึ้น


29) Load-on-startup คืออะไร และควรใช้เมื่อใด?

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

คุณสมบัตินี้มีประโยชน์สำหรับเซิร์ฟเล็ตที่ทำหน้าที่เริ่มต้นระบบที่สำคัญ เช่น การโหลดไฟล์การกำหนดค่า การเริ่มต้นแคช หรือการตั้งค่าการเชื่อมต่อฐานข้อมูล

การใช้ load-on-startup ช่วยให้มั่นใจได้ว่างานเหล่านี้จะเสร็จสมบูรณ์ก่อนที่แอปพลิเคชันจะเริ่มให้บริการคำขอ ซึ่งจะช่วยเพิ่มความน่าเชื่อถือ


30) Servlet สนับสนุนบริการเว็บ RESTful ได้อย่างไร?

เซิร์ฟเล็ตเป็นรากฐานของบริการ RESTful โดยทำหน้าที่จัดการวิธีการ HTTP ต่างๆ เช่น GET, POST, PUT และ DELETE แต่ละวิธีสอดคล้องกับการดำเนินการ CRUD และถูกนำไปใช้โดยใช้ doGet(), doPost()และตัวจัดการที่เกี่ยวข้อง

โดยการส่งคืนการตอบกลับในรูปแบบ JSON หรือ XML และปฏิบัติตามหลักการ REST เช่น การไม่มีสถานะ (statelessness) และการใช้ทรัพยากรเป็นฐาน (resource-based) URLเซอร์ฟเล็ตสามารถสร้าง API ที่มีน้ำหนักเบาได้

กรอบงานสมัยใหม่ abstracแม้จะมีความซับซ้อน แต่การเข้าใจการออกแบบ RESTful Servlet นั้นมีความสำคัญอย่างยิ่งสำหรับการควบคุมระดับต่ำและการปรับแต่งประสิทธิภาพ โดยเฉพาะอย่างยิ่งเมื่อทำงานโดยตรงกับ RESTful Servlet จาการ์ตาเซอร์ฟเล็ต APIs


31) ขอบเขตของ Servlet มีกี่ประเภท และใช้งานอย่างไร?

ขอบเขตของ Servlet กำหนด ความสามารถในการมองเห็นและอายุการใช้งานของคุณลักษณะต่างๆ จัดเก็บอยู่ในแอปพลิเคชันบนเว็บ สิ่งเหล่านี้มีความสำคัญอย่างยิ่งต่อการจัดการการแบ่งปันข้อมูลระหว่างส่วนประกอบต่างๆ ในขณะที่ยังคงรักษาการแยกส่วนอย่างเหมาะสม

ขอบเขตหลักทั้งสี่ประการ ได้แก่ ขอร้อง, เซสชั่น, การใช้งานและ หน้า (ใช้เป็นหลักใน JSP) ขอบเขตการร้องขอ (Request scope) มีอายุสำหรับการร้องขอ HTTP เพียงครั้งเดียว และเหมาะสำหรับการส่งข้อมูลชั่วคราวระหว่างเซิร์ฟเล็ตหรือ JSP ขอบเขตเซสชัน (Session scope) คงอยู่ข้ามการร้องขอหลายครั้งจากไคลเอ็นต์เดียวกัน และมักใช้สำหรับข้อมูลเฉพาะผู้ใช้ เช่น สถานะการเข้าสู่ระบบ ขอบเขตแอปพลิเคชัน (Application scope) เป็นขอบเขตทั่วโลกและใช้ร่วมกันโดยผู้ใช้ทั้งหมด เหมาะสำหรับการกำหนดค่าหรือทรัพยากรที่ใช้ร่วมกัน

การเข้าใจเรื่องการเลือกขอบเขตการใช้งานจะช่วยป้องกันปัญหาหน่วยความจำรั่วไหลและปัญหาการทำงานพร้อมกัน

ขอบเขต ตลอดชีวิต แพ็กเกจ การใช้งานทั่วไป
ขอร้อง คำขอเดียว คำขอเดียวกัน ข้อความยืนยัน
เซสชั่น เซสชันผู้ใช้ ผู้ใช้คนเดียว ข้อมูลการเข้าสู่ระบบ
การใช้งาน วงจรชีวิตของแอป ผู้ใช้ทั้งหมด แคช, การกำหนดค่า
หน้า เจเอสพีเท่านั้น JSP เดียวกัน ตรรกะการดู

32) การรักษาความปลอดภัยของ Servlet ทำงานอย่างไรโดยใช้ตัวอธิบายการปรับใช้ (deployment descriptors)?

การรักษาความปลอดภัยของ Servlet สามารถกำหนดค่าได้แบบประกาศโดยใช้ web.xml โดยไม่ต้องแก้ไขโค้ดแอปพลิเคชัน วิธีนี้ช่วยเพิ่มความสามารถในการบำรุงรักษาและบังคับใช้กฎความปลอดภัยที่สอดคล้องกัน

ข้อจำกัดด้านความปลอดภัยกำหนดสิ่งที่ได้รับการปกป้อง URL รูปแบบและวิธีการ HTTP ที่อนุญาต วิธีการตรวจสอบสิทธิ์ เช่น BASIC, FORM หรือ CLIENT-CERT ระบุวิธีการตรวจสอบสิทธิ์ผู้ใช้ การอนุญาตตามบทบาทจะจำกัดการเข้าถึงตามบทบาทของผู้ใช้

ตัวอย่างเช่น ส่วนที่สงวนไว้สำหรับผู้ดูแลระบบเท่านั้นสามารถได้รับการปกป้องเพื่อให้เฉพาะผู้ใช้ที่มีบทบาท "ADMIN" เท่านั้นที่สามารถเข้าถึงได้ กลไกนี้ทำงานร่วมกับระบบรักษาความปลอดภัยที่จัดการโดยคอนเทนเนอร์ได้อย่างราบรื่น

การรักษาความปลอดภัยแบบประกาศ (Declarative security) เป็นที่นิยมในแอปพลิเคชันระดับองค์กร เนื่องจากแยกตรรกะด้านความปลอดภัยออกจากตรรกะทางธุรกิจ และสนับสนุนการบังคับใช้ที่เป็นมาตรฐาน


33) อธิบายความแตกต่างระหว่างเซิร์ฟเล็ตแบบไร้สถานะและเซิร์ฟเล็ตแบบมีสถานะ

เซิร์ฟเล็ตแบบไร้สถานะและแบบมีสถานะแตกต่างกันในวิธีการจัดการข้อมูลเฉพาะไคลเอ็นต์

A เซอร์ฟเล็ตไร้สถานะ ไม่เก็บสถานะไคลเอ็นต์ระหว่างการร้องขอแต่ละครั้ง การร้องขอแต่ละครั้งเป็นอิสระต่อกัน ทำให้เซิร์ฟเล็ตมีความสามารถในการปรับขนาดสูงและเหมาะสำหรับบริการ RESTful

A เซอร์ฟเล็ตที่มีสถานะในทางกลับกัน จะรักษาสถานะโดยใช้เซสชัน คุกกี้ หรือตัวแปรอินสแตนซ์ วิธีนี้มีประโยชน์สำหรับเวิร์กโฟลว์ เช่น การจัดการร้านค้าping รถเข็นหรือแบบฟอร์มหลายขั้นตอน

แง่มุม ไร้สัญชาติ สถานะ
scalability จุดสูง ลด
ใช้หน่วยความจำ ต่ำสุด สูงกว่า
ใช้กรณี API, ไมโครเซอร์วิส ขั้นตอนการทำงานของผู้ใช้
ความซับซ้อน ต่ำ สูงกว่า

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


34) RequestDispatcher คืออะไร และแตกต่างจากการเปลี่ยนเส้นทางอย่างไร?

RequestDispatcher ช่วยให้ การสื่อสารภายในระหว่างทรัพยากรฝั่งเซิร์ฟเวอร์ เช่น เซิร์ฟเล็ตและ JSP ซึ่งช่วยให้สามารถส่งต่อหรือรวมเนื้อหาได้โดยไม่ต้องเกี่ยวข้องกับฝั่งไคลเอ็นต์

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

ในทางตรงกันข้าม การเปลี่ยนเส้นทาง (redirection) จำเป็นต้องมีการร้องขอใหม่จากไคลเอ็นต์ ซึ่งช้ากว่าและไม่เก็บข้อมูลการร้องขอไว้ การเลือกใช้ระหว่างสองวิธีนี้ขึ้นอยู่กับว่าไคลเอ็นต์นั้นรับรู้ถึงข้อมูลหรือไม่ URL จำเป็นต้องมีการเปลี่ยนแปลง


35) Annotation ใน Servlet คืออะไร และมีประโยชน์อย่างไรบ้าง?

มีการนำ Servlet annotations มาใช้เพื่อลดภาระการกำหนดค่า XML และทำให้การพัฒนาทำได้ง่ายขึ้น Annotations เช่น @WebServlet, @WebFilterและ @WebListener อนุญาตให้นักพัฒนาสามารถประกาศเมตาเดตาโดยตรงในโค้ดได้

ประโยชน์หลักๆ ได้แก่ การอ่านโค้ดที่ดีขึ้น ข้อผิดพลาดในการตั้งค่าลดลง และวงจรการพัฒนาที่เร็วขึ้น นอกจากนี้ การใช้คำอธิบายประกอบยังทำให้การปรับปรุงโครงสร้างแอปพลิเคชันทำได้ง่ายขึ้น เนื่องจากทั้งการตั้งค่าและการใช้งานยังคงสอดคล้องกันอย่างใกล้ชิด

อย่างไรก็ตาม สำหรับแอปพลิเคชันระดับองค์กรขนาดใหญ่ มักใช้แนวทางแบบผสมผสาน โดยที่คำอธิบายประกอบจะจัดการแผนที่แบบง่ายๆpingและ web.xml จัดการการตั้งค่าที่ซับซ้อน


36) การปรับแต่งประสิทธิภาพของ Servlet ทำงานอย่างไร?

การปรับแต่งประสิทธิภาพของ Servlet เกี่ยวข้องกับการเพิ่มประสิทธิภาพ การใช้ทรัพยากร การจัดการการทำงานพร้อมกัน และเวลาตอบสนองกลยุทธ์ทั่วไป ได้แก่ การลดการซิงโครไนซ์ให้น้อยที่สุด การนำวัตถุกลับมาใช้ใหม่ผ่านการรวมกลุ่ม และการเปิดใช้งานการบีบอัดการตอบสนอง

การใช้พูลการเชื่อมต่อแทนการสร้างการเชื่อมต่อฐานข้อมูลทุกครั้งที่มีการร้องขอจะช่วยเพิ่มประสิทธิภาพการประมวลผลได้อย่างมาก การแคชข้อมูลที่เข้าถึงบ่อยในระดับแอปพลิเคชันจะช่วยลดการคำนวณที่ซ้ำซ้อน

การกำหนดขนาดของพูลเธรดในคอนเทนเนอร์เซิร์ฟเล็ตก็มีบทบาทสำคัญเช่นกัน การปรับแต่งที่ไม่เหมาะสมอาจนำไปสู่การขาดแคลนเธรดหรือการสลับบริบทมากเกินไป

การปรับแต่งประสิทธิภาพเป็นกระบวนการต่อเนื่องที่ต้องอาศัยการตรวจสอบ การวิเคราะห์ประสิทธิภาพ และการเพิ่มประสิทธิภาพแบบวนซ้ำ


37) Servlets และ JSP แตกต่างกันอย่างไร?

Servlet และ JSP มีบทบาทที่แตกต่างกันใน Java แม้ว่าทั้งสองอย่างจะถูกแปลงเป็นเซิร์ฟเล็ตในท้ายที่สุดก็ตาม แอปพลิเคชันบนเว็บ

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

แง่มุม เซิร์ฟเล็ต JSP
บทบาท ตัวควบคุม/ตรรกะ รายละเอียด
วากยสัมพันธ์ Java แท็ก HTML +
ซ่อมบำรุง ละเอียดยิ่งขึ้น ง่ายดาย
การใช้งาน MVC ตัวควบคุม รายละเอียด

หลักปฏิบัติที่ดีที่สุดกำหนดให้ใช้ Servlet เป็นตัวควบคุม และใช้ JSP สำหรับการแสดงผลมุมมองเท่านั้น


38) Servlet จัดการการอัปโหลดไฟล์อย่างไร?

การอัปโหลดไฟล์จะดำเนินการโดยใช้คำขอแบบหลายส่วน (multipart requests) ข้อกำหนดของ Servlet มีการรองรับการประมวลผลแบบหลายส่วนในตัวผ่านทางคำอธิบายประกอบหรือการกำหนดค่า

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

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

คุณสมบัตินี้มักใช้ในระบบจัดการโปรไฟล์ การอัปโหลดเอกสาร และแพลตฟอร์มการจัดการเนื้อหา


39) การประมวลผลแบบอะซิงโครนัสในเซิร์ฟเล็ตคืออะไร?

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

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

โมเดลนี้เหมาะอย่างยิ่งสำหรับการดำเนินการต่างๆ เช่น การเรียกใช้ API ภายนอก การประมวลผลแบบกลุ่ม หรือการสตรีมข้อมูล

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


40) แนวปฏิบัติที่ดีที่สุดของ Servlet ที่ใช้กันทั่วไปในแอปพลิเคชันระดับองค์กรมีอะไรบ้าง?

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

แนวทางปฏิบัติอื่นๆ ได้แก่ การจัดการข้อผิดพลาดอย่างเหมาะสม การจัดการเซสชันที่ปลอดภัย และการใช้ตัวแปรอินสแตนซ์ให้น้อยที่สุด การบันทึกและการตรวจสอบควรดำเนินการอย่างสม่ำเสมอ

การปฏิบัติตามหลักการเหล่านี้จะส่งผลให้ได้แอปพลิเคชันที่สะอาด สามารถทดสอบได้ และพร้อมใช้งานในระดับการผลิต ซึ่งทำงานได้อย่างน่าเชื่อถือภายใต้ภาระงานหนัก


🔍 คำถามสัมภาษณ์เกี่ยวกับ Servlet ยอดนิยม พร้อมสถานการณ์จริงและคำตอบเชิงกลยุทธ์

1) เซอร์ฟเล็ตคืออะไร และเหตุใดจึงใช้ในแอปพลิเคชันบนเว็บ?

สิ่งที่คาดหวังจากผู้สมัคร: ผู้สัมภาษณ์ต้องการประเมินความเข้าใจพื้นฐานของคุณเกี่ยวกับ Servlet และบทบาทของมันในงานต่างๆ Javaแอปพลิเคชันเว็บที่ใช้ - พื้นฐาน

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


2) คุณช่วยอธิบายวงจรชีวิตของ Servlet ได้ไหม?

สิ่งที่คาดหวังจากผู้สมัคร: ผู้สัมภาษณ์ต้องการทดสอบความรู้ของคุณเกี่ยวกับวิธีการจัดการ Servlet โดยคอนเทนเนอร์

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


3) คุณจัดการคำขอจากไคลเอ็นต์ใน Servlet อย่างไร?

สิ่งที่คาดหวังจากผู้สมัคร: พวกเขาต้องการทำความเข้าใจวิธีการทำงานกับเมธอด HTTP และการประมวลผลคำขอ

ตัวอย่างคำตอบ: คำขอของลูกค้าจะได้รับการจัดการผ่านทาง service() เมธอดที่ส่งต่อคำขอไปยังเมธอดเฉพาะต่างๆ เช่น doGet(), doPost(), doPut()หรือ doDelete() โดยอิงตามวิธีการ HTTP แต่ละวิธีจะประมวลผลคำขอ โต้ตอบกับส่วนประกอบแบ็กเอนด์หากจำเป็น และเขียนการตอบกลับโดยใช้ HttpServletResponse วัตถุ.


4) คุณจัดการเซสชันอย่างไร tracราชาแห่งเซิร์ฟเล็ต?

สิ่งที่คาดหวังจากผู้สมัคร: ผู้สัมภาษณ์ต้องการทราบว่าคุณรักษาสถานะของผู้ใช้ไว้ได้อย่างไรในระหว่างการร้องขอหลายครั้ง

ตัวอย่างคำตอบ: เซสชั่น tracราชาใน Servlets สามารถจัดการได้โดยใช้ HttpSession, คุ้กกี้, URL การเขียนใหม่ หรือการซ่อนช่องกรอกข้อมูล วิธีที่พบได้บ่อยที่สุดคือการใช้ HttpSessionซึ่งช่วยให้สามารถจัดเก็บข้อมูลเฉพาะของผู้ใช้ไว้ที่ฝั่งเซิร์ฟเวอร์ และเรียกใช้ข้อมูลนั้นได้หลายครั้งจนกว่าเซสชันจะหมดอายุหรือถูกยกเลิก


5) อธิบายสถานการณ์ที่คุณได้ปรับปรุงประสิทธิภาพของแอปพลิเคชันที่ใช้ Servlet

สิ่งที่คาดหวังจากผู้สมัคร: พวกเขากำลังประเมินทักษะการแก้ปัญหาและประสบการณ์ภาคปฏิบัติของคุณ

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


6) คุณจัดการกับข้อผิดพลาดใน Servlet อย่างไร?

สิ่งที่คาดหวังจากผู้สมัคร: ผู้สัมภาษณ์มองหาแนวทางการแก้ไขข้อผิดพลาดที่เป็นระบบ

ตัวอย่างคำตอบ: สามารถจัดการข้อผิดพลาดใน Servlet ได้โดยใช้บล็อก try-catch ภายในโค้ด Servlet หรือโดยการกำหนดหน้าแสดงข้อผิดพลาดในไฟล์ .servlet web.xml หรือผ่านการใส่คำอธิบายประกอบ ผมชอบการจัดการข้อผิดพลาดแบบรวมศูนย์มากกว่า โดยที่ข้อยกเว้นจะถูกบันทึกอย่างถูกต้อง และส่งการตอบกลับข้อผิดพลาดที่มีความหมายกลับไปยังผู้ใช้โดยไม่เปิดเผยรายละเอียดภายใน


7) ความแตกต่างระหว่าง RequestDispatcher forward และ sendRedirect คืออะไร?

สิ่งที่คาดหวังจากผู้สมัคร: พวกเขาต้องการทดสอบความเข้าใจของคุณเกี่ยวกับขั้นตอนการร้องขอและการนำทาง

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


8) เล่าให้ฟังหน่อยว่าคุณเคยทำงานกับฟิลเตอร์หรือลิสเตอรองเตอร์ในโปรเจกต์ที่ใช้ Servlet มาก่อนหรือไม่

สิ่งที่คาดหวังจากผู้สมัคร: ผู้สัมภาษณ์ต้องการทราบประสบการณ์ของคุณเกี่ยวกับการใช้งานคุณสมบัติขั้นสูงของ Servlet

ตัวอย่างคำตอบ: ในตำแหน่งงานก่อนหน้านี้ ฉันใช้ Servlet filters เพื่อตรวจสอบการบันทึกข้อมูลและการตรวจสอบสิทธิ์ก่อนที่คำขอจะไปถึง Servlet หลัก นอกจากนี้ ฉันยังทำงานกับ listeners เพื่อ... tracเหตุการณ์การสร้างและทำลายเซสชัน k รายการ ช่วยในการตรวจสอบผู้ใช้งานที่ใช้งานอยู่และจัดการทรัพยากรได้อย่างมีประสิทธิภาพ


9) คุณจะจัดการกับสถานการณ์ที่มีปริมาณการใช้งานสูงในแอปพลิเคชัน Servlet อย่างไร?

สิ่งที่คาดหวังจากผู้สมัคร: พวกเขากำลังทดสอบความสามารถของคุณในการออกแบบระบบที่ปรับขนาดได้และเชื่อถือได้

ตัวอย่างคำตอบ: ฉันจะตรวจสอบให้แน่ใจว่าการทำงานแบบมัลติเธรดมีประสิทธิภาพโดย keeping ใช้ Servlet แบบไร้สถานะเท่าที่จะเป็นไปได้ และใช้ส่วนประกอบที่ปลอดภัยต่อการทำงานแบบมัลติเธรด ในงานก่อนหน้านี้ ผมยังใช้การกระจายโหลด กลไกการแคช และการเข้าถึงฐานข้อมูลที่ได้รับการปรับให้เหมาะสม เพื่อรองรับปริมาณการใช้งานสูงโดยไม่ทำให้ประสิทธิภาพลดลง


10) อธิบายปัญหาที่ท้าทายที่คุณพบขณะดีบัก Servlet และวิธีการแก้ไขปัญหานั้น

สิ่งที่คาดหวังจากผู้สมัคร: ผู้สัมภาษณ์ต้องการประเมินวิธีการแก้ไขข้อผิดพลาดและความสามารถในการรับมือกับปัญหาของคุณ

ตัวอย่างคำตอบ: ในบทบาทล่าสุดของฉัน ฉันประสบปัญหาที่ Servlet ส่งคืนการตอบสนองที่ไม่ถูกต้องเป็นระยะ ๆ เนื่องจากข้อมูลที่เปลี่ยนแปลงได้ถูกใช้ร่วมกันระหว่างเธรด ฉันแก้ไขปัญหานี้โดยการระบุปัญหาด้านความปลอดภัยของเธรด ปรับปรุงโค้ดเพื่อลบสถานะที่ใช้ร่วมกัน และเพิ่มการบันทึกข้อมูลที่เหมาะสมเพื่อตรวจสอบการแก้ไขภายใต้ภาระงานพร้อมกัน

สรุปโพสต์นี้ด้วย: