วันศุกร์ที่ 10 มกราคม พ.ศ. 2563

Java Servlet คืออะไร?



ก่อนอื่นก็ต้องพูดถึงการเขียน Web ก่อนนะครับ ในการทำ web site สักเว็บนึง ก็ต้องมีหลาย web page ครับ ซึ่งก็ต้องมีวิธีการส่งค่าระหว่าง web page ครับ อย่างเช่น อยากส่ง username , password ไปให้อีกหน้าหนึ่งเพื่อเช็คว่ามีในฐานข้อมูลหรือไม่ อะไรประมาณนี้

ถ้าลองสังเกตกันดีๆ เวลาเราเล่นเว็บปกติ อาจจะมีอะไรที่ยืดๆยาวๆในช่อง URL ของเรา เช่น ..../loginAction.do?username=boonoom&title=bloggerหรืออะไรทำนองนี้ เครื่องหมาย "?" เป็นการบอกว่าข้างหลังมันคือ parameter นั่นเอง ในที่นี้มี parameter ชื่อ username ที่มีค่า boonoomและ title มีค่า blogger

การที่เราจะสามารถส่งค่าในลักษณะนี้ได้ สำหรับ HTML แล้ว เราสามารถทำได้โดยการ submit ที่อยู่ภายใต้แท็ก form มา ดังนี้




<form action="webpage2.php" method="GET">
<input name="ID" type="text">
<input name="submit" type="submit" value="Submit Query">
</form>

จากโค้ดตัวอย่างนี้ เมื่อกด submit แล้ว จะมีการเรียก webpage2.php โดยมี parameter ชื่อ ID พร้อมค่าที่ส่งลงไป [สมมุติว่าใส่ "aaaaa" url ของเราก็จะเป็น ..../webpage2.php?ID=aaaaa ครับ ซึ่งการกำหนด method ใน form ดังตัวอย่างนี้เป็นแบบ GET คือแสดงให้เป็นกับ url ครับ ถ้าเราเปลี่ยนเป็น



<form action="webpage2.do" method="POST">
<input name="ID" type="text">
<input name="submit" type="submit" value="Submit Query">
</form>

การแสดงพารามิเตอร์ที่ url จะไม่แสดงครับ คือแสดงแค่ .../webpage2.php แต่เราก็สามารถเรียกใช้ได้เหมือนเดิม


สำหรับการเรียกใช้ parameter ในภาษา PHP จะสามารถเรียกได้โดยใช้ตัวแปร GET หรือ POST ขึ้นอยู่กับการกำหนด method ใน HTML ก่อนหน้านี้ครับ
1
2
//Display parameter ID
echo $GET['ID'];

หรือ
?
1
2
//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
?
1
2
3
4
5
<% String context = request.getContextPath(); %>
<form action="<%=context%>/Servlet" method="GET">
<input name="ID" type="text">
<input name="submit" type="submit" value="Submit Query">
</form>

ส่วนของ Servlet ผมตั้งชื่อไฟล์ว่า Servlet.java แต่ตอนเราเรียกไม่ต้องใส่ .java ตามเพราะ code ของเราจะถูก compile ไป ถ้าใครใช้ Editor พวก Eclipse หรือ Netbeans จะมีการ generate source code ส่วนอื่นๆให้เอง ซึ่งส่วนมากจะสร้างให้ doGet(),doPost() เรียกใช้อีก Function หนึ่ง ทำให้เราง่ายต่อการแก้ไข ในตัวอย่างนี้ทำงานเหมือนโค้ดก่อนหน้า คือรับพารามิเตอร์และแสดงผล
?
1
2
3
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 มาก