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規範。
環境配置
- 新建一個maven工程
- 配置web目錄
最後點選“OK”,會生成一個web目錄,web/WEB-INF/web.xml
- 配置Tomcat
然後點選”OK”
編寫例項
- 首先在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>
- 新建一個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");
}
}
- 配置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>
- 啟動專案
啟動成功後在瀏覽器輸入:http://localhost:8080/HelloWorld
本作品採用《CC 協議》,轉載必須註明作者和本文連結