Tomcat+Http+Servlet

文章目錄

    • 1.HTTP
      • 1.1 請求和響應
          • HTTP請求:請求行+請求頭+請求體
          • HTTP響應:響應行(狀態行)+響應頭+響應體
    • 2. Apache Tomcat
      • 2.1 基本使用
      • 2.2 IDEA中創建 Maven Web項目
      • 2.3 IDEA中使用Tomcat
    • 3. Servlet
      • 3.1 Servlet快速入門
      • 3.2 Servlet執行流程
      • 3.3 Servlet 生命周期
      • 3.4 Servlet體系結構
        • 3.4.1 自定義Servlet類
      • 3.5 Servlet urlPattern配置
      • 3.6 XML配置方式編寫Servlet

JAVAWeb技術棧

BS架構:
B/S架構(Browser/Server架構)是一種常見的軟件架構模式,用于構建Web應用程序。在B/S架構中,瀏覽器(Browser)作為客戶端,通過網絡協議(通常是HTTP)與服務器(Server)進行通信,而服務器負責處理客戶端的請求并生成響應。

  • 客戶端(瀏覽器):客戶端通常是用戶使用的Web瀏覽器,如Chrome、Firefox或Safari。客戶端負責向服務器發送請求,并將服務器返回的響應顯示給用戶。
  • 服務器:服務器是Web應用程序的核心組件,負責接收客戶端的請求并生成響應。服務器通常運行在專用的硬件設備或計算機上,并提供處理請求的軟件環境

通信

  • 網絡通信:B/S架構依賴于網絡通信來實現客戶端和服務器之間的數據傳輸。通常使用HTTP協議進行通信,客戶端發送HTTP請求到服務器,服務器處理請求并生成HTTP響應返回給客戶端。
    數據交互(動態資源)
  • 數據交互:客戶端通過發送請求參數(如表單數據、URL參數等)向服務器發送數據。服務器可以使用不同的技術(如JavaServlet、JSP、ASP.NET等)來處理這些數據,并對其進行驗證、處理和存儲。
    界面(靜態資源)
  • 前端界面:B/S架構中的前端界面通常由HTML、CSS和JavaScript等技術來構建和呈現。

在這里插入圖片描述

1.HTTP

HTTP(超文本傳輸協議)是一種用于在Web上進行通信的協議。

  • 它定義了客戶端和服務器之間進行請求和響應的規范。
  • HTTP是基于TCP/IP協議棧的應用層協議,使用在Web瀏覽器和Web服務器之間。
  • HTTP基于請求和響應模型的,一次請求對應一次響應
  • HTTP是無狀態的協議,即:每一次請求響應都是獨立的
    • 缺點:多次請求不能共享數據
    • 優點: 速度快

1.1 請求和響應

url格式

http://www.itcast.cn:8080/news/index.html?uid=123&page=1
  • 協議:“http”,常見的協議有HTTP,HTTPS、FTP等
  • ip地址或域名:“www.itcast.cn”,也可以使用IP地址作為域名使用
  • 端口:“8080”,端口可以省略,默認端口(HTTP:80,HTTPS:443,FTP:21)
  • 資源路徑:“/news/index.html”
  • 查詢參數:“uid=123&page=1”,可以允許有多個參數,多個之間用“&”作為分隔符

http協議特點

  • 簡單快速
  • 無連接
  • 無狀態;
  • 靈活;
  • 支持C/S模式
HTTP請求:請求行+請求頭+請求體

在這里插入圖片描述

請求行:
說明請求方法、要訪問的資源以及所使用的協議版本;

  • 請求方法:
    GET:從服務器獲取資源(一項或多項)
    POST:在服務器新建一個資源
    PUT:在服務器更新資源(客戶端提供改變后的完整資源)
    DELETE:從服務器刪除資源

請求頭:
緊接著請求行,請求頭部由鍵值對組成,每行一對。 請求頭部通知服務器有關于客戶端請求的信息,典型 的請求頭有:

  • Host:表示請求的主機名稱
  • User-Agent:產生請求的瀏覽器類型
  • Accept:客戶端(瀏覽器)可接受的資源類型
  • Content-Type:請求體數據的類型
  • Authorization:用于發送身份驗證憑據。
  • Cookie:用于發送服務器分配的Cookie信息。

請求體
請求體不在GET方法中使用,經常在POST、PUT方法中使用

  • 請求體的數據可以是:表單數據、文本、XML、JSON
  • 與請求數據相關的最常使用的請求頭是Content-Type和Content-Length
- - 注意事項:- - 
請求行中的請求方法指定了對資源的操作類型,如獲取、創建、更新或刪除。
請求頭提供了關于請求的附加信息,如客戶端特性、所接受的響應類型等。
請求體用于傳輸實際數據,通常在POST、PUT等方法中使用。Q1: GET和POST請求的區別
- 語義方面:
GET方法用于從服務器獲取資源。GET請求不應該對服務器產生副作用,即不應該修改服務器狀態。
POST方法用于向服務器提交數據,通常用于創建新資源或發送更新請求。POST請求可以對服務器產生副作用,即可以修改服務器狀態。
- 數據傳輸方面:
GET請求將數據附加在URL的查詢參數中,以鍵值對的形式發送。
POST請求將數據放在請求體中進行傳輸,而不是作為URL的一部分。
這使得POST請求更適合傳輸大量數據或敏感數據,因為請求體中的數據不會直接暴露在URL中。
- 數據長度方面:
GET請求的數據傳輸長度通常受到URL長度的限制。
POST請求的數據傳輸長度沒有特定的限制,但服務器和網絡基礎設施可能會設置其自己的限制。
- 緩存方面:
GET請求通常可以被瀏覽器緩存,瀏覽器可以緩存GET請求的響應并在下次請求相同資源時重用緩存的響應,以提高性能。
POST請求通常不被瀏覽器緩存,因為它們可能具有副作用,且每個POST請求可能會產生不同的結果。

HTTP響應:響應行(狀態行)+響應頭+響應體

HTTP響應也由三個部分組成,分別是:狀態行、響應頭、響應體
在這里插入圖片描述

狀態行

狀態行由協議版本號、狀態碼、狀態消息三部分組成

狀態碼有三位數字組成,第一個數字定義了響應的類別:
1xx:響應中--表示請求已接收,正常處理中或需要進一步操作;
2xx:成功--表示請求已被成功接收、理解、接受 
3xx:重定向--要完成請求必須進行更進一步的操作  
4xx:客戶端錯誤--客戶發送的請求存在問題有語法錯誤或請求無法實現 
5xx:服務器端錯誤--服務器在處理請求時出現了問題,服務器未能實現合法的請求
請求碼說明
100 Continue(繼續):表示服務器已經接收到了請求的頭部,并且客戶端應該繼續發送請求的主體部分。
101 Switching Protocols(切換協議):表示服務器正在根據客戶端的請求切換協議。例如,客戶端可以發送Upgrade請求頭,請求將連接從HTTP協議切換到WebSocket協議。
102 Processing(處理中):表示服務器正在處理請求,但尚未完成處理。
200 OK(成功):表示請求已成功處理,并且服務器返回了請求的內容。
201 Created(已創建):表示服務器成功創建了新的資源。通常在使用POST請求創建資源時返回.
300 Multiple Choices(多種選擇):表示請求有多個可供選擇的資源,需要客戶端進行進一步的選擇。
301 Moved Permanently(永久重定向):表示請求的資源已永久移動到新的URL。客戶端應該使用新的URL進行后續的請求。
302 Found(臨時重定向):表示請求的資源暫時移動到了新的URL。客戶端應該繼續使用原始的URL進行后續的請求。
400 Bad Request(錯誤請求):表示服務器無法理解客戶端發送的請求,通常是由于請求語法錯誤或參數驗證失敗導致的。
401 Unauthorized(未授權):表示客戶端需要進行身份驗證才能訪問請求的資源。需要在請求中提供有效的身份驗證憑據。
404 Not Found(未找到):表示請求的資源在服務器上不存在,無法找到。這是最常見的客戶端錯誤響應碼。
500 Internal Server Error(服務器內部錯誤):表示服務器在處理請求時遇到了未知的內部錯誤,導致無法完成請求。
501 Not Implemented(未實現):表示服務器不支持或未實現請求的功能。通常用于指示服務器無法滿足請求的特定功能

\

響應頭

響應頭用于描述服務器的基本信息,以及數據的描述,服務器通過這些數據的描述信息,可以通知客戶端如何處理響應數據

常見的響應頭
Content-Type:響應內容的類型,例如"text/html"表示HTML文檔,"application/json"表示JSON數據等。
Content-Length:指定響應體的字節長度,用于表示響應內容的大小。
Location:用于重定向響應中,指定重定向的目標URL。
Cache-Control:用于控制響應的緩存行為,例如設置緩存的有效期、是否可緩存等。
Set-Cookie:設置響應中的Cookie,用于在客戶端存儲數據或維持會話狀態。
Server:指定服務器軟件的名稱和版本號。

響應體

響應體就是響應的消息體,數據可以是普通文本、XML、JSON、HTML源碼

2. Apache Tomcat

Web服務器
Web服務器是一種軟件或計算機程序,用于接收HTTP請求并返回HTTP響應。它在Web應用程序和客戶端之間充當中間層,負責處理和傳遞網絡請求,并提供所請求的資源或執行特定的操作。
//通俗的講:Web服務器就是把我們自己本地寫的html網頁放到一個平臺,這個平臺其他用戶通過輸入你的IP地址和端口號等也可以訪問到。
功能

  • 接收和解析HTTP請求:Web服務器監聽指定的端口,接收來自客戶端的HTTP請求,并解析請求中的方法、URL、請求頭、請求體等信息。
  • 處理請求、生成和發送HTTP響應
  • 將web項目部署到服務器中,對外提供網上瀏覽服務

常見的Web服務器

  • Nginx:Nginx是一個高性能的開源Web服務器和反向代理服務器。它以輕量級和高并發性能著稱,適用于處理大量并發連接
  • Apache HTTP Server:Apache是最流行的開源Web服務器軟件之一。它具有穩定性、可靠性和靈活性,廣泛用于各種Web應用和網站。

Tomcat是一個輕量級的Web服務器,支持Servlet/JSP少量JavaEE規范,也稱為Web容器,Servlet容器。

注意:
Tomcat的啟動與Java Development Kit (JDK) 的位置是相關的。Tomcat是一個Java Web應用服務器,它需要Java運行時環境來執行。當你啟動Tomcat時,它會查找并使用Java命令來啟動。
Tomcat在啟動時會按照以下順序查找JDK:

  1. 檢查JAVA_HOME環境變量:Tomcat會首先查找JAVA_HOME環境變量,該變量指向JDK的安裝目錄。如果JAVA_HOME已經設置,并且指向有效的JDK路徑,Tomcat將使用該JDK來啟動。

  2. 檢查系統路徑:如果JAVA_HOME未設置,Tomcat會查找系統路徑(PATH環境變量)中的可執行文件java來啟動。它將使用找到的第一個java命令執行。

2.1 基本使用

下載:
在這里插入圖片描述
配置環境變量
在這里插入圖片描述

啟動:雙擊bin\startup.bat
(控制臺中文亂碼解決:修改conf/logging.properties

java.util.logging.ConsoleHandler.encoding = GBK (utf-8改為GBK)

在這里插入圖片描述
驗證:在瀏覽器輸入localhost:8080
在這里插入圖片描述
修改配置:

1.修改啟動端口號:conf/server.xml 在這里插入圖片描述

部署項目

將項目放到webapps目錄下,即部署完成。

2.2 IDEA中創建 Maven Web項目

項目結構
在這里插入圖片描述

  • 編譯后的Java字節碼文件和resources的資源文件,放到WEB-INF下的classes目錄下
  • pomxml中依賴坐標對應的jar包,放入WEB-INF下的lib目錄下

IDEA創建Maven Web項目步驟

視頻地址: https://www.bilibili.com/video/BV1Qf4y1T7Hx/

在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述

2.3 IDEA中使用Tomcat

視頻地址:https://www.bilibili.com/video/BV1Qf4y1T7Hxf

方法1:將本地的tomcat集成到IDEA中,然后進行項目部署;

在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述

方法2:在pom文件里添加插件

在這里插入圖片描述


<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/maven-v4_0_0.xsd"><modelVersion>4.0.0</modelVersion><groupId>com.imooc</groupId><artifactId>web-demo</artifactId><packaging>war</packaging><version>1.0-SNAPSHOT</version><dependencies><dependency><groupId>javax.servlet</groupId><artifactId>javax.servlet-api</artifactId><version>3.1.0</version><scope>provided</scope></dependency></dependencies><build><plugins><!-- tomcat 插件 --><plugin><groupId>org.apache.tomcat.maven</groupId><artifactId>tomcat7-maven-plugin</artifactId><version>2.2</version><configuration><port>81</port><path>/</path></configuration></plugin></plugins></build></project>

3. Servlet

Servlet是一種Java語言編寫的服務器端程序,用于處理客戶端發起的請求并返回響應。

  • Servlet 是javaEE規范之一,其實就是一個接口,將來我們需要定義Servlet實現類,并由web服務器運行。
  • Servlet運行在支持Java Servlet規范的Web服務器中,可以接收HTTP請求、處理請求參數、生成動態內容、訪問數據庫等等。
  • Servlet是Java Web開發的核心技術之一,它可以與JSP、JavaBean等技術結合使用,構建出功能強大的Web應用程序。

3.1 Servlet快速入門

步驟:

  1. 創建web項目,導入Servlet依賴坐標;
  2. 定義一個類,實現Servlet接口,并重寫里邊的所有方法,并在service方法里輸入一句話;
  3. 配置:在類上使用@WebServlet注解,配置該Servlet訪問路徑;
  4. 訪問:啟動Tomcat,瀏覽器輸入url訪問該Servlet;
<dependency><groupId>javax.servlet</groupId><artifactId>javax.servlet-api</artifactId><version>3.1.0</version><scope>provided</scope>
</dependency>

在這里插入圖片描述

//2. 定義一個類,實現Servlet接口,并重寫里邊的所有方法,并在service方法里輸入一句話;
package com.itheima;import javax.servlet.*;
import java.io.IOException;public class web implements Servlet {public void init(ServletConfig servletConfig) throws ServletException {}public ServletConfig getServletConfig() {return null;}public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {System.out.println("servlet hello world");}public String getServletInfo() {return null;}public void destroy() {}
}

在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述

3.2 Servlet執行流程

在這里插入圖片描述

Q1: Servlet 由誰創建? Servlet方法由誰調用?

  • Servlet由web服務器創建,Servlet方法由web服務器調用。

Q2:服務器怎么知道Servlet中一定有service方法?

  • 因為我們自定義的Servlet,必須實現Servlet接口并復寫其方法,而Servlet接口中有service方法

3.3 Servlet 生命周期

在這里插入圖片描述

//方法
1.service() 方法:
- Servlet接口中最重要的方法是service()方法。
- 該方法用于處理HTTP請求,并根據請求的方法(GET、POST、PUT、DELETE等)調用對應的doGet()、doPost()、doPut()、doDelete()等方法進行處理。
- 在service()方法中,開發人員可以根據具體的需求編寫自己的處理邏輯。2.init() 和 destroy() 方法:
- init()方法在Servlet被初始化時調用,可以在該方法中進行一些初始化操作,例如加載配置文件、建立數據庫連接等。
- - destroy()方法在Servlet被銷毀時調用,可以在該方法中進行一些資源釋放操作,例如關閉數據庫連接、釋放內存等。3.doGet() 和 doPost() 方法:
- 這兩個方法是service()方法中被調用的具體處理HTTP請求的方法。
- doGet()方法用于處理GET請求,doPost()方法用于處理POST請求。4.getServletConfig() 和 getServletInfo() 方法:
- 這兩個方法用于獲取Servlet的配置信息和信息描述。
- getServletConfig()方法返回一個ServletConfig對象,該對象包含了Servlet的配置參數。- getServletInfo()方法返回一個描述性字符串,用于描述Servlet的信息。

3.4 Servlet體系結構

Aim:簡化開發
在這里插入圖片描述

HttpServlet類
HttpServlet類是Java Servlet規范中的一個抽象類,它擴展自GenericServlet類,并提供了用于處理HTTP請求和響應的方法。
//通俗來說,我們開發B/S架構的web項目,都是針對HTTP協議,所以我們自定義Servlet都會繼承HttpServlet

HttpServlet抽象類的方法及說明

方法說明
doGet() 和 doPost():這兩個方法用于處理GET和POST請求。
service():根據請求的HTTP方法(GET、POST、PUT、DELETE等)自動調用對應的doGet()、doPost()、doPut()、doDelete()等方法。如果業務邏輯不依賴HTTP方法,可以直接重寫service()方法。
init() 和 destroy():這兩個方法用于Servlet的初始化和銷毀。
getServletContext():該方法返回一個ServletContext對象,用于訪問Servlet上下文。
//get和post
package com.itheima.web;import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;@WebServlet("/demo")
public class ServletDemo extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//        super.doGet(req, resp);System.out.println("get...");}@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//        super.doPost(req, resp);System.out.println("post...");}
}

在這里插入圖片描述
post
編寫測試網頁

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>test</title>
</head>
<body>
<form action="/web-demo/demo" method="post"><input name="username"><input type="submit">
</form>
</body>
</html>

3.4.1 自定義Servlet類

在service方法中,根據請求的不同方式(GET或POST),分別調用了doGet和doPost方法。這意味著你可以在這兩個方法中編寫處理GET請求和POST請求的邏輯

package com.itheima.web;import javax.servlet.*;
import javax.servlet.http.HttpServletRequest;
import java.io.IOException;public class MyHttpServlet implements Servlet {@Overridepublic void init(ServletConfig config) throws ServletException {}@Overridepublic ServletConfig getServletConfig() {return null;}@Overridepublic void service(ServletRequest req, ServletResponse res) throws ServletException, IOException {// 根據請求方式的不同,進行分別的處理HttpServletRequest request = (HttpServletRequest) req;//1. 獲取請求方式String method = request.getMethod();//2. 判斷if("GET".equals(method)){// get方式的處理邏輯doGet(req,res);}else if("POST".equals(method)){// post方式的處理邏輯doPost(req,res);}}protected void doPost(ServletRequest req, ServletResponse res) {}protected void doGet(ServletRequest req, ServletResponse res) {}@Overridepublic String getServletInfo() {return null;}@Overridepublic void destroy() {}
}

繼承MyServlet

package com.itheima.web;import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.annotation.WebServlet;@WebServlet("/demo1")
public class ServletDemo1 extends MyHttpServlet{@Overrideprotected void doPost(ServletRequest req, ServletResponse res) {System.out.println("post...!");}@Overrideprotected void doGet(ServletRequest req, ServletResponse res) {System.out.println("get.....!");}
}

在這里插入圖片描述
在這里插入圖片描述

3.5 Servlet urlPattern配置

servlet urlpattern是指在web.xml文件中配置servlet時,用于指定servlet的訪問路徑的一種方式。

  • 它可以通過正則表達式來匹配不同的URL路徑,從而將請求分發給不同的servlet處理。
    // 例如,可以將urlpattern設置為“/hello”,這樣當用戶訪問“http://localhost:8080/hello”時,就會調用對應的servlet來處理請求。
  • 一個Servlet可以配置多個urlPattern
    //例如:@WebServlet(urlPattern = {“/demo1”,“/demo2”})
URL Pattern配置規則:1.精確匹配:使用具體的URL路徑來匹配。
例如,/hello表示只匹配路徑為/hello的請求。2.前綴匹配:使用通配符*來匹配路徑的前綴。
例如,/api/*表示匹配以/api/開頭的所有請求,如/api/users、/api/products等。3.后綴匹配:使用通配符*來匹配路徑的后綴。(注意不要寫斜杠)
例如,*.html表示匹配以.html結尾的請求,如index.html、about.html等。4.擴展名匹配:使用通配符*來匹配指定擴展名的請求。(注意不要加斜杠)
例如,*.do表示匹配以.do結尾的請求,如/login.do、/register.do等。5.路徑匹配:使用通配符**來匹配多級路徑。
例如,/api/**表示匹配以/api/開頭的所有請求,無論后面還有多少級路徑
如/api/users/getAll、/api/products/getById等。6.正則表達式匹配:使用正則表達式來匹配路徑。
例如,/user/[0-9]+表示匹配以/user/后面跟著一個或多個數字的請求,如/user/123、/user/456等。

3.6 XML配置方式編寫Servlet

步驟:

  1. 編寫Servlet類
  2. 在web.xml中配置該類
package com.itheima.web;import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.annotation.WebServlet;public class ServletDemo13 extends MyHttpServlet {@Overrideprotected void doGet(ServletRequest req, ServletResponse res) {System.out.println("demo13 get...");}@Overrideprotected void doPost(ServletRequest req, ServletResponse res) {}
}

在web.xml中配置該Servlet

<?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的名稱,名字任意--><servlet-name>demo13</servlet-name><!--servlet的類全名--><servlet-class>com.itheima.web.ServletDemo13</servlet-class></servlet><!-- Servlet 訪問路徑--><servlet-mapping><!-- servlet的名稱,要和上面的名稱一致--><servlet-name>demo13</servlet-name><!-- servlet的訪問路徑--><url-pattern>/demo13</url-pattern></servlet-mapping>
</web-app>

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

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

相關文章

游戲中的UI適配

引用參考&#xff1a;感謝GPT UI適配原理以及常用方案 游戲UI適配是確保游戲界面在不同設備上以不同的分辨率、屏幕比例和方向下正常顯示的關鍵任務。下面是一些常見的游戲UI適配方案&#xff1a; 1.分辨率無關像素&#xff08;Resolution-Independent Pixels&#xff09;&a…

CentOS 8 安裝 oracle 23c CentOS9 Error deal

1.環境準備 軟件準備 序號 軟件 下載地址 1 VirtualBox https://www.virtualbox.org/wiki/Downloads2 CentOS Stream 8 https://mirrors.tuna.tsinghua.edu.cn/centos/8-stream/isos/x86_64/CentOS-Stream-8-x86_64-latest-dvd1.iso3 oracle-database-free-23c # cd ~/Down…

Vue 3 中定義組件常用方法

在Vue 3 中有多種定義組件的方法。從選項到組合再到類 API&#xff0c;情況大不相同 1、方式一&#xff1a;Options API 這是在 Vue 中聲明組件的最常見方式。從版本 1 開始可用&#xff0c;您很可能已經熟悉它。一切都在對象內聲明&#xff0c;數據在幕后由 Vue 響應。它不是…

C語言實現快速排序

什么是快速排序&#xff1f; 快速排序&#xff08;Quick Sort&#xff09; 是一種高效的分治法排序算法。它通過選擇一個基準元素&#xff0c;將數組分成小于基準的部分和大于基準的部分&#xff0c;然后遞歸地對這些部分進行排序&#xff0c;最終將它們合并起來&#xff0c;完…

【廣州華銳視點】VR警務教育實訓系統模擬真實場景進行實踐訓練

隨著科技的發展&#xff0c;虛擬現實技術在教育領域得到了廣泛的應用。VR警務教育實訓系統就是其中的一種應用&#xff0c;該系統由廣州華銳互動開發&#xff0c;可以模擬真實的警務場景&#xff0c;讓學生通過虛擬現實技術進行實踐訓練&#xff0c;提高學生的實踐能力和技能水…

.NET6使用微信小程序授權登錄,獲取手機號

1.在appsettings配置你的小程序配置信息 //微信小程序信息配置"WechatConfig": {"appid": "", //小程序ID"secret": "" //小程序秘鑰},2.請求接口時先獲取Access_token #region 獲取小程序的Access_tokenpublic object GetA…

Linux:shell腳本循環語句

目錄 一、循環含義 二、echo命令 三、for 3.1.將1到100累加求和 3.2批量添加用戶 3.3 根據IP地址檢查主機狀態 四、 while 和 until 4.1 猜價格 4.2 1-100求和 一、循環含義 循環含義 將某代碼段重復運行多次&#xff0c;通常有進入循環的條件和退出循環的條件 重復…

視頻匯聚平臺EasyCVR視頻監控播放平臺WebRTC流地址無法播放的問題解決方案

開源EasyDarwin視頻監控TSINGSEE青犀視頻平臺EasyCVR能在復雜的網絡環境中&#xff0c;將分散的各類視頻資源進行統一匯聚、整合、集中管理&#xff0c;在視頻監控播放上&#xff0c;TSINGSEE青犀視頻安防監控匯聚平臺可支持1、4、9、16個畫面窗口播放&#xff0c;可同時播放多…

Linux的ln命令

ln是link的縮寫,在Linux中 ln 命令的功能是為某一個文件在另外一個位置建立一個同步的鏈接&#xff0c;當我們需要在不同的目錄&#xff0c;用到相同的文件時&#xff0c;我們不需要在每一個需要的目錄下都放一個必須相同的文件&#xff0c;我們只要在某個固定的目錄&#xff0…

Ubuntu18.04.4裸機配置

下載虛擬機Ubuntu18.04.4 鏈接&#xff1a;https://pan.baidu.com/s/1jyucyUSXa9-Fw9ctuU87hA 提取碼&#xff1a;o42a –來自百度網盤超級會員V5的分享 VMware選擇鏡像安裝 設置你的用戶名&#xff0c;就像windows上登錄用戶一樣簡單 下一步……下一步……如此簡單 下載…

Floyd(多源匯最短路)

Floyd求最短路 給定一個 n 個點 m 條邊的有向圖&#xff0c;圖中可能存在重邊和自環&#xff0c;邊權可能為負數。 再給定 k 個詢問&#xff0c;每個詢問包含兩個整數 x 和 y&#xff0c;表示查詢從點 x 到點 y 的最短距離&#xff0c;如果路徑不存在&#xff0c;則輸出 impo…

每日一題 33搜素旋轉排序數組(二分)

題目 整數數組 nums 按升序排列&#xff0c;數組中的值 互不相同 。 在傳遞給函數之前&#xff0c;nums 在預先未知的某個下標 k&#xff08;0 < k < nums.length&#xff09;上進行了 旋轉&#xff0c;使數組變為 [nums[k], nums[k1], ..., nums[n-1], nums[0], nums[…

Fortinet數據中心防火墻及服務ROI超300%!Forrester TEI研究發布

近日&#xff0c;專注網絡與安全融合的全球網絡安全領導者 Fortinet&#xff08;NASDAQ&#xff1a;FTNT&#xff09;聯合全球知名分析機構Forrester發布總體經濟影響獨立分析報告&#xff0c;詳細闡述了在企業數據中心部署 FortiGate 下一代防火墻&#xff08;NGFW&#xff09…

Django圖書商城系統實戰開發-實現商品管理

Django圖書商城系統實戰開發 - 實現商品管理 在本教程中&#xff0c;我們將使用Django框架來實現一個簡單的圖書商城系統&#xff0c;并重點討論如何實現商品管理功能。此外&#xff0c;我們還將介紹如何使用Markdown格式來寫博客&#xff0c;并將其集成到我們的圖書商城系統中…

緩存淘汰算法(LFU LRU FIFO)及進程的狀態和轉換

目錄 一、緩存淘汰算法 1.LFU&#xff08;Least Frequently Used&#xff09;最近最不常用算法 2.LRU&#xff08;Least Recently User&#xff09;最近最少使用算法 3.FIFO&#xff08;First in first out&#xff09;先進先出算法 二、進程的狀態和轉換 1.最基本的三種狀…

OpenCV圖像處理——模版匹配和霍夫變換

目錄 模版匹配原理實現 霍夫變換霍夫線檢測 模版匹配 原理 實現 rescv.matchTemplate(img,template,method)import numpy as np import cv2 as cv import matplotlib.pyplot as pltimgcv.imread(./汪學長的隨堂資料/6/模板匹配/lena.jpg) templatecv.imread(./汪學長的隨堂資…

UniApp 使用命令創建頁面的詳細指南

系列文章目錄 文章目錄 系列文章目錄前言一、安裝Uni-CLI二、創建頁面三、頁面創建命令四、頁面結構五、頁面使用總結 前言 UniApp是一款跨平臺的前端框架&#xff0c;可以用于開發同時運行在多個平臺&#xff08;如微信小程序、H5、App等&#xff09;的應用程序。本文將詳細介…

系統架構設計師---考試通關練習題

第一章 系統架構設計師概述 1 .以下()不是現代信息系統的架構的三個要素。 A.構件 B.模式 C.規劃 D.屬性 解析:現代信息系統的架構有三個要素,即構件、模式和規劃。 答案:D 2. 軟件系統架構是關于軟件系統的結構、行為和()的高級抽象。 A.構件 B.模式 C…

centos-stream-9 centos9 配置國內yum源 阿里云源

源配置 tips: yum配置文件路徑 /etc/yum.repos.d/centos.repo 1.備份源配置 [Very Important!]mv /etc/yum.repos.d/centos.repo /etc/yum.repos.d/centos.repo.backup2.Clean Cache: yum clean all3.Backup the Old CentOS-Base.repo If exist this file.cd /etc/yum.repos.…

使用chatGPT-4 暢聊量子物理學(三)

集合了人類智慧的照片&#xff0c;來自 1927 年舉行的第五屆索爾維國際會議。 Omer 什么是“物理系統在被測量之前不具有確定的屬性。量子力學只能預測給定測量的可能結果的概率分布" ChatGPT 這句話描述了量子力學中的一種基本原則&#xff0c;即“物理系統在被測量之前…