Java 中的 Servlet 可以用多種方式描述。作為一種技術(shù),Servlet 用于創(chuàng)建網(wǎng)頁;作為 API,提供接口等。它用于擴(kuò)展在請求-響應(yīng)編程模型上托管應(yīng)用程序的服務(wù)器的功能。 Servlet 提供基于組件和獨(dú)立于平臺的方法來構(gòu)建基于 Web 的應(yīng)用程序,而沒有任何性能限制。 Java 中的 Servlet 可以通過 Java API 和 JDBC 完全訪問企業(yè)數(shù)據(jù)庫。我們將詳細(xì)了解這些 Servlet 是什么、為什么使用它們、它的優(yōu)點(diǎn)和局限性,以及 Servlet 在 Java 中實(shí)際如何工作。
廣告 該類別中的熱門課程 JAVA SERVLET - 專業(yè)化 | 18 門課程系列 | 6 次模擬測試開始您的免費(fèi)軟件開發(fā)課程
網(wǎng)絡(luò)開發(fā)、編程語言、軟件測試及其他
Servlet 可以用許多其他方式來描述,
- Servlet 是一種用于創(chuàng)建 Web 應(yīng)用程序的技術(shù)
- Servlet 也是一個(gè) API,提供許多接口和類以及文檔
- 這是一個(gè)用Java實(shí)現(xiàn)的用于創(chuàng)建Servlet的接口
- 它是一個(gè)擴(kuò)展服務(wù)器功能并響應(yīng)傳入請求的類。它可以是任何類型的請求。
- 它也是一個(gè)部署在服務(wù)器上的Web組件,用于創(chuàng)建動(dòng)態(tài)網(wǎng)頁。
Java 中為什么需要 Servlet?
隨著技術(shù)的不斷發(fā)展,我們需要每天熟悉最新的更新或最新的技術(shù)堆棧。?Servlet 充當(dāng)接口、技術(shù)、Web 組件、類或 API。?借助 servlet,我們可以通過網(wǎng)頁/表單、數(shù)據(jù)庫以及任何其他數(shù)據(jù)源收集用戶信息并創(chuàng)建網(wǎng)頁。
- Java 中的 Servlet 與使用通用網(wǎng)關(guān)接口 (CGI) 實(shí)現(xiàn)的程序類似,但 Servlet 比 CGI 具有更多優(yōu)勢。
- 在性能方面,Servlet 明顯優(yōu)于 CGI。
- 與平臺無關(guān),因?yàn)?servlet 是用 Java 編寫的。
- 它們在 Web 服務(wù)器空間內(nèi)執(zhí)行。我們不需要?jiǎng)?chuàng)建單獨(dú)的流程來處理客戶請求。
- Java 安全性在保護(hù)服務(wù)器計(jì)算機(jī)的資源方面實(shí)施了一組嚴(yán)格的限制,因此 Servlet 是可信的。
- Servlet 可以通過套接字、RMI 機(jī)制與數(shù)據(jù)庫、小程序或其他一些軟件進(jìn)行通信。
Servlet 在 Java 中如何工作?
Java 中的 Servlet 檢查通信接口、客戶端和服務(wù)器的要求、使用的協(xié)議、編程語言以及涉及的軟件。 Servlet 按以下步驟執(zhí)行,
第 1 步: 客戶端向 Web 服務(wù)器發(fā)送請求,讀取客戶端發(fā)送的顯式數(shù)據(jù),這些數(shù)據(jù)可以是 HTML 表單、小程序或自定義 HTTP 客戶端程序。
第 2 步: Web 服務(wù)器接收請求。
第3步:Web服務(wù)器將請求傳遞給相應(yīng)的servlet,處理請求可能包括與數(shù)據(jù)庫通信、調(diào)用Web服務(wù)或直接響應(yīng)。
第 4 步: Servlet 然后處理請求并以輸出的形式生成響應(yīng)。它可以是任何格式,HTML 或 XML、GIF(如果是圖像)或 Excel。
第 5 步: 然后這些 servlet 將響應(yīng)發(fā)送回服務(wù)器
第 6 步: 然后 Web 服務(wù)器將響應(yīng)發(fā)送回客戶端和客戶端,如瀏覽器顯示在 UI 上一樣。
Servlet 架構(gòu)
上面的 servlet 架構(gòu)使用了一些 Java 方法,例如:
- Servlet.init(): 由 Servlet 調(diào)用,表示 Servlet 實(shí)例執(zhí)行成功并調(diào)用服務(wù)。然后Servlet調(diào)用service()方法來處理客戶端的請求。然后使用 destroy() 方法完成服務(wù)后終止
- Servlet.destroy():方法在整個(gè)生命周期中只會(huì)運(yùn)行一次,這給我們一個(gè)信號,表明Servlet實(shí)例已經(jīng)結(jié)束。
用 Java 創(chuàng)建 Servlet 的示例
首先,我們需要安裝Java、Eclipse和Tomcat:
1.我們將使用 File-> 創(chuàng)建一個(gè)動(dòng)態(tài) Web 項(xiàng)目。新->動(dòng)態(tài)網(wǎng)絡(luò)項(xiàng)目。
2.輸入Project Name并選擇Target Runtime,點(diǎn)擊Next,需要勾選“Generate web.xml”然后Finish
3.項(xiàng)目結(jié)構(gòu)如下所示。
4.然后,點(diǎn)擊文件->創(chuàng)建新的 Servlet。
5.單擊上面的“完成”。現(xiàn)在 Eclipse 將根據(jù)前面步驟中完成的輸入或配置生成 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)擊項(xiàng)目并選擇運(yùn)行方式->在服務(wù)器上運(yùn)行。
現(xiàn)在打開瀏覽器,我們可以看到以下輸出,服務(wù)器將在本地主機(jī)上運(yùn)行:
http://localhost:8080/ServletExample/FirstProgram
Java Servlet 的優(yōu)點(diǎn)
Java中的Servlet有很多優(yōu)點(diǎn)。 Servlet 可以看作是運(yùn)行在服務(wù)器端的小程序:
- Servlet 是持久的:Servlet 保留在內(nèi)存中,直到使用 destroy() 方法銷毀,這有助于服務(wù)傳入的請求。它只與數(shù)據(jù)庫建立一次連接,并且可以處理同一數(shù)據(jù)庫上的多個(gè)請求。減少用于連接到數(shù)據(jù)庫或任何其他源的時(shí)間和資源
- Servlet 是可移植的:這意味著 Servlet 與所有操作系統(tǒng)兼容,即在一個(gè)操作系統(tǒng)中編寫的程序可以在其他操作系統(tǒng)上執(zhí)行
- Servlet 獨(dú)立于服務(wù)器:Servlet 與市場上可用的任何 Web 服務(wù)器兼容
- Servlet 與協(xié)議無關(guān):Servlet 可以支持任何協(xié)議,如 FTP、Telnet 等。它提供了對 HTTP 協(xié)議的擴(kuò)展支持
- Servlet 是安全的:由于這些 Servlet 是服務(wù)器端程序,僅由 Web 服務(wù)器調(diào)用,因此繼承了 Web 服務(wù)器采取的所有安全措施
- Servlet 是可擴(kuò)展的:Servlet 可以根據(jù)用戶需求擴(kuò)展并變形為對象
- Servlet 速度很快:由于這些 Servlet 被編譯為字節(jié)碼,因此與其他腳本語言相比執(zhí)行速度更快。并且還提供類型檢查和強(qiáng)錯(cuò)誤。
- Servlet 價(jià)格低廉:有許多免費(fèi)的 Web 服務(wù)器可用于任何類型的用途,無論是個(gè)人用途還是商業(yè)用途。
至此,我們結(jié)束了“Java Servlet”主題。我們已經(jīng)通過示例了解了 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ū)動(dòng)的應(yīng)用程序,用于創(chuàng)建逼真的裸體照片

AI Clothes Remover
用于從照片中去除衣服的在線人工智能工具。

Clothoff.io
AI脫衣機(jī)

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注入被測實(shí)例,@ExtendWith啟用Mockito擴(kuò)展;2.使用when().thenReturn()定義模擬行為,verify()驗(yàn)證方法調(diào)用次數(shù)與參數(shù);3.可模擬異常場景并驗(yàn)證錯(cuò)誤處理;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ù)字類型,實(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會(huì)強(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ù)報(bào)表等需穩(wěn)定布局和高性能渲染的場景,能有效防止布局抖動(dòng)并提升渲染效率。

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

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

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

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