Struts Framework – The Controller in MVC

ชั้น Controller ทำหน้าที่ในการประสานงานระหว่างชั้น Model และชั้น View เมื่อเกิดการเปลี่ยนแปลงที่ชั้น Model หรือ View ก็จะทำให้ไม่กระทบซึ่งกันและกัน และทำให้ชั้น Model ที่เป็นส่วนหลักของระบบสามารถนำไปใช้ได้หลากหลายขึ้น

ใน Web Application ที่เป็นแบบ MVC ส่วนของ Controller จะทำหน้าที่เป็นศูนย์กลางในการเข้าถึง Application เพราะทุก request จะต้องวิ่งผ่านส่วนของ Controller ซึ่งการทำแบบนี้ ชั้น Controller ก็จะสามารถเตรียมการ process บางอย่างก่อนที่จะเข้าไปทำงานในชั้นของ Business Logic เช่น security, caching, logging เป็นต้น

ภาพการทำงานส่วนของ Controller แบบคร่าวๆ

struts

ActionServlet หัวใจหลักของ Struts เป็นคลาส Servlet ซึ่งต้องลงทะเบียนไว้ที่ web.xml ก่อน เมื่อคลาสนี้ถูกโหลดขึ้นมา ก็จะทำการ Initial ค่าต่างๆ ที่ระบุไว้ใน struts-config.xml จากนั้นเมื่อมี Request ที่ตรงกับที่ลงทะเบียนไว้เข้ามา คลาสนี้ก็จะทำการส่งมอบหน้าที่ (Delegate) ให้กับคลาส RequestProcessor ซึ่งคลาสนี้จะแตกการทำงานออกเป็น method ย่อยๆ เพื่อให้ง่ายในการ customize การทำงานสำหรับ Request นั้นๆ โดย method จะขึ้นต้นด้วยคำว่า process มีรายการดังนี้

  • processMultipart
  • processPath
  • processLocale
  • processContent
  • processNoCache
  • processPreprocess
  • processCachedMessages
  • processMapping
  • processRoles
  • processActionForm
  • processPopulate
  • processValidate
  • processForward
  • processInclude
  • processActionCreate
  • processActionPerform
  • processForwardConfig

ส่วนการทำงานก็แปลตรงตัวตามชื่อ method ถ้าหากต้องการายละเอียดก็อ่านใน api ได้นะครับ ^^ ถ้าเราอยากให้ทำอะไร ตอนใหน ก็ทำการ customize ตาม method นั้นๆ ได้เลย (รายละเอียดการ customize ผมขอไม่ลงรายละเอียดนะครับ ไม่งั้นคงยาว) ถัดจากนั้น RequestProcessor ก็จะทำการโหลดคลาส Action และ FormBean ที่ลงทะเบียนใน struts-config.xml ขึ้นมาทำงานต่อไป

อีกคลาสที่ไม่ได้วาดใน Diagram คือคลาส ActionForward ซึ่ง Concept ของการทำ ActionForward ก็คือ เราใช้ลิงก์ที่เป็นชื่อแทนที่จะใช้เป็น path ทำให้เมื่อมีการแก้ไข จะทำได้สะดวกขึ้น โดยในคลาส Action ค่า return type ของเมธอด execute เป็น ActionForward อีกที่ที่เราใช้บ่อยคือ การสร้าง Link ซึ่งเราต้องไปประกาศเป็น global forward ใน struts-config.xml ซะก่อน ส่วนที่ return จากเมธอด execute นั้นสามารถประกาศใน tag ของ action เองหรือจะเรียกใช้จาก global forward ก็ได้เช่นกัน

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s