Java web后端2 Servlet Maven HttpServlet ServletConfig ServletContext HTTP協議

創建項目

新建項目

Java Enterprise
JDK1.8
Web Application
Tomcat
JAVA
在這里插入圖片描述
默認
在這里插入圖片描述
過程需要聯網

Maven的配置

IDEA內置Maven
在這里插入圖片描述
修改本地倉庫位置,因為以后會越來越大
替換配置文件:
阿里云鏡像下載
在這里插入圖片描述

Servlet基礎

在這里插入圖片描述

1.動態Web資源開發

2.Servlet是使用Java語言編寫的運行在服務器端的程序,Servlet由Servlet容器提供,所謂的Servlet容器是指提供了Servlet 功能的服務器(本書中指Tomcat),Servlet容器將Servlet動態的加載到服務器上。

3.Servlet是指任何實現了這個Servlet接口的類,Servlet主要用于處理客戶端傳來的HTTP請求,并返回一個響應,它能夠處理的請求有doGet()和doPost()等方法。

請求靜態資源(圖片,文檔等):讀出來后直接返回響應

請求Servlet:
Servlet的請求首先會被HTTP服務器接收,HTTP服務器只負責靜態HTML頁面的解析,對于Servlet的請求轉交給Servlet容器,Servlet容器會根據web.xml文件中的映射關系,調用相應的Servlet,Servlet將處理的結果返回給Servlet容器,并通過HTTP服務器將響應傳輸給客戶端。

Servlet容器:一段內存空間
在這里插入圖片描述

Servlet技術特點

Servlet技術具有如下特點:
1.方便:Servlet提供了大量的實用工具例程,如處理很難完成的HTML表單數據、讀取和設置HTTP頭,以及處理Cookie和跟蹤會話等。
2.跨平臺:Servlet用Java類編寫,可以在不同操作系統平臺和不同應用服務器平臺下運行。
3.靈活性和可擴展性:采用Servlet開發的Web應用程序,由于Java類的繼承性及構造函數等特點,使得應用靈活,可隨意擴展。
4.除了上述幾點外,Servlet還具有功能強大、能夠在各個程序之間共享數據、安全性強等特點。

抽象類與接口

抽象類與接口:抽象類只能單繼承,接口可以多繼承。

相同點

(1)都不能被實例化
(2)接口的實現類或抽象類的子類都只有實現了接口或抽象類中的方法后才能實例化。

不同點

(1)接口只有定義,不能有方法的實現,java 1.8中可以定義default方法體,而抽象類可以有定義與實現,方法可在抽象類中實現。

(2)實現接口的關鍵字為implements,繼承抽象類的關鍵字為extends。一個類可以實現多個接口,但一個類只能繼承一個抽象類。所以,使用接口可以間接地實現多重繼承。

(3)接口強調特定功能的實現,而抽象類強調所屬關系。

(4)接口成員變量默認為public static final,必須賦初值,不能被修改;其所有的成員方法都是public、abstract的。抽象類中成員變量默認default,可在子類中被重新定義,也可被重新賦值;抽象方法被abstract修飾,不能被private、static、synchronized和native等修飾,必須以分號結尾,不帶花括號。

Servlet抽象方法

SUN公司提供了一系列接口和類,其中最重要的接口是javax.servlet.Servlet。在Servlet接口中定義了5個抽象方法

1.servlet生命周期:由servlet容器自動調用,所以返回值為void
init(),service(),destory()

2.servletCofig():一個servlet類對應一個servlet實例,有一個servletCofig(),所以每個servletCofig()都不同

3.void service():servletRequest請求對象,serveltResponse()請求響應
在這里插入圖片描述
其中init()、service()和destroy()這三個方法可以表現Servlet的生命周期,它們會在某個特定的時刻被調用。另外,getServletInfo()方法用于返回Servlet的相關信息。getServletConfig()方法用于返回ServletConfig對象,該對象包含Servlet的初始化信息。需要注意的是,表中提及的Servlet容器指的是Web服務器。

service()被具體化為其他不同需要的調用方法,如GenericServlet(),HttpServlet()

servlet接口實現類

針對Servlet的接口,SUN公司提供了兩個默認的接口實現類:GenericServlet和HttpServlet。
GenericServlet是一個抽象類,該類為Servlet接口提供了部分實現,它并沒有實現HTTP請求處理。

HttpServlet是GenericServlet的子類,它繼承了GenericServlet的所有方法,并且為HTTP請求中的POST、GET等類型【總共8種,常用兩種】提供了具體的操作方法。【編程直接使用!! !】

HttpServlet的常用方法及其說明如下表所示:
在這里插入圖片描述
HttpServlet示例:
在這里插入圖片描述

IDEA中創建Servlet

1.新建servlet:
new-servlet
在這里插入圖片描述
2.
虛擬地址映射,java servlet–》URL
1)基于注解的方式在這里插入圖片描述

2)使用webapp-WEB-INF-web.xml中配置,[xml文件方式]
在這里插入圖片描述
在這里插入圖片描述

注意:使用新建servlet的方式,會在web.xml中創建servlet
在這里插入圖片描述

3.寫好之后,啟動Tomcat
http://localhost:端口號/當前工程根路徑/

http://localhost:8082/WebServletProject_war_exploded/
在這里插入圖片描述
要訪問的具體servlet:
http://localhost:8082/WebServletProject_war_exploded/servlet_1

http://localhost:端口號/當前工程根路徑/value的值
在這里插入圖片描述
修改樣式后要重啟Tomcat

報錯:servlet不能映射為一個url模式

Caused by: java.lang.IllegalArgumentException: 名為 [servlet_2]和 [Servlet_1] 的servlet不能映射為一個url模式(url-pattern) [/servle]

注意:注解配置的value和web.xml中的配置

啟動程序時自動加載Servlet程序

適用于數據庫servlet加載
在這里插入圖片描述
web.xml代碼:
在這里插入圖片描述

servlet請求的分發處理-get()和post()

get_post.html:

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title>
</head>
<body>
<!--get方法-->
<form action="http://localhost:8082/WebServletProject_war_exploded/servlet_2" method="get"><input type="submit">
</form>
<!--post方法-->
<form action="http://localhost:8082/WebServletProject_war_exploded/servlet_2" method="post"><input type="submit">
</form>
</body>
</html>

Servlet_2.java:

    @Overridepublic void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {System.out.println("3.訪問");//類型轉換,使用ServletRequest 子類 HttpServletRequest的getMethod()方法HttpServletRequest httpServletRequest = (HttpServletRequest) servletRequest;//獲取請求的方式:GET POSTString method = httpServletRequest.getMethod();//打印System.out.println(method);if (method.equals("GET")) {System.out.println("get方式");} else if (method.equals("POST")) {System.out.println("post方式");}}

使用:
在這里插入圖片描述

通過繼承HttpServlet實現Servlet程序

在這里插入圖片描述

案例:

package nsu.edu.cn.WebServletProject;import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.annotation.*;
import java.io.IOException;// value = "/servlet_1"[類名,首字母小寫]--URL路徑
// name不重要,可以省略value【默認】,如:@WebServlet("/servlet_1")
@WebServlet(name = "Servlet_1", value = "/servlet_1")
//響應實體內容-展示在客戶端,所有的響應使用HttpServletResponse response
//獲取用戶請求--HttpServletRequest request
public class Servlet_1 extends HttpServlet {//用戶敲回車--是get方式@Overrideprotected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {//輸出一個字符串//response.getWriter().write("hello world!");// html5標簽response.getWriter().write("<h2>hello world!!!!!!!</h2>");}@Overrideprotected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {//調用dogGet,在post時也輸出字符串doGet(request, response);}
}
//虛擬地址映射,java servlet--》URL
//1.基于注解的方式
//2.使用webapp-WEB-INF-web.xml中配置

Servlet常見錯誤

在這里插入圖片描述

在這里插入圖片描述

Servlet-url定位servlet程序訪問

在這里插入圖片描述

servlet生命周期

將Servlet的生命周期分為三個階段,分別是初始化階段、運行階段和銷毀階段。

第一次訪問,才會創建實例和初始化【3,4】
如果不是第一次訪問,則沒有3,4步驟
在這里插入圖片描述
ServletConfig使用1:

public class Servlet_2 implements Servlet {public Servlet_2() {System.out.println("1.構造器");}@Overridepublic void init(ServletConfig servletConfig) throws ServletException {System.out.println("2.初始化");}@Overridepublic void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {System.out.println("3.訪問");}@Overridepublic void destroy() {System.out.println("4.銷毀");}

在Tomcat運行時,可以把工程移除;但服務器沒關閉,工程一直在容器中

在這里插入圖片描述

1.初始化階段
當客戶端向Servlet容器發出HTTP請求要求訪問Servlet時,Servlet容器首先會解析請求,檢查內存中是否已經有了該Servlet對象,如果有直接使用該Servlet對象,如果沒有就創建Servlet實例對象,然后通過調用init()方法實現Servlet的初始化工作。需要注意的是,在Servlet的整個生命周期內,它的init()方法只被調用一次。

2.運行階段
這是Servlet生命周期中最重要的階段,在這個階段,Servlet容器會為這個請求創建代表HTTP請求的ServletRequest對象和代表HTTP響應的ServletResponse對象,然后將它們作為參數傳遞給Servlet的service()方法。service()方法從ServletRequest對象中獲得客戶請求信息并處理該請求,通過ServletResponse對象生成響應結果。在Servlet的整個生命周期內,對于Servlet的每一次訪問請求,Servlet容器都會調用一次Servlet的service()方法,并且創建新的ServletRequest和ServletResponse對象,也就是說,service()方法在Servlet的整個生命周期中會被調用多次。

3.銷毀階段
當服務器關閉或web應用被移除出容器時,Servlet隨著web應用的銷毀而銷毀。在銷毀Servlet之前,Servlet容器會調用Servlet的destroy()方法,以便讓Servlet對象釋放它所占用的資源。在Servlet的整個生命周期中,destroy()方法也只被調用一次。需要注意的是,Servlet對象一旦創建就會駐留在內存中等待客戶端的訪問,直到服務器關閉,或web應用被移除出容器時Servlet對象才會銷毀。

Servlet類的繼承體系

在這里插入圖片描述

ServletConfig類的使用

在這里插入圖片描述
在Servlet運行期間,經常需要一些輔助信息,例如,文件使用的編碼、使用Servlet程序的共享等,這些信息可以在web.xml文件中使用一個或多個<init-param>元素進行配置。

當Tomcat初始化一個Servlet時,會將該Servlet的配置信息封裝到一個ServletConfig對象中,通過調用init(ServletConfig config)方法將ServletConfig對象傳遞給Servlet。

ServletConfig類的方法:
在這里插入圖片描述
web.xml代碼:
在這里插入圖片描述

java代碼:

  @Overridepublic void init(ServletConfig servletConfig) throws ServletException {System.out.println("2.初始化");//1.獲取servlet程序的別名servlet-name的值: <servlet-name>servlet_1</servlet-name>System.out.println("別名:"+servletConfig.getServletName());
//2.獲取初始化參數init-param <init-param>中的參數名和參數值System.out.println("參數:"+servletConfig.getInitParameter("username"));System.out.println("參數:"+servletConfig.getInitParameter("userport"));System.out.println("參數:"+servletConfig.getInitParameterNames());//3.獲取servletContext對象System.out.println("對象:"+servletConfig.getServletContext());}

ServletConfig使用2:
在這里插入圖片描述

重寫了init()方法,一定要調用super.init(config),調用父類的init()方法
在這里插入圖片描述

ServletContext類的使用

介紹:
當Servlet容器啟動時,會為每個Web應用創建一個唯一的ServletContext對象代表當前Web應用,該對象不僅封裝了當前Web應用的所有信息,而且實現了多個Servlet之間數據的共享。
操作范圍:整個web工程
在這里插入圖片描述

作用:
存取數據:先存入,否則為null;
在這里插入圖片描述
1.獲取Web應用程序的初始化參數

在web.xml文件中,不僅可以配置Servlet的初始化信息,還可以配置整個Web應用的初始化信息。

<context-param>元素位于根元素中,它的子元素<param-name>和<param-value>分別用來指定參數的名字和參數值。

要想獲取這些參數信息,可以使用ServletContext接口,該接口中定義的getInitParameterNames()getInitParameter(String name)方法分別用來獲取參數名和參數值。

2.實現多個Servlet對象共享數據

由于一個Web應用中的所有Servlet共享同一個ServletContext對象,因此ServletContext對象的域屬性可以被該Web應用中的所有Servlet訪問。

在ServletContext接口中定義了分別用于增加、刪除、設置ServletContext域屬性的四個方法
在這里插入圖片描述
3.讀取Web應用下的資源文件

在實際開發中,有時候可能會需要讀取Web應用中的一些資源文件,比如配置文件,圖片等。

為此,在ServletContext接口中定義了一些讀取Web資源的方法,這些方法是依靠Servlet容器來實現的。

Servlet容器根據資源文件相對于Web應用的路徑,返回關聯資源文件的IO流、資源文件在文件系統的絕對路徑等。
在這里插入圖片描述

示例:
web.xml:
在這里插入圖片描述

<!--SerletContext的上下文參數,屬于整個工程,可以配置多組--><context-param><param-name>name</param-name><param-value>dq</param-value></context-param><context-param><param-name>age</param-name><param-value>20</param-value></context-param><!--不同的url映射在同一個xml上-->

Servlet_3.java

public class Servlet_3 extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {//1.獲取web.xml中配置的上下文參數//獲取上下文對象//寫法2: getServletConfig().getServletContext();ServletContext servletContext = getServletContext();//獲取上下文參數String name = servletContext.getInitParameter("name");String age = servletContext.getInitParameter("age");System.out.println("context:name=" + name + " age=" + age);//2.獲取當前的工程名路徑:/工程路徑System.out.println("當前工程路徑:"+servletContext.getContextPath());//3.獲取工程部署后在服務器硬盤上的絕對路徑/*/被服務器解析地址為:http://ip:port/工程名/映射到IDEA代碼的web目錄* */System.out.println("工程部署的路徑:"+servletContext.getRealPath("/"));System.out.println("工程下css目錄的絕對路徑:"+servletContext.getRealPath("/css"));System.out.println("工程下jsp1目錄的絕對路徑:"+servletContext.getRealPath("/jsp/jsp1.js"));//        context:name=dq age=20
//        當前工程路徑:/WebServletProject_war_exploded
//        工程部署的路徑:D:\CodeProject\JavaWeb_DQ\WebServletProject\target\WebServletProject-1.0-SNAPSHOT\
//        工程下css目錄的絕對路徑:D:\CodeProject\JavaWeb_DQ\WebServletProject\target\WebServletProject-1.0-SNAPSHOT\css
//        工程下jsp1目錄的絕對路徑:D:\CodeProject\JavaWeb_DQ\WebServletProject\target\WebServletProject-1.0-SNAPSHOT\jsp\jsp1.js//4.像Map一樣存取數據servletContext.setAttribute("key1","v1");servletContext.setAttribute("key2","u");//唯一的上下文對象System.out.println(servletContext);System.out.println("v1="+servletContext.getAttribute("key1"));System.out.println("v2="+servletContext.getAttribute("key2"));}@Overrideprotected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {}
}

Servlet_4.java

public class Servlet_4 extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {//所有工程類都可以獲取Context的存取數據ServletContext context=getServletContext();//唯一的上下文對象System.out.println(context);System.out.println("v1="+context.getAttribute("key1"));System.out.println("v2="+context.getAttribute("key2"));}@Overrideprotected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {}
}

ServletContext讀取配置文件類中信息properties

新建my.properties
在這里插入圖片描述

在這里插入圖片描述
寫入內容:
在這里插入圖片描述
ReadProperties .java代碼:

public class ReadProperties extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {//設置服務器與客戶端的字符集為UTF-8response.setContentType("text/html; charset=UTF-8");ServletContext context = getServletContext();//獲取my.properties資源的真實路徑//HTTP狀態 500 - 內部服務器錯誤:路徑/my.propertiesString RealPath = context.getRealPath("/WEB-INF/classes/my.properties");//字符輸入流,讀取my.properties資源FileReader fileReader = new FileReader(RealPath);//初始化配置文件類Properties properties = new Properties();//加載my.properties文件properties.load(fileReader);//properties.getProperty("name")獲取my.properties資源中的信息,通過鍵值對方式String print = "name=" + properties.getProperty("name") + " address=" + properties.getProperty("address") + " age=" + properties.getProperty("age");response.getWriter().write(print);}@Overrideprotected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {}
}

使用的地址

String RealPath = context.getRealPath("/WEB-INF/classes/my.properties");

瀏覽器中:
在這里插入圖片描述

HTTP協議

介紹
在這里插入圖片描述

請求的HTTP協議格式:
1)GET請求:
【】表示可選
在這里插入圖片描述

GET請求的HTTP協議內容:
在這里插入圖片描述
2)POST請求
在這里插入圖片描述

POST請求的HTTP協議內容:
在這里插入圖片描述
HTTP常用請求頭說明
在這里插入圖片描述

HTTP的GET與POST請求
在這里插入圖片描述

響應的HTTP協議格式
在這里插入圖片描述

在這里插入圖片描述
常見的響應碼:
在這里插入圖片描述

MIME類型說明

RTF:文本

在這里插入圖片描述

瀏覽器中查看HTTP協議

谷歌:
檢查-網絡-Headers
在這里插入圖片描述
MricoSoft Edge瀏覽器:
檢查-網絡-全部-標頭
在這里插入圖片描述

IE瀏覽器:
在IE瀏覽器-查看源-網絡
在這里插入圖片描述

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/446423.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/446423.shtml
英文地址,請注明出處:http://en.pswp.cn/news/446423.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

STL源碼剖析 配接器

配接器(adapters)在 STL組件的靈活組合運用功能上&#xff0c;扮演著軸承、轉換器的角色。Adapter這個概念&#xff0c;事實上是一種設計模式(design pattern)。 Design Patterns)) 一書提到23個最普及的設計模式&#xff0c;其中對odopter樣式的定義如下&#xff1a;將 一個cl…

中科大 計算機網絡3 網絡邊緣Edge

網絡結構 邊緣系統 網絡核心 接入網 方塊&#xff1a;邊緣系統(主機) 圓的&#xff1a;網絡核心&#xff0c;數據交換作用 連接邊緣系統和網絡核心的叫做接入網&#xff08;access&#xff09;&#xff0c;把邊緣的主機接入到網絡核心&#xff08;所以是分布式的&#xff09; …

STL源碼剖析 入門開始 STL概論與版本簡介

源代碼之中時而會出現一些全局函數調用操作&#xff0c;尤其是定義于<stl_construct.h> 之中用于對象構造與析構的基本函數&#xff0c;以及定義于<stl_uninitialized.h>之 中 用 于 內 存 管 理 的 基 本 函 數 &#xff0c; 以及定義于<stl_algobase.h>之中…

中科大 計算機網絡4 網絡核心Core 分組交換 電路交換

網絡核心 電路交換&#xff08;線路交換&#xff09;&#xff1a;打電話之前&#xff0c;先建立一條鏈路&#xff08;物理&#xff09; 分組交換&#xff1a;存儲轉發的方式 電路交換&#xff08;線路交換&#xff09; 通過信令&#xff08;控制信息&#xff0c;如&#xf…

STL 源碼剖析 空間配置器

以STL的運用角度而言&#xff0c;空間配置器是最不需要介紹的東西&#xff0c;它總是隱藏在一切組件&#xff08;更具體地說是指容器&#xff0c;container&#xff09; 的背后但是STL的操作對象都存放在容器的內部&#xff0c;容器離不開內存空間的分配為什么不說allocator是內…

中科大 計算機網絡7 分組延遲 分組丟失 吞吐量

分組丟失和延遲的原因 隊列太長沒有意義&#xff0c;用戶需求 排隊&#xff1a;輸出能力<到來的分組&#xff0c;需要等待 四種分組延遲 節點處理延遲&#xff1a;確定的 排隊延遲&#xff1a;隨機&#xff0c;取決于網絡情況 一個比特的傳輸時間&#xff1a; R1Mbps …

STL源碼剖析 迭代器iterator的概念 和 traits編程技法

iterator模式定義如下&#xff1a;提供一種方法&#xff0c;使之能夠依序巡訪某個 聚合物(容器)所含的各個元素&#xff0c;而又無需暴露該聚合物的內部表述方式.STL的中心思想在于&#xff1a;將數據容器(containers)和算法(algorithms)分開&#xff0c;彼此獨立設計&#xff…

中科大 計算機網絡11 應用層原理

應用層大綱 傳輸層向應用層提供的服務&#xff0c;形式是Socket API&#xff08;原語&#xff09; 一些網絡應用的例子 互聯網層次中&#xff0c;應用層協議最多 流媒體應用&#xff1a;直播 網絡核心最高的層次就是網絡層 應用進程通信方式 C/S&#xff1a; 客戶端&…

STL源碼剖析 序列式容器 vector 和 ilist

Vector list 單向鏈表 ilistlist的刪除操作&#xff0c;也只有指向被刪除元素的迭代器會失效&#xff0c;其他迭代器不會受到影響

中科大 計算機網絡5 接入網和物理媒體

接入網 接入網&#xff1a;把邊緣&#xff08;主機&#xff09;接入核心&#xff08;路由器&#xff0c;交換機&#xff09; 骨干網【連接主機和主機】和接入網中都有物理媒體 接入方式&#xff1a;有線和無線 帶寬共享/獨享 接入網&#xff1a;住宅接入modem modem調制解調…

STL源碼剖析 序列式容器 deque雙端隊列

相較于vector的內存拷貝&#xff0c;deque在內存不足時只需要進行內存的拼接操作即可&#xff0c;不需要重新配置、復制、釋放等操作&#xff0c;代價就是迭代器的架構不是一個普通的指針&#xff0c;比較復雜d e q u e 的迭代器 deque是分段連續空間。維持其“整體連續”假象…

中科大 計算機網絡6 Internet結構和ISP

互聯網的結構 端系統通過接入ISPs接入互聯網 n個ISP互相連接&#xff1a; IXP,Internet exchage point:互聯網接入點&#xff0c;互聯網交互點 ISP&#xff1a;互聯網服務提供商&#xff0c;提供接入&#xff0c;提供網絡【中國移動&#xff0c;中國電信】 ICP&#xff1a…

STL源碼剖析 Stack棧 queue隊列

隨機迭代器用于隨機數據訪問&#xff0c;所以棧stack不具備此功能

中科大 計算機網絡8 協議層次和服務模型

協議層次 協議層次&#xff1a;現實生活中的例子 分層 分層處理和實現復雜系統 圖中&#xff0c;左邊是模塊&#xff0c;右邊是分層 計算機的設計是分層&#xff0c;每一層實現一個或一組功能&#xff0c;下層向上層提供服務&#xff1b;但效率比較低 對等層實體通過協議來交換…

STL源碼剖析 heap堆結構

heap一般特指max-heap&#xff0c;即最大的元素位于heap和array的首部 heap不提供遍歷功能&#xff0c;也不提供迭代功能

中科大 計算機網絡9 互聯網歷史

總綱 計算機網絡 早期1960以前 1961-1972 NCP協議&#xff1a;相當于現在的TCP和IP協議 每個節點即是數據的源也是數據的目標

STL源碼剖析 序列式容器 slist

STL l i s t 是個雙向鏈表(double linked lis t) 。SGI STL提供了一個單向鏈 表 (single linked lis t) , 名 為 slist s l i s t 和 l i s t 的主要差別在于&#xff0c;前者的迭代器屬于單向的Forwardlterotor, 后者的迭代器屬于雙向的Bidirectional Iterator.為此&#xff0…

中科大 計算機網絡12 Web和HTTP

Web與HTTP 對象&#xff1a;web頁中其實是對象鏈接 URL&#xff1a;通用資源定位符【任何對象都可以使用URL來唯一標識】 用戶名&#xff1a;口令【支持匿名訪問&#xff0c;用戶名和口令不計】 端口&#xff1a;HTTP&#xff1a;80 FTP&#xff1a;21【使用默認端口號&#x…

STL源碼剖析 關聯式容器 樹 紅黑樹、二叉搜索樹、平衡二叉搜索樹

所謂關聯式容器&#xff0c;觀念上類似關聯式數據庫(實際上則簡單許多)&#xff1a;每筆數據(每個元素)都有一個鍵值(key)和一個實值(value) 2。當元素被插入到關聯式 容器中時&#xff0c;容器內部結構(可能是RB-tree,也可能是hash-table)便依照其鍵 值大小&#xff0c;以某種…