一、基礎知識
1、Servlet簡介
Servlet是JavaWeb應用中最核心的組件,它是運行在Web服務器的Java應用程序,它是作爲來自 Web 瀏覽器或其他 HTTP 客戶端的請求和 HTTP 服務器上的數據庫或應用程序之間的中間層。
Servlet的運行需要Servlet容器支持,Servlet容器通過調用Servlet對象提供的標準API接口對請求進行處理。
狹義的Servlet是指Java語言實現的一個接口,廣義的Servlet指的是任何實現了Servlet接口的類,一般人們理解爲後者。
Servlet的主要功能如下:
- 讀取客戶端(瀏覽器)發送的顯式的數據。這包括網頁上的 HTML 表單。
- 讀取客戶端(瀏覽器)發送的隱式的 HTTP 請求數據。這包括 cookies、媒體類型和瀏覽器能理解的壓縮格式等等。
- 處理數據並生成結果。
- 發送顯式的數據(即文檔)到客戶端(瀏覽器)。
- 發送隱式的 HTTP 響應到客戶端(瀏覽器)。
特點:
- 運行在支持java的應用服務器上。
- Servlet的實現遵循了服務器能夠識別的規則,即服務器會根據請求對應的servlet進行請求處理。
- 簡單方便,可移植性強。
2、Servlet結構體系
(1)Servlet接口
在Servlet開發中,任何一個Servlet對象都直接或間接實現javax.servlet.Servlet接口,該接口包括5個方法:
(2)ServletConfig接口
ServletConfig接口位於javax.servlet包中,它封裝了Servlet的配置信息,在Servlet初始化期間被傳遞。該對象定義了4個方法:
(3)GenericServlet類
該類是一個抽象類,創建Servlet對象時,可以簡化程序代碼。
(4)HttpServlet類
HttpServlet類是一個抽象方法,可以很方便的對HTTP請求進行處理和響應。
3、Servlet生命週期
- 加載Servlet類,創建Servlet實例。
- Servlet 通過調用 init () 方法進行初始化:可在web.xml文件中爲servlet指定初始化參數。
- Servlet 調用 service() 方法來處理客戶端的請求:對於收到的每個Http請求,容器會調用service()方法處理請求。對於HttpServlet類,通常調用doGet()、doPost()等方法。
- Servlet 通過調用 destroy() 方法終止。
- 最後,Servlet 是由 JVM 的垃圾回收器進行垃圾回。
(1)init()方法
init 方法被設計成只調用一次。它在第一次創建 Servlet 時被調用,在後續每次用戶請求時不再調用。Servlet 創建於用戶第一次調用對應於該 Servlet 的 URL 時,但是您也可以指定 Servlet 在服務器第一次啓動時被加載。
(2)service()方法
service() 方法是執行實際任務的主要方法。Servlet 容器(即 Web 服務器)調用 service() 方法來處理來自客戶端(瀏覽器)的請求,並把格式化的響應寫回給客戶端。每次服務器接收到一個 Servlet 請求時,服務器會產生一個新的線程並調用服務。service() 方法檢查 HTTP 請求類型(GET、POST、PUT、DELETE 等),並在適當的時候調用 doGet、doPost、doPut,doDelete 等方法。
(3)destroy()方法
destroy() 方法只會被調用一次,在 Servlet 生命週期結束時被調用。該方法可以關閉數據庫連接、停止後臺線程、把 Cookie 列表或點擊計數器寫入到磁盤,並執行其他類似的清理活動。
二、Servlet基本應用
1、Servlet創建主要有兩種方式
- 第一種爲創建一個普通的Java類,使這個類繼承HttpServlet類,再通過手動配置Web.xml文件註冊Servlet對象。
- 第二種方法直接通過IDE集成開發工具進行創建。
2、Servlet配置
通過Servlet配置,告訴web容器哪個請求調用哪一個Servlet對象處理,對Servlet起到一個註冊作用。
Servlet配置包含在web.xml文件中,主要通過以下兩步:
(1)聲明Servlet對象
通過<servlet>標籤聲明一個Servlet對象,該標籤包括兩個子元素,<servlet-name>和<servlet-class>。
<servlet>
<servlet-name>添加Servlet的名稱</servlet-name>
<servlet-class>添加Servlet的全類名</servlet-class>
</servlet>
(2)映射Servlet
<servlet-mapping>
<servlet-name>添加Servlet的名稱</servlet-name>
<url-pattern>映射具體訪問URL</url-pattern>
</servlet-mapping>
3、創建一個簡單的Servlet web 項目
(1)打開eclipse創建Dynamic Web Project項目
File-New-Dynamic Web Project
填寫項目名稱
點擊Next-Next-勾選Generate web.xml...-點擊Finish
可能出現以下問題:
將本機的網絡連接禁用,該工程此時即可創建完成,接着再啓用網絡連接。
(2)Java Resources src下添加java包
New-Package
填寫包名
(3)在新建的包下創建Java類
New-Class
在對話框中填寫類名,並繼承HttpServlet類
最後點擊Finish。
(4)編輯Java類
覆寫service(注意使用"Alt+/")
添加以下內容:
通過實行javax.servlet.http.HttpServlet抽象類來處理Http請求。
package com.herry.bean;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class MyServlet extends HttpServlet {
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
resp.getWriter().write("this is my servlet test(test)");
System.out.println("this is my servlet test");
}
}
(5)在web.xml中創建serlvet鏈接器。
web.xml在WEB-INF目錄下,雙擊打開web.xml,進入source模式。
配置servlet如下:
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd" id="WebApp_ID" version="4.0">
<!-- 配置servlet -->
<!-- 配置servlel類路徑 -->
<servlet>
<servlet-name>myServlet</servlet-name> <!-- servlet名字自定義 -->
<servlet-class>com.herry.bean.MyServlet</servlet-class> <!-- servlet類的路徑-->
</servlet>
<!-- 配置servlel訪問方式 -->
<servlet-mapping>
<servlet-name>myServlet</servlet-name>
<url-pattern>/myServlet</url-pattern>
</servlet-mapping>
</web-app>
(6)保存(Ctrl+S)後,查看java文件是否編譯成class文件
查看class文件位置WEB-INF文件下:
如果沒有要對eclipse進行如下設置。
1)查看eclipse 下Project-Bulid Automatically是否勾選,沒有則勾選
勾選之後,eclipse編輯下沒保存一下自動編譯
2)如果還是沒有class文件,進行路徑設置
Project-Clean 清除已經編譯的結果
項目右鍵-Properties-Java Build Path-Source
將Default output folder設置爲MyServlet/WebContent/WEB-INF/classes,
之後發現eclipse工作空間下有了class文件
以上參考連接:https://blog.csdn.net/qq_34801169/article/details/80466092
(7)將創建好的web工程的WebContent複製到Tomcat的Webapps
1)進入MyServlet的工作路徑
選擇MyServlet-File-Properties
2)將MyServlet項目的WebContent的所有內容複製到Tomcat的下webapps
選擇以下三個文件:
在tomcat的安裝路徑下D:\apache-tomcat-9.0.31\webapps新建projecct文件夾,並將以上三個文件複製到該文件夾下
(9)啓動tomcat
點擊startup.bat
(10)測試結果
瀏覽器輸入http://localhost:8080/project/myServlet
參考:https://www.bilibili.com/video/BV1bb411b7Cq?p=6