JAVA : Tomcat is not a Cat (Brief)

เอาละ วันนี้ข้าน้อยเบื่ออีกแล้ว (เอาไงกันเนี่ย เบื่อง่ายจัง) ก็เลยว่าจะมาลง blog ให้นิดหน่อยครับ เรื่อง Tomcat (ไม่ใช่ Tom Cat ที่กัดกับ Jerry Mouse แล้วแพ้ตลอดนะครับ เจ้านี้ชนะเรื่อง Java Server ด้วยซ้ำ)

ก็ขอบอกอีกทีว่าไม่ได้เก่งอะไรมากมายนะครับ ก็อาจพลาดหรือตกหล่นอะไรได้ ก็เพิ่มลงไปใน comment ได้เลยครับ แล้วจะ update ให้ถูกต้องอีกที

ในปัจจุบัน ตลาดโปรแกรมมีการแข่งขันกันมากขึ้น ทำให้ต้องมีการพัฒนาโปรแกรม และภาษาโปรแกรมให้ดีขึ้นกว่าคู่แข่งเสมอ มีช่วงหนึง ตั้งแต่การถือกำเนิดของ Java กับ Concept ว่า “Write once, Run anywhere” (ไม่ถูกนักหรอกครับ) การเขียนโปรแกรมก็ไปทำบนเว็บมากขึ้น

Microsoft มี ASP แล้ว Sun ก็เลยมี JSP ด้วย ทั้งสองอย่างเป็นโปรแกรมที่รันจาก server ทั้งสิ้น

จริงๆ แล้ว Tomcat นั้น เป็น project ของ Jakarta (สาขาย่อยของ Apache นะครับ ไม่ใช่ Indonesia) ซึ่งเป็นสาขาที่ทำงานเกี่ยวกับ Java ของทาง Apache เอง (เจ้าของ “Apache Server” ที่เป็นที่นิยมมากที่สุดในปัจจุบัน) แต่จากความน่าจนใจและคุณภาพของงาน ทำให้ Jakarta Tomcat ได้เลื่อนยศเป็น Apache Tomcat ในที่สุด

ที่ควรรู้คือ Tomcat นั้น ก็เป็น Web Server กลายๆ ด้วย (แม้ว่าเขาจะไม่ใช้กันก็เถอะ) เพราะฉะนั้น อย่าเพิ่งไปรัน Server app อื่นๆ ถ้ามี เพราะ port จะชนกัน ใช้ไม่ได้อีก

ทีนี้ การจะใช้ Tomcat นั้นไม่ค่อยยากนักครับ เพราะหลักๆ แล้วจะเป็นเรื่องของการเขียน code ที่ยากกว่า เพราะต้องมีเรื่องของลักษณะการทำงานกับ server ที่ค่อนข้างเฉพาะกว่าการใช้ Applet (ซึ่งปัจจุบันเขา*แนะให้เลิกใช้ เพราะมันไม่ค่อยสะดวก)

ส่วนในหลักการทำงาน Tomcat สามารถรับเอา Web app ใหม่เข้ามารันได้เลย โดยหากเรานำไฟล์ .war (ก็คือ .jar ที่ rename ใหม่) มาวางใน %Tomcat_dir%/webapps/ (ตรงที่มี ROOT) ในขณะที่ Tomcat กำลังทำงานอยู่ มันจะโหลดเอา war เข้าไปเองโดยไม่ต้อง reset Tomcat เลย

ยังไม่หมดครับ Tomcat ยังมี port ฉุกเฉิน สามารถตัดระบบได้ง่าย โดยเข้า telnet ไปที่ port 8005 แล้วสั่ง SHUTDOWN ได้ทันที

ในแต่ละ Web app ก็ยังมี folder ชื่อ WEB-INF (ซึ่งต้องมี และ case sensitive) สำหรับเก็บ classes และ jars รวมไปถึง config และไฟล์อื่นๆ ที่เราต้องการเก็บเป็นความลับด้วย (โดยเรียกเอาจากโปรแกรมได้อย่างเดียว)

อ้อ เกือบลืมไป help และ docs มีติดมากับ Tomcat แล้วนะครับ ไม่ต้องไปหาเพิ่ม

เอาเป็นว่า วันนี้เหนื่อยมากแล้วครับ (เหนื่อยง่ายจังเรา) เพราะเพิ่งได้ Java Workshop certificate จาก Software Park มาหมาดๆ (แต่ก็ยังถ่ายทอดเนื้อหาห่วยแตกเหมียนเดิม T_T)

สุดท้ายนี้ ก็ขอให้โชคดีนะครับ จบแล้ว เหอๆๆๆ = =”

* “เขา” คือ ดร.วีระศักดิ์ ซึงถาวร ครับ

JAVA : GUI Basics

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

เวลาเราเขียนโปรแกรม เราใช้คนเดียว เราใช้รับ String args [] เอาก็ได้ใช่ไหมครับ แต่ว่าเวลาเอาไปให้คนอื่นใช้ ถ้าเขาเป็น End User ก็คงใช้ไม่ถูก

ยิ่งสมัยก่อน ระบบเป็นแบบ Text-Based (เช่น สมัย DOS) แน่นอน GUI ไม่มีเลย ทุกอย่างใช้การส่งค่าเข้าไปในโปรแกรมตรงๆ ตลอด ตัวอย่างก็เช่น ping, tracert ก็ต้องระบุ IP ของเป้าหมายลงไป ก็ถือเป็นการส่งค่า parameter อย่างหนึ่ง

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

GUI ที่ดี จะต้องสวยงาม (อย่างน้อยก็เป็นระเบียบละ) ใช้งานได้ง่าย ทำงานได้รวดเร็วไม่หน่วงระบบ และไม่ทำให้เกิดความสับสนแก่ผู้ใช้ครับ (ถ้าเราสร้่าง Frame1 Frame2 Frame3 etc. แบบนี้พร้อมๆ กัน แถมมีปุ่มอะไรไม่รู้อีกเยอะแยะ User คงงงตาย กดไปจะระเบิดรึเปล่าเนี่ย)

เอาละ เกริ่นกันมามาก เดี๋ยวท่านๆ จะนึกว่าข้าน้อยกำลังบ่นแบบคนแก่ซะเปล่าๆ เอาเป็นว่ามาเริ่มกันเลยครับ

ระบบ GUI ของ Java นั้นมีลักษณะเฉพาะตัว ก็เนื่องมาจากการที่ Java มี JVM อยู่นั่นเอง ทำให้การทำงานมีขั้นตอนมากกว่า C อยู่พอสมควร

Components
Component ก็คือ “ชิ้นส่วน” บน Interface นั่นเอง เช่น Button, TextField, ฯลฯ ซึ่งจะต้องวางลงบน Frame หรือ Component อื่นที่มีคุณสมบัติเป็น Container (เช่น Frame, Window, Dialog, Panel)

ทุกอย่างจะต้อง “วาด” ลงบนวัตถุที่เป็น Top-Level ก็คือ พื้นหน้าจอต่างๆ นั่นเอง หากตัวเองไม่ใช่ Top-Level แล้ว ก็ทำได้แค่ใช้หน่วยความจำ จากนั้นค่อยวาดลงไปบน Top-Level Component อีกที

Layout Manager
Layout Manager ก็คือระบบที่ไว้ช่วยจัดวาง GUI ให้เรานั่นเอง Layout Manager มีสี่อย่างหลักๆ ได้แก่…

– FlowLayout เป็นการแบ่งหน้าจอเป็นบรรทัดๆ วางลงให้เต็มทีละบรรทัด (เรียงตามลำดับการ new Component) จัดกลางเสมอ
– BorderLayout แบ่งจอเป็นห้าส่วน ได้แก่ North, East, South, West และ Center. แต่ละ Region จะวางวัตถุได้แค่ชิ้นเดียว (ซึ่งแก้ได้ด้วยการใช้ Panel)
– GridLayout จะรับค่าจากผู้ใช้ แล้วแบ่งจอออกเป็นส่วนๆ ตามที่ผู้ใช้กำหนด แต่ละช่องมีขนาดเท่ากันเสมอ
– Null – ที่สุดแห่งกระบวนท่า คือไร้กระบวนท่า – ระบบนี้จะให้เราจัดวางตำแหน่งของวัตถุต่างๆ ได้อย่างอิสระ โดยใช้คำสั่ง .setBounds (X,Y,Width,Height); ในการช่วยจัดวาง

Toolkits
ระบบดั้งเดิมสำหรับทำ Interface ก็คือระบบ AWT (Abstract Windowing Toolkit) ซึ่งมีมาใน JDK ตั้งแต่รุ่นแรกๆ มีคำสั่งพื้นฐานสำหรับการสร้าง Interface มาให้ (import java.awt.*;)

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

ส่วนข้อเสียนั้น ก็คือ AWT ทำงานค่อนข้างช้าครับ AWT ทำงานโดยการ….

1. ส่งไปยัง JVM
2. JVM โหลดเข้า API (ซึ่งเป็นของ OS)
3. API ใช้ subroutine ของตัวเอง (หลายบรรทัดอยู่มาก) ในการ render ออกมาเป็นภาพ

จากขั้นตอนเหล่านี้ ทำให้ระบบ AWT ไม่ค่อยเป็นที่นิยมในปัจจุบัน

ต่อมาในยุค Java 1.1 ก็ได้เกิดระบบ Swing ขึ้น (เกิดจากภาพ animation เจ้า Duke โล้ชิงช้าในระบบ GUI ในสมัยนั้น จึงได้ชื่อนี้มา) ซึ่งหลักการแตกต่างออกไป คือ จะมีการใช้ Graphic Memory เข้าช่วย และไม่ได้ใช้ subroutine ของ OS โดยตรง ทำให้ลดภาระลงไป และที่มากไปกว่านั้นก็คือ Components ต่างๆ สามารถโหลดเข้า Graphic Memory ได้จาก JVM โดยไม่ต้องใช้ API ทำ