Filed under J2EE

อะไรคือความแตกต่างระหว่าง response.sendRedirect(), RequestDispatcher.forward(), และ PageContext.forward()?

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

RequestDispatcher.forward() เป็นการทำงานที่อยู่บนเซิร์บเวอร์ แต่ response.sendRedirect() ทำงานอยู่บนบราวเซอร์. เมื่อมีการเรียกใช้งาน RequestDispatcher.forward(), servlet engine จะำทำการ Transfer control ของ HTTP request ที่ได้รับมาตั้งแต่แรกและยังทำงานอยู่ที่ Servlet หรือ ที่ JSP ยังทำการที่ Servlet อื่น. แต่เมื่อทำการเรียกใช้งาน response.sendRedirect() การส่งภาระให้กับบราวเซอร์คืนกลับไปจัดการเอง เหมือนทำให้ท้องแล้วไม่รับผิดชอบยังใงยังงั้น อ๊อบเจ็คต์ Request Response ก็ให้บราวเซอร์ทำการ Route ไปหา Servlet อื่นหรือหน้า JSP อื่นตัวเก่าก็ไม่เหลืออะไร

ส่วน RequestDispatcher.forward() และ PageContext.forward() จะมีหน้าที่เหมือนๆ กันแต่ PageContext.forward() จะเป็น Method Helper ให้กับทาง RequestDispacher.forward() อีกทีหนึ่งนั่นเอง

Tagged ,
Follow

Get every new post delivered to your Inbox.