Tìm hiểu về các Máy chủ Servlet: Apache Tomcat và Eclipse Jetty

Trong thế giới phát triển ứng dụng web Java, các máy chủ Servlet đóng vai trò cốt lõi trong việc triển khai và chạy ứng dụng. Apache Tomcat và Eclipse Jetty là hai trong số những máy chủ Servlet phổ biến nhất, mỗi loại có những đặc điểm và ưu điểm riêng. Bài viết này sẽ đi sâu vào tìm hiểu cấu hình và cách sử dụng của cả hai.

1. Eclipse Jetty

Jetty là một máy chủ web và container servlet mã nguồn mở, được xây dựng hoàn toàn bằng Java. Nó cung cấp một môi trường chạy mạnh mẽ cho các ứng dụng web dựa trên Java, hỗ trợ các công nghệ như JavaServer Pages (JSP) và Servlets. Một trong những điểm mạnh chính của Jetty là khả năng nhúng (embeddable) cao, cho phép các nhà phát triển dễ dàng tích hợp nó vào các ứng dụng Java độc lập để cung cấp chức năng mạng và web mà không cần phải triển khai ra một máy chủ ứng dụng bên ngoài.

1.1 Cấu hình Jetty trong Maven

Để sử dụng Jetty trong dự án Maven, bạn cần thêm các dependency và plugin cần thiết vào tệp pom.xml của mình. Dưới đây là cấu hình cơ bản để chạy một ứng dụng web sử dụng API Servlet:

<dependencies>
        <!-- API Servlet, cần thiết cho việc phát triển web với Java -->
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <version>3.1.0</version>
            <scope>provided</scope>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <!-- Plugin Maven cho Jetty để chạy ứng dụng web -->
            <plugin>
                <groupId>org.eclipse.jetty</groupId>
                <artifactId>jetty-maven-plugin</artifactId>
                <version>9.4.43.v20210629</version>
                <configuration>
                    <stopPort>9966</stopPort>
                    <stopKey>jetty-stop</stopKey>
                    <scanIntervalSeconds>5</scanIntervalSeconds>
                    <webApp>
                        <contextPath>/ungdungweb</contextPath>
                    </webApp>
                    <httpConnector>
                        <port>8088</port>
                    </httpConnector>
                </configuration>
                <!-- Các execution cho phép tự động chạy/dừng Jetty trong quá trình kiểm thử -->
                <executions>
                    <execution>
                        <id>start-jetty</id>
                        <phase>pre-integration-test</phase>
                        <goals>
                            <goal>run</goal>
                        </goals>
                        <configuration>
                            <scanIntervalSeconds>0</scanIntervalSeconds>
                            <daemon>true</daemon>
                        </configuration>
                    </execution>
                    <execution>
                        <id>stop-jetty</id>
                        <phase>post-integration-test</phase>
                        <goals>
                            <goal>stop</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>

1.2 Cấu hình Servlet trong web.xml

Để ứng dụng web nhận diện và xử lý các yêu cầu cho Servlet, bạn cần khai báo Servlet và ánh xạ URL của nó trong tệp web.xml. Ví dụ sau minh họa cách định nghĩa một servlet:

<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
                                 http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
             version="3.1">

        <servlet>
            <servlet-name>exampleServlet</servlet-name>
            <servlet-class>com.example.web.MyWebAppServlet</servlet-class>
        </servlet>

        <servlet-mapping>
            <servlet-name>exampleServlet</servlet-name>
            <url-pattern>/api/hello</url-pattern>
        </servlet-mapping>

    </web-app>

1.3 Khởi động Jetty

Sau khi cấu hình hoàn tất, bạn có thể khởi động Jetty thông qua Maven bằng lệnh sau:

mvn jetty:run

2. Apache Tomcat

Apache Tomcat là một máy chủ ứng dụng web mã nguồn mở, miễn phí và phổ biến, được phát triển bởi Apache Software Foundation. Đây là một máy chủ "nhẹ", thường được sử dụng rộng rãi trong các hệ thống quy mô vừa và nhỏ hoặc những môi trường có số lượng người dùng truy cập đồng thời không quá lớn. Tomcat là lựa chọn hàng đầu cho việc phát triển và gỡ lỗi các ứng dụng Java Servlet và JSP. Mặc dù thường được xem là một phần mở rộng của máy chủ Apache HTTP, Tomcat thực tế hoạt động như một tiến trình độc lập khi chạy, cung cấp môi trường riêng biệt để xử lý các yêu cầu ứng dụng web Java.

2.1 Cấu hình Tomcat trong Maven

Để tích hợp Apache Tomcat vào chu trình phát triển Maven, bạn cần định nghĩa các thư viện và plugin cần thiết trong tệp pom.xml.

<dependencies>
        <!-- Thư viện JSTL cho các thẻ tùy chỉnh trong JSP (Jakarta EE) -->
        <dependency>
            <groupId>jakarta.servlet.jsp.jstl</groupId>
            <artifactId>jakarta.servlet.jsp.jstl-api</artifactId>
            <version>2.0.0</version>
        </dependency>
        <dependency>
            <groupId>org.glassfish.web</groupId>
            <artifactId>jakarta.servlet.jsp.jstl</artifactId>
            <version>2.0.0</version>
        </dependency>

        <!-- API Servlet, cần thiết cho ứng dụng web Java (Jakarta EE) -->
        <dependency>
            <groupId>jakarta.servlet</groupId>
            <artifactId>jakarta.servlet-api</artifactId>
            <version>5.0.0</version>
            <scope>provided</scope>
        </dependency>

        <!-- API JSP, cho phép biên dịch và chạy JSP (Jakarta EE) -->
        <dependency>
            <groupId>jakarta.servlet.jsp</groupId>
            <artifactId>jakarta.servlet.jsp-api</artifactId>
            <version>3.0.0</version>
            <scope>provided</scope>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <!-- Plugin Maven cho Tomcat để triển khai và chạy ứng dụng -->
            <plugin>
                <groupId>org.apache.tomcat.maven</groupId>
                <artifactId>tomcat9-maven-plugin</artifactId>
                <version>3.0.0-M11</version>
                <configuration>
                    <port>8090</port>
                    <path>/myJavaApp</path>
                    <uriEncoding>UTF-8</uriEncoding>
                    <server>customTomcat</server>
                </configuration>
            </plugin>
        </plugins>
    </build>

2.2 Khởi động Tomcat

Để khởi động Tomcat thông qua Maven, sử dụng lệnh:

mvn tomcat9:run

3. Điểm khác biệt chính giữa Tomcat và Jetty

Mặc dù cả Tomcat và Jetty đều là các máy chủ servlet mạnh mẽ, chúng có những điểm khác biệt chính phù hợp với các trường hợp sử dụng khác nhau:

  • Tính gọn nhẹ và khả năng nhúng: Jetty thường được coi là nhẹ hơn và có khả năng nhúng tốt hơn, lý tưởng cho việc phát triển các ứng dụng độc lập (standalone) hoặc microservices. Điều này cho phép nó dễ dàng tích hợp vào các ứng dụng để cung cấp chức năng web mà không cần khởi chạy một máy chủ ứng dụng đầy đủ.
  • Khả năng tùy biến và mở rộng: Jetty được thiết kế với kiến trúc mô-đun, dễ dàng tùy chỉnh và mở rộng, khuyến khích việc phát triển và tích hợp các thành phần mới.
  • Phù hợp với môi trường doanh nghiệp: Tomcat, mặt khác, thường được ưa chuộng hơn trong các môi trường doanh nghiệp truyền thống do tính năng phong phú, khả năng quản lý tốt hơn và cộng đồng lớn hơn. Nó cung cấp một giải pháp toàn diện hơn cho việc triển khai các ứng dụng web phức tạp và có lịch sử phát triển lâu dài hơn trong không gian máy chủ ứng dụng doanh nghiệp.

Thẻ: Servlet Tomcat Jetty Maven Web Server

Đăng vào ngày 3 tháng 9 lúc 04:46