[Java] Java Servlet คืออะไร?
ก่อนอื่นก็ต้องพูดถึงการเขียน web ก่อนนะครับ ในการทำ web site สักเว็บนึง ก็ต้องมีหลาย web page ครับ ซึ่งก็ต้องมีวิธีการส่งค่าระหว่าง web page ครับ อย่างเช่น อยากส่ง username , password ไปให้อีกหน้าหนึ่งเพื่อเช็คว่ามีในฐานข้อมูลหรือไม่ อะไรประมาณนี้
ซึ่งผลลัพธ์จะเป็นดังนี้
*ไม่ต้องลองกด submit จริงๆนะครับ เป็นตัวอย่าง output เฉยๆ
จากโค้ดตัวอย่างนี้ เมื่อกด submit แล้ว จะมีการเรียก webpage2.php โดยมี parameter ชื่อ ID พร้อมค่าที่ส่งลงไป [สมมุติว่าใส่ "aaaaa" url ของเราก็จะเป็น ..../webpage2.php?ID=aaaaa ครับ ซึ่งการกำหนด method ใน form ดังตัวอย่างนี้เป็นแบบ GET คือแสดงให้เป็นกับ url ครับ ถ้าเราเปลี่ยนเป็น
การแสดงพารามิเตอร์ที่ url จะไม่แสดงครับ คือแสดงแค่ .../webpage2.php แต่เราก็สามารถเรียกใช้ได้เหมือนเดิม
สำหรับการเรียกใช้ parameter ในภาษา PHP จะสามารถเรียกได้โดยใช้ตัวแปร GET หรือ POST ขึ้นอยู่กับการกำหนด method ใน HTML ก่อนหน้านี้ครับ
หรือ
จะเห็นว่าในภาษา PHP นั้นจะดึงค่า parameter มาเห็นตัวๆ ต่างจาก Java Servlet ซึ่งเป็นการทำโดยใช้ function เมื่อมีการส่งค่ามา จะมี function ชื่อ doGet() และ doPost() ซึ่งถ้ามีการส่งค่ามาแบบ GET ก็จะเข้า function doGet() ถ้าส่งแบบ POST ก็เข้า doPost() ซึ่งอาจให้ทั้ง 2 ฟังก์ชันนี้ทำงานเหมือนกันหรือต่างกันก็ได้
เยิ่นเย้อซะนาน มาถึงช่วงคำตอบว่า Java Servlet คืออะไร?? จะว่าง่ายๆ มันก็คือ การทำ Web Application ด้วยภาษา Java ซึ่ง Java Servlet มักจะทำงานร่วมกับ JSP (Java Server Pages) ที่เป็นภาษา HTML+JAVA มักจะใช้ในส่วนการแสดงผล และหากต้องการคำนวณอะไรบางอย่าง ก็จะส่งค่าไปยัง Java Servlet ให้ทำให้และส่งค่ามาแสดงผลอีกครั้ง
ส่วนของ JSP แสดง textbox และปุ่ม submit
ส่วนของ Servlet ผมตั้งชื่อไฟล์ว่า Servlet.java แต่ตอนเราเรียกไม่ต้องใส่ .java ตามเพราะ code ของเราจะถูก compile ไป ถ้าใครใช้ Editor พวก Eclipse หรือ Netbeans จะมีการ generate source code ส่วนอื่นๆให้เอง ซึ่งส่วนมากจะสร้างให้ doGet(),doPost() เรียกใช้อีก Function หนึ่ง ทำให้เราง่ายต่อการแก้ไข ในตัวอย่างนี้ทำงานเหมือนโค้ดก่อนหน้า คือรับพารามิเตอร์และแสดงผล
แล้วมันต่างจาก PHP ยังไง? การทำงานของ Java Servlet จะดูเป็นสัดส่วนมากกว่า ถ้าเป็น php การเขียนโปรแกรมก็จะเป็น php <-> php โดยโปรแกรมเมอร์ก็ต้องจำเองว่าไฟล์ไหนคืออะไร อย่างดีก็คือสร้าง folder เพื่อช่วยจำ แต่ Java Servlet จะเป็นการส่งค่าระหว่าง jsp <-> java ซึ่งแยกส่วนแสดงผลและส่วนการทำงานชัดเจน ประกอบกับความ Security ที่สูงกว่า php องค์กรใหญ่ๆมักจะใช้กัน แต่ถ้าในวงการเว็บ ส่วนมากก็จะใช้ php มากกว่าเพราะทำงานได้ง่ายกว่าและเร็วกว่า และ php ก็เช่า web hosting ได้ในราคาถูกกว่า servlet มาก
ถ้าลองสังเกตกันดีๆ เวลาเราเล่นเว็บปกติ อาจจะมีอะไรที่ยืดๆยาวๆในช่อง URL ของเรา เช่น ..../main.php?ID=12345&str=abcde หรืออะไรทำนองนี้ เครื่องหมาย "?" เป็นการบอกว่าข้างหลังมันคือ parameter นั่นเอง ในที่นี้มี parameter ชื่อ ID ที่มีค่า 12345 และ str มีค่า abcde
การที่เราจะสามารถส่งค่าในลักษณะนี้ได้ สำหรับ HTML แล้ว เราสามารถทำได้โดยการ submit ที่อยู่ภายใต้แท็ก form มา ดังนี้
การที่เราจะสามารถส่งค่าในลักษณะนี้ได้ สำหรับ HTML แล้ว เราสามารถทำได้โดยการ submit ที่อยู่ภายใต้แท็ก form มา ดังนี้
<form action="webpage2.php" method="GET"> <input name="ID" type="text" /> <input name="submit" type="submit" /> </form>
ซึ่งผลลัพธ์จะเป็นดังนี้
*ไม่ต้องลองกด submit จริงๆนะครับ เป็นตัวอย่าง output เฉยๆ
จากโค้ดตัวอย่างนี้ เมื่อกด submit แล้ว จะมีการเรียก webpage2.php โดยมี parameter ชื่อ ID พร้อมค่าที่ส่งลงไป [สมมุติว่าใส่ "aaaaa" url ของเราก็จะเป็น ..../webpage2.php?ID=aaaaa ครับ ซึ่งการกำหนด method ใน form ดังตัวอย่างนี้เป็นแบบ GET คือแสดงให้เป็นกับ url ครับ ถ้าเราเปลี่ยนเป็น
<form action="webpage2.php" method="POST"> <input name="ID" type="text" /> <input name="submit" type="submit" /> </form>
การแสดงพารามิเตอร์ที่ url จะไม่แสดงครับ คือแสดงแค่ .../webpage2.php แต่เราก็สามารถเรียกใช้ได้เหมือนเดิม
สำหรับการเรียกใช้ parameter ในภาษา PHP จะสามารถเรียกได้โดยใช้ตัวแปร GET หรือ POST ขึ้นอยู่กับการกำหนด method ใน HTML ก่อนหน้านี้ครับ
//Display parameter ID echo $GET['ID'];
หรือ
//Display parameter ID echo $POST['ID']
จะเห็นว่าในภาษา PHP นั้นจะดึงค่า parameter มาเห็นตัวๆ ต่างจาก Java Servlet ซึ่งเป็นการทำโดยใช้ function เมื่อมีการส่งค่ามา จะมี function ชื่อ doGet() และ doPost() ซึ่งถ้ามีการส่งค่ามาแบบ GET ก็จะเข้า function doGet() ถ้าส่งแบบ POST ก็เข้า doPost() ซึ่งอาจให้ทั้ง 2 ฟังก์ชันนี้ทำงานเหมือนกันหรือต่างกันก็ได้
เยิ่นเย้อซะนาน มาถึงช่วงคำตอบว่า Java Servlet คืออะไร?? จะว่าง่ายๆ มันก็คือ การทำ Web Application ด้วยภาษา Java ซึ่ง Java Servlet มักจะทำงานร่วมกับ JSP (Java Server Pages) ที่เป็นภาษา HTML+JAVA มักจะใช้ในส่วนการแสดงผล และหากต้องการคำนวณอะไรบางอย่าง ก็จะส่งค่าไปยัง Java Servlet ให้ทำให้และส่งค่ามาแสดงผลอีกครั้ง
ส่วนของ JSP แสดง textbox และปุ่ม submit
<% String context = request.getContextPath(); %> <form action="<%=context%>/Servlet" method="GET"> <input name="ID" type="text" /> <input name="submit" type="submit" /> </form>
ส่วนของ Servlet ผมตั้งชื่อไฟล์ว่า Servlet.java แต่ตอนเราเรียกไม่ต้องใส่ .java ตามเพราะ code ของเราจะถูก compile ไป ถ้าใครใช้ Editor พวก Eclipse หรือ Netbeans จะมีการ generate source code ส่วนอื่นๆให้เอง ซึ่งส่วนมากจะสร้างให้ doGet(),doPost() เรียกใช้อีก Function หนึ่ง ทำให้เราง่ายต่อการแก้ไข ในตัวอย่างนี้ทำงานเหมือนโค้ดก่อนหน้า คือรับพารามิเตอร์และแสดงผล
String id = request.getParameter("ID"); //Display in console System.out.println(id);
แล้วมันต่างจาก PHP ยังไง? การทำงานของ Java Servlet จะดูเป็นสัดส่วนมากกว่า ถ้าเป็น php การเขียนโปรแกรมก็จะเป็น php <-> php โดยโปรแกรมเมอร์ก็ต้องจำเองว่าไฟล์ไหนคืออะไร อย่างดีก็คือสร้าง folder เพื่อช่วยจำ แต่ Java Servlet จะเป็นการส่งค่าระหว่าง jsp <-> java ซึ่งแยกส่วนแสดงผลและส่วนการทำงานชัดเจน ประกอบกับความ Security ที่สูงกว่า php องค์กรใหญ่ๆมักจะใช้กัน แต่ถ้าในวงการเว็บ ส่วนมากก็จะใช้ php มากกว่าเพราะทำงานได้ง่ายกว่าและเร็วกว่า และ php ก็เช่า web hosting ได้ในราคาถูกกว่า servlet มาก