Servlet-HelloWorld

LZC發表於2020-02-12

Servlet 是什麼

Java Servlet 是執行在 Web 伺服器或應用伺服器上的程式,它是作為來自 Web 瀏覽器或其他 HTTP 客戶端的請求和 HTTP 伺服器上的資料庫或應用程式之間的中間層。

Web伺服器

早期的Web應用主要用於瀏覽新聞等靜態頁面,HTTP伺服器(比如Apache、Nginx)向瀏覽器返回靜態HTML,瀏覽器負責解析HTML,將結果呈現給使用者。

隨著網際網路的發展,我們已經不滿足於僅僅瀏覽靜態頁面,還希望透過一些互動操作,來獲取動態結果,因此也就需要一些擴充套件機制能夠讓HTTP伺服器呼叫服務端程式。

於是Sun公司推出了Servlet技術。你可以把Servlet簡單理解為執行在服務端的Java小程式,但是Servlet沒有main方法,不能獨立執行,因此必須把它部署到Servlet容器中,由容器來例項化並呼叫Servlet。

而Tomcat和Jetty就是一個Servlet容器。為了方便使用,它們也具有HTTP伺服器的功能,因此Tomcat或者Jetty就是一個“HTTP伺服器 + Servlet容器”,我們也叫它們Web容器。

其他應用伺服器比如JBoss和WebLogic,它們不僅僅有Servlet容器的功能,也包含EJB容器,是完整的Java EE應用伺服器。從這個角度看,Tomcat和Jetty算是一個輕量級的應用伺服器。

在微服務架構日漸流行的今天,開發人員更喜歡穩定的、輕量級的應用伺服器,並且應用程式用內嵌的方式來執行Servlet容器也逐漸流行起來。之所以選擇輕量級,是因為在微服務架構下,我們把一個大而全的單體應用,拆分成一個個功能單一的微服務,在這個過程中,服務的數量必然要增加,但為了減少資源的消耗,並且降低部署的成本,我們希望執行服務的Web容器也是輕量級的,Web容器本身應該消耗較少的記憶體和CPU資源,並且由應用本身來啟動一個嵌入式的Web容器,而不是透過Web容器來部署和啟動應用,這樣可以降低應用部署的複雜度。

因此輕量級的Tomcat和Jetty就是一個很好的選擇,並且Tomcat它本身也是Spring Boot預設的嵌入式Servlet容器。最新版本Tomcat和Jetty都支援Servlet 4.0規範。

環境配置

  1. 新建一個maven工程
    在這裡插入圖片描述
  2. 配置web目錄
    在這裡插入圖片描述

在這裡插入圖片描述
在這裡插入圖片描述
在這裡插入圖片描述

在這裡插入圖片描述

在這裡插入圖片描述
在這裡插入圖片描述
最後點選“OK”,會生成一個web目錄,web/WEB-INF/web.xml

  1. 配置Tomcat
    在這裡插入圖片描述
    在這裡插入圖片描述

在這裡插入圖片描述

在這裡插入圖片描述

在這裡插入圖片描述
然後點選”OK”

編寫例項

  1. 首先在pom.xml中引入依賴
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.lzc.servlet</groupId>
    <artifactId>servlet-demo</artifactId>
    <version>1.0-SNAPSHOT</version>
    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <configuration>
                    <source>8</source>
                    <target>8</target>
                </configuration>
            </plugin>
        </plugins>
    </build>
    <dependencies>
        <!-- https://mvnrepository.com/artifact/javax.servlet/javax.servlet-api -->
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <version>3.1.0</version>
        </dependency>
    </dependencies>
</project>
  1. 新建一個Servlet
package com.lzc.servlet;

import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;

/**
 * Created by lzc
 * 2020/2/11 22:36
 */
public class ServletHelloWorld extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        // 設定響應內容型別
        resp.setContentType("text/html");
        // 實際的邏輯是在這裡
        PrintWriter out = resp.getWriter();
        out.println("<h1>ServletHelloWorld</h1>");
    }

    @Override
    public void destroy() {
        System.out.println("ServletHelloWorld destroy");
    }

    @Override
    public void init(ServletConfig config) throws ServletException {
        System.out.println("ServletHelloWorld init");
    }
}
  1. 配置ServletHelloWorld 的對映
    在/web/WEB-INF/web.xml中配置如下內容
<?xml version="1.0" encoding="UTF-8"?>
<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_4_0.xsd"
         version="4.0">
    <servlet>
        <!--Servlet類設定一個名字-->
        <servlet-name>ServletHelloWorld</servlet-name>
        <!--指定Servlet-->
        <servlet-class>com.lzc.servlet.ServletHelloWorld</servlet-class>
    </servlet>
    <servlet-mapping>
        <!--為指定的Servlet設定URL-->
        <servlet-name>ServletHelloWorld</servlet-name>
        <url-pattern>/HelloWorld</url-pattern>
    </servlet-mapping>
</web-app>
  1. 啟動專案
    在這裡插入圖片描述
    啟動成功後在瀏覽器輸入:http://localhost:8080/HelloWorld
本作品採用《CC 協議》,轉載必須註明作者和本文連結