Apache Tomcat คือ ตอนที่ 3 : Servlets และ JSP

  1. ทำความเข้าใจกับ Java Servlets และ JSP
  2. วงจรชีวิต (Lifecycle) Servlet
  3. วงจรชีวิต (Lifecycle) JSP
  4. การทำแอพอย่างง่าย
  5. การปรับใช้ (Deploying) แอปพลิเคชันบน Apache Tomcat

หนึ่งในการใช้งานหลักของ Apache Tomcat คือการโฮสต์แอปพลิเคชันที่สร้างด้วย Java Servlet และ JavaServer Pages (JSP) เทคโนโลยีเหล่านี้ช่วยให้นักพัฒนาสามารถทำแอพแบบไดนามิกด้วย Servlet จัดการคำขอและตรรกะทางธุรกิจและ JSP สำหรับสร้างเนื้อหาเว็บแบบไดนามิก ในบทความนี้ เราจะเจาะลึกลงไปถึงการทำงานของ Java Servlet และ JSP วงจรชีวิต และที่สำคัญ วิธีทำแอพและปรับใช้ (Deploying) แอปพลิเคชันเหล่านี้ในการทำแอพ Apache Tomcat

1. ทำความเข้าใจกับ Java Servlets และ JSP

Java Servlet และ JSP เป็นเทคโนโลยีหลักในโดเมนการทำเว็บ Java Java Servlet เป็นเทคโนโลยีฝั่งเซิร์ฟเวอร์ที่ขยายขีดความสามารถของเซิร์ฟเวอร์ที่โฮสต์แอปพลิเคชัน เป็นคลาสที่ใช้เพื่อขยายขีดความสามารถของเซิร์ฟเวอร์ที่โฮสต์แอปพลิเคชันที่เข้าถึงได้โดยใช้รูปแบบการเขียนโปรแกรมตอบสนองคำขอ Servlets สามารถตอบสนองคำขอประเภทใดก็ได้ แต่โดยทั่วไปจะใช้เพื่อขยายแอปพลิเคชันที่โฮสต์โดยเว็บเซิร์ฟเวอร์

ในทางกลับกัน JavaServer Pages (JSP) เป็นเทคโนโลยีที่ช่วยในการสร้างเนื้อหาเว็บแบบไดนามิก หน้า JSP ประกอบด้วยมาร์กอัป HTML หรือ XML พร้อมด้วยการกระทำและคำสั่ง JSP ที่ฝังอยู่

Servlets และ JSP ทำงานร่วมกันอย่างใกล้ชิด – โดยทั่วไปแล้ว servlets จะจัดการตรรกะทางธุรกิจ ในขณะที่ JSP ใช้สำหรับเลเยอร์การนำเสนอ ซึ่งคล้ายกับรูปแบบ MVC (Model View Controller)

2. วงจรชีวิต (Lifecycle) Servlet

วงจรชีวิต (Lifecycle) ของ Servlet ได้รับการจัดการโดยคอนเทนเนอร์ Servlet ของเว็บเซิร์ฟเวอร์ วงจรชีวิตประกอบด้วยขั้นตอนต่อไปนี้:

  1. กำลังโหลด (Loading) และการสร้างอินสแตนซ์ (Instantiation) : โหลดคลาส Servlet และคอนเทนเนอร์สร้างอินสแตนซ์ Servlet
  2. Initialization : init วิธีการนี้ถูกเรียกใช้โดยคอนเทนเนอร์เพื่อเริ่มต้น Servlet
  3. การจัดการคำขอ (Request Handling) : serviceเมธอดถูกเรียกใช้เพื่อจัดการคำขอของไคลเอ็นต์ เมธอดนี้ถูกเรียกใช้สำหรับแต่ละคำขอที่ Servlet ประมวลผล
  4. การลบออกจากบริการ (Removal from Service) : destroy เมธอดนี้เรียกเพียงครั้งเดียวเมื่อ Servlet ถูกลบออกจากบริการ หลังจากนี้ วัตถุ Servlet ก็พร้อมสำหรับการรวบรวมขยะ

3. วงจรชีวิต (Lifecycle) JSP

วงจรชีวิต (Lifecycle) ของ JSP นั้นแตกต่างกันเล็กน้อย:

  1. การแปล (Translation) : ไฟล์ JSP ถูกแปลเป็น Java Servlet
  2. การคอมไพล์ (Compilation) : Servlet ที่แปลถูกคอมไพล์เป็นคลาส
  3. กำลังโหลด (Loading) และการสร้างอินสแตนซ์ (Instantiation) : เช่นเดียวกับ Servlet คลาสจะถูกโหลดและสร้างอินสแตนซ์
  4. Initialization : jspInitเมธอดถูกเรียกเพียงครั้งเดียว
  5. การประมวลผลคำขอ (Request Processing) : _jspService วิธีการนี้ถูกเรียกใช้สำหรับแต่ละคำขอของไคลเอ็นต์
  6. Destruction : jspDestroy เมธอดนี้ถูกเรียกเมื่อ JSP ถูกลบออกจากบริการ

4. การทำแอพอย่างง่าย

ตัวอย่างเช่น เราจะทำแอพอย่างง่ายโดยใช้ Servlets และ JSP แอปพลิเคชันนี้จะอนุญาตให้ผู้ใช้ป้อนชื่อและแสดงคำทักทายส่วนตัว

ขั้นแรกเราสร้างโครงสร้างไดเร็กทอรีสำหรับแอปพลิเคชันของเรา:

GreetingApp
|
|---WEB-INF
|   |---classes
|   |
|   |---lib
|
|---index.jsp

ใน WEB-INF/classes เราจัดเก็บคลาส Servlet ในขณะที่ WEB-INF/lib จะมีไลบรารีที่เราอาจใช้ ไฟล์ index.jsp เป็นจุดเริ่มต้นของเรา

ประการที่สองเราสร้าง Servlet ( GreetingServlet.java) ภายใน WEB-INF/classes:

import javax.servlet.*;
import javax.servlet.http.*;
import java.io.*;

public class GreetingServlet extends HttpServlet {
    public void doPost(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
        String name = request.getParameter("name");
        HttpSession session = request.getSession();
        session.setAttribute("name", name);
        response.sendRedirect("greeting.jsp");
    }
}

Servlet นี้ได้รับคำขอ POST เรียกพารามิเตอร์ชื่อจากคำขอ และจัดเก็บไว้ในเซสชัน จากนั้นจะเปลี่ยนเส้นทางผู้ใช้ไปยัง greeting.jsp

ประการที่สามเราสร้างไฟล์ JSP ของเรา ไฟล์ index.jsp นำเสนอผู้ใช้ด้วยแบบฟอร์มเพื่อป้อนชื่อ:

<!DOCTYPE html>
<html>
<head>
    <title>Greeting App</title>
</head>
<body>
<form method="post" action="GreetingServlet">
    <label for="name">Enter your name:</label><br>
    <input type="text" id="name" name="name"><br>
    <input type="submit" value="Submit">
</form>
</body>
</html>

ไฟล์ greeting.jsp เป็นที่ที่ผู้ใช้ถูกเปลี่ยนเส้นทางหลังจากส่งชื่อแล้ว มันดึงชื่อจากเซสชั่นและแสดงคำทักทาย:

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
    <title>Hello!</title>
</head>
<body>
    <h1>Hello, ${sessionScope.name}!</h1>
</body>
</html>

ประการที่สี่เราต้องการไฟล์ web.xml ใน WEB-INF ไดเร็กทอรีเพื่อกำหนด Servlet และรูปแบบ URL ของมัน:

<web-app>
  <servlet>
    <servlet-name>GreetingServlet</servlet-name>
    <servlet-class>GreetingServlet</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>GreetingServlet</servlet-name>
    <url-pattern>/GreetingServlet</url-pattern>
  </servlet-mapping>
</web-app>

5. การปรับใช้ (Deploying) แอปพลิเคชันบน Apache Tomcat

ในการปรับใช้แอปพลิเคชันนี้ เราจำเป็นต้องสร้างไฟล์ WAR (Web Application Archive) ของไดเร็กทอรีแอปพลิเคชัน IDE ส่วนใหญ่ เช่น Eclipse หรือ IntelliJ IDEA สามารถทำได้โดยอัตโนมัติ หรือคุณสามารถดำเนินการด้วยตนเองโดยใช้jarคำสั่ง:

jar -cvf GreetingApp.war *

คำสั่งนี้สร้างไฟล์ GreetingApp.war จากไฟล์ทั้งหมดในไดเร็กทอรีปัจจุบัน

จากนั้น คุณสามารถปรับใช้ไฟล์ WAR ใน Apache Tomcat ได้โดยการคัดลอกไปยังไดเร็กทอรี webapps ของการติดตั้ง Tomcat ของคุณ Tomcat จะปรับใช้แอปพลิเคชันโดยอัตโนมัติ คุณสามารถเข้าถึงได้ที่ http://localhost:8080/GreetingApp/


Java Servlets และ JSP มีความสามารถที่แข็งแกร่งในการทำเว็บแอปพลิเคชันแบบไดนามิก เซิร์ฟเล็ตดูแลคำขอการประมวลผลและจัดการตรรกะทางธุรกิจ ในขณะที่ใช้ JSP เพื่อสร้างอินเทอร์เฟซผู้ใช้ Apache Tomcat ทำหน้าที่เป็นแพลตฟอร์มที่มีประสิทธิภาพและเชื่อถือได้สำหรับการปรับใช้แอปพลิเคชันเหล่านี้ แม้ว่าการทำแอพตัวอย่างของเราจะตรงไปตรงมา แต่เทคโนโลยีเหล่านี้สามารถรองรับการทำเว็บแอปพลิเคชันขนาดใหญ่ที่มีความซับซ้อนสูง ซึ่งเป็นแกนหลักของบริการเว็บร่วมสมัยจำนวนมาก


Apache Tomcat คืออะไร

Apache Tomcat คือ ตอนที่ 2 : การใช้งานเบื้องต้น
Apache Tomcat คือ ตอนที่ 4 : Tomcat Manager