Java 中的 Servlet 可以用多種方式描述。作為一種技術(shù),Servlet 用於建立網(wǎng)頁;作為 API,提供介面等。它用於擴(kuò)展在請求-響應(yīng)編程模型上託管應(yīng)用程式的伺服器的功能。 Servlet 提供基於元件和獨(dú)立於平臺的方法來建立基於 Web 的應(yīng)用程序,而沒有任何效能限制。 Java 中的 Servlet 可以透過 Java API 和 JDBC 完全存取企業(yè)資料庫。我們將詳細(xì)了解這些 Servlet 是什麼、為什麼使用它們、它的優(yōu)點(diǎn)和局限性,以及 Servlet 在 Java 中實際如何運(yùn)作。
廣告 該類別中的熱門課程 JAVA SERVLET - 專業(yè)化 | 18 門課程系列 | 6 次模擬測驗開始您的免費(fèi)軟體開發(fā)課程
網(wǎng)頁開發(fā)、程式語言、軟體測試及其他
Servlet 可以用許多其他方式來描述,
- Servlet 是一種用於建立 Web 應(yīng)用程式的技術(shù)
- Servlet 也是一個 API,提供許多介面和類別以及文件
- 這是一個用Java實現(xiàn)的用於建立Servlet的介面
- 它是一個擴(kuò)展伺服器功能並回應(yīng)傳入請求的類別。它可以是任何類型的請求。
- 它也是一個部署在伺服器上的Web元件,用於建立動態(tài)網(wǎng)頁。
為什麼我們需要Java中的Servlet?
隨著科技的不斷發(fā)展,我們需要每天熟悉最新的更新或最新的技術(shù)堆疊。?Servlet 可作為介面、技術(shù)、Web 元件、類別或 API。?借助 servlet,我們可以透過網(wǎng)頁/表單、資料庫以及任何其他資料來源收集使用者資訊並建立網(wǎng)頁。
- Java 中的 Servlet 與使用通用網(wǎng)關(guān)介面 (CGI) 實現(xiàn)的程式類似,但 Servlet 比 CGI 具有更多優(yōu)勢。
- 在效能方面,Servlet 明顯優(yōu)於 CGI。
- 與平臺無關(guān),因為 servlet 是用 Java 寫的。
- 它們在 Web 伺服器空間內(nèi)執(zhí)行。我們不需要建立單獨(dú)的流程來處理客戶請求。
- Java 安全性在保護(hù)伺服器電腦的資源方面實施了一組嚴(yán)格的限制,因此 Servlet 是可信任的。
- Servlet 可以透過套接字、RMI 機(jī)制與資料庫、小程式或其他一些軟體進(jìn)行通訊。
Servlet 在 Java 中如何運(yùn)作?
Java 中的 Servlet 檢查通訊介面、客戶端和伺服器的要求、使用的協(xié)定、程式語言以及涉及的軟體。 Servlet 依照以下步驟執(zhí)行,
第 1 步: 客戶端向 Web 伺服器發(fā)送請求,讀取客戶端發(fā)送的明確數(shù)據(jù),這些數(shù)據(jù)可以是 HTML 表單、小程式或自訂 HTTP 用戶端程式。
第 2 步: Web 伺服器接收請求。
第3步:Web伺服器將請求傳遞給對應(yīng)的servlet,處理請求可能包括與資料庫通訊、呼叫Web服務(wù)或直接回應(yīng)。
第 4 步: Servlet 然後處理請求並以輸出的形式產(chǎn)生回應(yīng)。它可以是任何格式,HTML 或 XML、GIF(如果是圖像)或 Excel。
第 5 步: 然後這些 servlet 會將回應(yīng)傳回伺服器
第 6 步: 然後 Web 伺服器將回應(yīng)傳回客戶端和用戶端,如瀏覽器顯示在 UI 上一樣。
Servlet 架構(gòu)
上面的 servlet 架構(gòu)使用了一些 Java 方法,例如:
- Servlet.init(): 由 Servlet 調(diào)用,表示 Servlet 實例執(zhí)行成功並調(diào)用服務(wù)。然後Servlet呼叫service()方法來處理客戶端的請求。然後使用 destroy() 方法完成服務(wù)後終止
- Servlet.destroy():方法在整個生命週期中只會運(yùn)行一次,這給我們一個訊號,表示Servlet實例已經(jīng)結(jié)束。
用 Java 建立 Servlet 的範(fàn)例
首先,我們需要安裝Java、Eclipse和Tomcat:
1.我們將使用 File-> 建立一個動態(tài) Web 專案。新->動態(tài)網(wǎng)路項目。
2.輸入Project Name並選擇Target Runtime,點(diǎn)選Next,需要勾選「Generate web.xml」然後Finish
3.項目結(jié)構(gòu)如下圖所示。
4.然後,點(diǎn)擊檔案->建立新的 Servlet。
5.點(diǎn)選上面的「完成」?,F(xiàn)在 Eclipse 將根據(jù)前面步驟中完成的輸入或設(shè)定來產(chǎn)生 Servlet 類別。
代碼:
FirstProgram.java
package com.srccode.example; import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; /** * Servlet implementation class FirstProgram */ @WebServlet("/FirstProgram") public class FirstProgram extends HttpServlet { private static final long serialVersionUID = 1L; /** * @see HttpServlet#HttpServlet() */ public FirstProgram() { super(); // TODO Auto-generated constructor stub } /** * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response) */ protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stub response.getWriter().append("Served at: ").append(request.getContextPath()); } /** * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response) */ protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stub doGet(request, response); } }
我們將修改 Servlet 類別的程式碼如下,
套件 com.srccode.example;
import java.io.IOException; import java.io.PrintWriter; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; /** * Servlet implementation class FirstProgram */ @WebServlet("/FirstProgram") public class FirstProgram extends HttpServlet { private static final long <em>serialVersionUID</em> = 1L; /** * @see HttpServlet#HttpServlet() */ public FirstProgram() { super(); // TODO Auto-generated constructor stub } private String mymsg; public void init() throws ServletException { mymsg = "Hi eduCBA Team! We are working on Java Servlet Tutorial! This is the first Servlet Program!"; } /** * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response) */ protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stub response.setContentType("text/html"); PrintWriter printWriter = response.getWriter(); printWriter.println("<h1>" + mymsg + "</h1>"); } /** * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response) */ protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stub doGet(request, response); } }
在 web.xml
<?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_3_1.xsd" id="WebApp_ID" version="3.1"> <display-name>ServletExample</display-name> <welcome-file-list> <welcome-file>index.html</welcome-file> <welcome-file>index.htm</welcome-file> <welcome-file>index.jsp</welcome-file> <welcome-file>default.html</welcome-file> <welcome-file>default.htm</welcome-file> <welcome-file>default.jsp</welcome-file> </welcome-file-list> </web-app>
在index.html
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>BeginnersBook Servlet Demo</title> </head> <body> <a href="welcome">Click to call Servlet</a> </body> </html>
輸出:
右鍵,點(diǎn)擊項目並選擇運(yùn)行方式->在伺服器上運(yùn)行。
現(xiàn)在打開瀏覽器,我們可以看到以下輸出,伺服器將在本地主機(jī)上運(yùn)行:
http://localhost:8080/ServletExample/FirstProgram
Java Servlet 的優(yōu)點(diǎn)
Java中的Servlet有很多優(yōu)點(diǎn)。 Servlet 可以看成是運(yùn)行在伺服器端的小程式:
- Servlet 是持久的:Servlet 保留在記憶體中,直到被 destroy() 方法銷毀,這有助於服務(wù)傳入的請求。它只與資料庫建立一次連接,並且可以處理同一資料庫上的多個請求。減少用於連接到資料庫或任何其他來源的時間和資源
- Servlet 是可移植的:這意味著 Servlet 與所有作業(yè)系統(tǒng)相容,即在一個作業(yè)系統(tǒng)中編寫的程式可以在其他作業(yè)系統(tǒng)上執(zhí)行
- Servlet 獨(dú)立於伺服器:Servlet 與市場上可用的任何 Web 伺服器相容
- Servlet 與協(xié)議無關(guān):Servlet 可以支援任何協(xié)議,如 FTP、Telnet 等。它提供了對 HTTP 協(xié)定的擴(kuò)充支援
- Servlet 是安全的:由於這些 Servlet 是伺服器端程序,僅由 Web 伺服器調(diào)用,因此繼承了 Web 伺服器採取的所有安全措施
- Servlet 是可擴(kuò)展的:Servlet 可以根據(jù)使用者需求擴(kuò)展並變形為物件
- Servlet 速度很快:由於這些 Servlet 被編譯為字節(jié)碼,因此與其他腳本語言相比執(zhí)行速度更快。並且還提供類型檢查和強(qiáng)錯誤。
- Servlet 價格低廉:有許多免費(fèi)的 Web 伺服器可用於任何類型的用途,無論是個人用途還是商業(yè)用途。
至此,我們結(jié)束了「Java Servlet」主題。我們已經(jīng)透過範(fàn)例了解了 Java 中的 Servlet 是什麼以及如何使用它們。我們也看到了它的優(yōu)點(diǎn),並透過Servlet架構(gòu)和使用的Servlet方法一步步了解了Servlet是如何使用的。也看到了為什麼在 Java 中使用 Servlet 以及它相對於 CGI 的優(yōu)點(diǎn)。關(guān)於 Servlet,我們還有很多值得探索的地方,還有多種類型的 Servlet 可供使用,我們將在進(jìn)一步的教程中進(jìn)行更深入的研究。
以上是Java 中的 Servlet的詳細(xì)內(nèi)容。更多資訊請關(guān)注PHP中文網(wǎng)其他相關(guān)文章!

熱AI工具

Undress AI Tool
免費(fèi)脫衣圖片

Undresser.AI Undress
人工智慧驅(qū)動的應(yīng)用程序,用於創(chuàng)建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費(fèi)的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費(fèi)的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強(qiáng)大的PHP整合開發(fā)環(huán)境

Dreamweaver CS6
視覺化網(wǎng)頁開發(fā)工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

Laravel支持使用原生SQL查詢,但應(yīng)優(yōu)先使用參數(shù)綁定以確保安全;1.使用DB::select()執(zhí)行帶參數(shù)綁定的SELECT查詢,防止SQL注入;2.使用DB::update()執(zhí)行UPDATE操作並返回影響行數(shù);3.使用DB::insert()插入數(shù)據(jù);4.使用DB::delete()刪除數(shù)據(jù);5.使用DB::statement()執(zhí)行如CREATE、ALTER等無結(jié)果集的SQL語句;6.推薦在QueryBuilder中使用whereRaw、selectRaw等方法結(jié)合原生表達(dá)式以提升安

使用JUnit5和Mockito能有效隔離依賴進(jìn)行單元測試,1.通過@Mock創(chuàng)建模擬對象,@InjectMocks注入被測實例,@ExtendWith啟用Mockito擴(kuò)展;2.使用when().thenReturn()定義模擬行為,verify()驗證方法調(diào)用次數(shù)與參數(shù);3.可模擬異常場景並驗證錯誤處理;4.推薦構(gòu)造函數(shù)注入、避免過度模擬、保持測試原子性;5.使用assertAll()合併斷言,@Nested組織測試場景,從而提升測試可維護(hù)性和可靠性。

Go泛型從1.18開始支持,用於編寫類型安全的通用代碼。 1.泛型函數(shù)PrintSlice[Tany](s[]T)可打印任意類型切片,如[]int或[]string。 2.通過類型約束Number限制T為int、float等數(shù)字類型,實現(xiàn)Sum[TNumber](slice[]T)T安全求和。 3.泛型結(jié)構(gòu)體typeBox[Tany]struct{ValueT}可封裝任意類型值,配合NewBox[Tany](vT)*Box[T]構(gòu)造函數(shù)使用。 4.為Box[T]添加Set(vT)和Get()T方法,無需

table-layout:fixed會強(qiáng)製表格列寬由第一行單元格寬度決定,避免內(nèi)容影響佈局。 1.設(shè)置table-layout:fixed並指定表格寬度;2.為第一行th/td設(shè)置具體列寬比例;3.配合white-space:nowrap、overflow:hidden和text-overflow:ellipsis控製文本溢出;4.適用於後臺管理、數(shù)據(jù)報表等需穩(wěn)定佈局和高性能渲染的場景,能有效防止佈局抖動並提升渲染效率。

json.loads()用於將JSON字符串解析為Python數(shù)據(jù)結(jié)構(gòu),1.輸入必須是雙引號包裹的字符串且布爾值為true/false;2.支持null→None、對象→dict、數(shù)組→list等自動轉(zhuǎn)換;3.常用於處理API返回的JSON字符串,如response_string經(jīng)json.loads()解析後可直接訪問嵌套數(shù)據(jù),使用時需確保JSON格式正確,否則會拋出異常。

Choosetheappropriateindextypebasedonusecase,suchassinglefield,compound,multikey,text,geospatial,orTTLindexes.2.ApplytheESRrulewhencreatingcompoundindexesbyorderingfieldsasequality,sort,thenrange.3.Designindexestosupportcoveredqueriesbyincludingallque

Maven是Java項目管理和構(gòu)建的標(biāo)準(zhǔn)工具,答案在於它通過pom.xml實現(xiàn)項目結(jié)構(gòu)標(biāo)準(zhǔn)化、依賴管理、構(gòu)建生命週期自動化和插件擴(kuò)展;1.使用pom.xml定義groupId、artifactId、version和dependencies;2.掌握核心命令如mvnclean、compile、test、package、install和deploy;3.利用dependencyManagement和exclusions管理依賴版本與衝突;4.通過多模塊項目結(jié)構(gòu)組織大型應(yīng)用並由父POM統(tǒng)一管理;5.配

Python中函數(shù)傳參是“傳遞對象引用”,即1.對於可變對象(如列表、字典),函數(shù)內(nèi)進(jìn)行原地修改(如append、賦值切片)會直接影響原對象;2.對於不可變對象(如整數(shù)、字符串),函數(shù)內(nèi)無法改變原對象,重新賦值只會創(chuàng)建新對象;3.參數(shù)傳遞的是引用的副本,若在函數(shù)內(nèi)重新綁定變量(如lst=[...]),則斷開與原對象的連接,不影響外部變量。因此,修改可變對象會影響原數(shù)據(jù),而不可變對象和重新賦值則不會,這解釋了為何列表在函數(shù)內(nèi)修改後外部可見,而整數(shù)變化僅限局部。
