วันพุธที่ 24 มิถุนายน พ.ศ. 2558

Servlet part 5



เพราะว่า servlet เป็นโปรแกรมจาวา

>> เพราะว่า servlet เขียนด้วยภาษาจาวา สร้างขึ้นมาเพื่อเป็น server side programs ที่ต้องทำงานภายใต้สภาวะแวดล้อมของ Servlet Container

>> Servlet Container เป็น component ประเภทหนึ่งของโปรแกรม web server ซึ่งทำงานบนโปรโตคอล HTTP พูดง่ายๆว่า Servlet Container เป็นผู้จัดการ servlet ผ่าน interface ที่ชื่อ Servlet ด้วยเหตุนี้มันจึงสามารถควบคุมจัดการ servlet ทุกตัวได้โดยละม่อม

>> จากตัวอย่างที่ 1 (example1) ภายใต้ folder
D:\training\example1\src\training\controller
คลาส HelloServlet ไม่สามารถเป็น servlet ได้หากไม่ implements เจ้า interface ที่ชื่อ Servlet แล้ว interface ที่ว่าอยู่ไหน?

>> ดังจะเห็นว่าคลาส HelloServlet ขยายมาจากคลาส HttpServlet พูดง่ายๆว่ามันเป็นลูกของ HttpServlet ส่วน HttpServlet ก็เป็นพ่อมัน เออว่าไป

>> HttpServlet ก็ขยายมาจากคลาส GenericServlet อีกที ซึ่ง GenericServlet นี่แหละครับที่ implements เจ้า interface ที่ชื่อ Servlet ให้

>> คำถามที่มือใหม่อย่างผมสงสัยคือ ก็ถ้าจะเขียนคลาสจาวาธรรมดาให้กลายเป็น servlet ก็แค่ implement Servlet interface ชิมิ คำตอบคือ ใช่ครับ แล้วผมขอสังสัยต่อว่า แล้วจะไป extends คลาส HelloServlet อีกทำไมล่ะ? คำตอบลึกซึ้งนี่ต้องกล่าวถึงโปรแกรม HTTP Server กับ Request Methods ทั้ง 7 ประเภท (part 2) เพราะเราจะให้ servlet ทำงานผ่านทางนี้ (มีทางอื่นอีก แต่ไว้ก่อนนะครับ) นั่นหมายความว่าเมื่อมีคำร้องขอหรือ request เข้ามา โปรแกรม servlet ของเราจะต้องเข้าใจให้ได้ว่าเป็นคำร้องขอประเภทไหน ขอไฟล์ เพิ่มข้อมูล ปรับปรุงข้อมูล หรือลบข้อมูล อะไรอย่างนี้เป็นต้น ถามกลับว่า แล้วง่ายไหมหากรับเอา interface เพียวๆมาจัดการเอง คำตอบชักไม่แน่ใจ เพราะ Servlet interface นั้นว่าด้วยเรื่อง
- void init(ServletConfig config)
- ServletConfig getServletConfig()
- void service(ServletRequest req, ServletResponse res)
- String getServletInfo()
และ void destroy()
แต่ถ้ารับสืบทอดหรือขยายคลาสมาจาก HttpServlet จะว่าด้วยเรื่อง
- doGet ทำอะไรดีนะ
- doPost ทำอะไรดีนะ
เป็นต้น ซึ่งชัดเจนที่ประเภทคำร้องขอมากกว่า ไหนยังจะมี GenericServlet เป็นพ่อแม่ช่วยจัดการ config ไฟล์ web.xml ในโปรเจ็กต์ผ่าน interface ที่ชื่อ ServletConfig ให้อีกด้วยนะเออ

>> สรุป HelloServlet extends HttpServlet น่ะดีแล้ว

>> ตัวอย่างแรกนี้พี่เขา override เมธอด doGet ให้ servlet ของเราสร้างหน้าเอกสาร HTML ง่ายๆขึ้นมา มีแท็ก h1 เขียน Hello Servlet ส่วนแท็ก h2 เขียน TEST ปิดท้ายด้วยการทดสอบเรียกจาวาคลาส Date โชว์วันและเวลาครับ

>> ตอนนี้ให้สงสัยไว้ก่อนว่า
- doGet ทำงานได้อย่างไร?
- HttpServletRequest request คืออะไร มาจากไหน?
- HttpServletResponse response คืออะไร มาจากไหน?
เป็นว่าถ้าเราต้องการสร้างเอกสาร HTML ส่งกลับไปยัง browser หรือก็คือผู้ร้องขอต้นทาง ให้ใช้ออบเจ็กต์ PrintWriter ซึ่งขอได้จาก response เป็นผู้สร้างให้นะครับ

>> part นี้จบเท่านี้ก่อน เยอะแล้วจะไม่อยากอ่านต่อ อิอิ สวัสดีครับ

2 ความคิดเห็น:

  1. บทความที่เกี่ยวข้องกับ Objective-c ดูไม่ได้อะครับพี่ ช่วยกู้มันคืนกลับมาทีค้าบบบบบ T T

    ตอบลบ
  2. ขออภัยจริงๆครับ ผมลืมไปแล้วว่าหน้าไหนที่อ้างอิงเรื่อง Objective-C รบกวน Yod yotsaton แปะลิงค์หน้าที่อ้างอิงบทความดังกล่าวมาให้ทีสิครับ ขอบคุณครับ

    ตอบลบ