JavaWeb核心篇(1)——HTTP/Tomcat/Servlet

来源:https://www.cnblogs.com/qiuluoyuweiliang/archive/2022/09/08/16669453.html
-Advertisement-
Play Games

JavaWeb核心篇(1)——HTTP/Tomcat/Servlet 在正式講解JavaWeb前,我們先來瞭解一下JavaWeb: Web:全球廣域網,也被稱為萬維網(www),能夠通過瀏覽器訪問的網站 JavaWeb:通過Java技術來解決相關Web互聯網領域的技術棧 如果說網頁是為了展現數據,數 ...


JavaWeb核心篇(1)——HTTP/Tomcat/Servlet

在正式講解JavaWeb前,我們先來瞭解一下JavaWeb:

  • Web:全球廣域網,也被稱為萬維網(www),能夠通過瀏覽器訪問的網站
  • JavaWeb:通過Java技術來解決相關Web互聯網領域的技術棧

如果說網頁是為了展現數據,資料庫是為了存儲和管理數據,那麼JavaWeb就是為了進行邏輯處理

溫馨提示:在學習JavaWeb前,需要先學習MYSQL,JDBC和前端三件套。

WEB核心技術棧介紹

既然我們想要學習JavaWeb,那麼我們就要先來進行瞭解:

  • B/S框架:Browser/Server,瀏覽器/伺服器 構造模式,它的特點是,客戶端只需要瀏覽器,應用程式和數據都存儲在伺服器端。瀏覽器只需要請求伺服器,獲得Web資源,伺服器把Web資源發送給瀏覽器即可。
  • 靜態資源:HTML,CSS,JavaScript,圖片等,負責頁面展示
  • 動態資源:Servlet,JSP等,負責邏輯處理
  • 資料庫:負責存儲數據
  • HTTP協議:定義通信規則
  • Web伺服器:負責解析HTTP協議,解析請求數據,併發送響應數據(常用Web伺服器:Apache Tomcat)

HTTP

首先我們系統的介紹一下HTTP

  • 概念:HyperText Transfer Protocol,超文本傳輸協議,規定了瀏覽器和伺服器之間數據傳輸的規則

HTTP特點:

  • 基於TCP協議:面向連接,安全
  • 基於請求-響應模型:一次請求對應一次響應
  • HTTP協議是無狀態的協議:對於事務處理沒有記憶能力;每次請求-響應都是獨立的

HTTP優缺點:

  • 優點:速度快
  • 缺點:多次請求間不能共用數據。(Java中使用會話技術Cookie,Session來解決這個問題)

HTTP請求數據格式

HTTP請求數據分為三部分:

  • 請求行:請求數據的第一行,其中GET表示請求方式(還有POST方法),/表示請求資源路徑,HTTP/1.1表示協議版本
  • 請求頭:第二行開始,格式為key:value形式
  • 請求體:POST請求的最後一部分

常見的請求頭:

  • Host:表示請求的主機名
  • User-Agent:瀏覽器版本
  • Accept:表示瀏覽器能接收的資源類型,其中text/* , image/* 或者 */ *表示所有
  • Accept-Language:表示瀏覽器偏好的語言
  • Accept-Encoding:表示瀏覽器可以支持的壓縮類型,類如gzip,deflate等

GET請求和POST請求的區別:

  • GET請求請求參數在請求行中,沒有請求體;但是POST請求請求參數在請求體中
  • GET請求請求參數有限制,但是POST沒有

下麵給出GET和POST兩個例子:

GET請求數據格式

GET/HTTP/1.1
Host:www.itcast.cn
Connection:keep-alive
Cache-Control:max-age=0 Upgrade-Insecure-Requests:1
User-Agent:Mozilla/5.0Chrome/91.0.4472.106
......
POST請求數據格式

POST/HTTP/1.1
Host:www.itcast.cn
Connection:keep-alive
Cache-Control:max-age=0 Upgrade-Insecure-Requests:1
User-Agent:Mozilla/5.0Chrome/91.0.4472.106

username=superbaby&password=123456

HTTP響應數據格式

響應數據分為三部分:

  • 響應行:響應數據的第一行;其中HTTP/1.1表示協議版本,200表示響應狀態碼,OK表示狀態碼描述
  • 響應頭:第二行開始,格式為key:value形式
  • 響應體:最後一部分,存放響應數據

常見HTTP響應頭:

  • Content-Type:表示該響應內容的類型,類如text/html/image/jpeg
  • Content-Length:表示該響應內容的長度(位元組數)
  • Content-Encoding:表示該響應壓縮演算法。例如gzip
  • Cache-Control:指示客戶端應如何緩存,例如max-age=300,表示最多可以緩存300s

下麵給出HTTP響應例子:

HTTP/1.1 200 OK
Server:Tengine
Content-Type:text/html
Transfer-Encoding:chunked...

<html>
<head>
	<title></titile>
</head>
<body>
</body>
</html>

重要狀態碼:

狀態碼分類 說明
1xx 響應中——臨時狀態碼,表示請求已經接受,告訴客戶端應該繼續請求或者如果它已經完成則忽略它
2xx 成功——表示請求已經被成功接收,處理已經完成
3xx 重定位——重定義到其他地方;它讓客戶端再發起一個請求已完成整個處理
4xx 客戶端錯誤——處理髮生錯誤,責任在客戶端,如:客戶端請求一個不存在的資源
5xx 伺服器端錯誤——處理髮生錯誤,責任在服務端,如:服務端拋出異常,路由出錯,HTTP版本不支持
狀態碼 英文描述 解釋
200 OK 客戶端請求成功,處理成功
404 NOT FOUND 請求資源不存在,通常為url錯誤或資源被刪除
500 Internal Server Error 伺服器發生不可預期的錯誤,伺服器出現異常,可以查看日誌

狀態碼大全:HTTP 狀態碼 | 菜鳥教程 (runoob.com)

Tomcat

首先我們知道Tomcat是Web伺服器的一種,那麼我們從頭介紹:

  • Web伺服器屬於一個應用程式,對HTTP協議的操作進行封裝,使得程式員不必直接對協議進行操作,讓Web開發更加便捷。
  • 其主要功能是“提供網上信息瀏覽服務”。

然後我們對Tomcat做出一個簡單解釋:

  • Tomcat是Apache軟體基金會的一個核心項目,是一個開源免費的輕量級Web伺服器,支持Servlet/JSP少量JavaEE規範
  • JavaEE:Java企業版,指Java企業級開發的技術規範總和,包含13門技術:JDBC,JSP,XML,Servlet等
  • Tomcat也被稱為Web容器;Servlet需要依賴Tomcat才能運行
  • 官網:Apache Tomcat® - Welcome!

通俗來講,我們自製的HTML網頁通常只能在自己電腦上使用

如果我們希望將該網頁上傳到網路上被其他人閱讀,就需要書寫HTTP等原本不屬於該網頁的製造代碼

但是我們可以通過Web伺服器(Tomcat等)來省略HTTP內容書寫的過程,直接將該網頁上傳至網路被其他人閱讀

Tomcat下載

Tomcat下載流程:

  1. 下載:官網下載即可(示例Tomcat為Tomcat8)
  2. 安裝:綠色版本,直接安裝即可(推薦安裝在無漢字無空格的文件目錄下)
  3. 啟動:雙擊bin\startup.bat即為啟動

Tomcat關閉流程:

  1. 強制關閉:直接按×關閉即可
  2. 正常關閉:雙擊bin\shutdown.bat 或者 在cmd控制面板使用ctrl+c

我們給出Tomcat的文件目錄展示並解釋:

我們對文件夾進行解釋翻譯:

  • bin:可執行文件存放目錄
  • conf:配置文件存放目錄
  • lib:jar包存放目錄
  • logs:日誌文件
  • temp:臨時文件
  • webapps:應用發佈目錄(我們把需要編譯的文件放置在該文件夾下,在啟動後,就可以在網頁中直接搜索)
  • work:工作目錄

Tomcat配置與項目部署

Tomcat的配置主要是修改埠號:

我們在conf/server.xml中找到如下代碼,修改port埠號即可

    <Connector port="80" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443" />

註意:HTTP協議預設埠號為80,如果將Tomcat埠號修改為80,則訪問時不需要輸入埠號

Tomcat部署項目:

將項目放在webapps目錄下,即為部署成功

註意:我們的文件通常打包為war壓縮包,放置在webapps下後會自動解壓(加快速度)

IDEA創建Maven Web項目整體框架

首先我們先對Maven Web項目的整體框架進行解釋:

我們對文件夾進行解釋翻譯:

  • src:主目錄
  • java:java代碼
  • resources:資源文件
  • webapp:Web項目特有目錄
  • html:HTML文件目錄(可自定義)
  • WEB-INF:Web項目核心目錄(必須這個名字)
  • web.xml:Web項目配置文件
  • test:測試目錄

在文件打包之後會創建一個target打包包,即為部署成功的JavaWeb項目包:

  • 編譯後的Java位元組碼文件和resources資源文件,放到WEB-INF下的class目錄下
  • pom.xml中依賴坐標對應的jar包會放到WEB-INF下的lib目錄下

IDEA創建Maven Web項目

創建方法分為使用骨架和不使用骨架(骨架:項目模板)

  • 使用骨架:
  1. 在創建項目中使用Maven Archetype,直接創建即可
  2. 在創建後,刪除掉pom.xml中的多餘坐標(只保留自身groupId即可)
  3. 需要補全main下的Java目錄和resources目錄
  • 不使用骨架:
  1. 直接創建Maven項目
  2. 在pom.xml中的groupId中添加war,使其打包方法為war(預設為jar)
  3. 補全webapp目錄

IDEA中使用Tomcat

我們如果在Tomcat的下載地址下上傳網頁,需要不停刷新Tomcat,所以我們希望在IDEA中使用Tomcat

  • 集成本地Tomcat(IDEA完整版)

我們需要在IDEA中添加配置(Add)中添加Tomcat即可

  • Tomcat Maven插件(Tomcat7版本之前)

直接在pom.xml中添加Tomcat插件

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.tomcat.maven</groupId>
            <artifactId>tomcat7-maven-plugin</artifactId>
            <configuration>
                <path>/</path>
                <port>8080</port>
            </configuration>
        </plugin>
    </plugins>
</build>

然後在Maven Helper插件中快速啟動項目,選中項目,右鍵-> Run Maven ->tomcat7:run

Servlet

最後我們介紹一下Servlet:

  • Servlet是Java提供的一門動態Web資源開發技術
  • Servlet是JavaEE規範之一,其實就是一個介面,將來我們需要定義Servlet類實現Servlet介面,並由Web伺服器運行Servlet

如果說Tomcat是Java網頁與互聯網連接的一個框架,那麼Servlet就是Java網頁在登陸互聯網後的動態資源

Servlet入門

下麵我們通過一個簡單的步驟來介紹Servlet的使用過程:

  1. 創建Web項目,在pom.xml中導入Servlet依賴坐標
<?xml version="1.0" encoding="UTF-8"?>
<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/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>org.example</groupId>
    <artifactId>web-demo</artifactId>
    <version>1.0-SNAPSHOT</version>
    <packaging>war</packaging>
    <properties>
        <maven.compiler.source>8</maven.compiler.source>
        <maven.compiler.target>8</maven.compiler.target>
    </properties>

	<!-- servlet依賴坐標 -->
    <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>
            </plugin>
        </plugins>
    </build>
</project>
  1. 在Java文件夾下創建一個類,並實現Servlet介面,重寫所有方法
package com.itheima.web;

import javax.servlet.*;
import javax.servlet.annotation.WebServlet;
import java.io.IOException;

@WebServlet("/demo1")
public class ServletDemo1 implements Servlet {


    // service 在每次開啟網頁後都會啟動一次(是主要代碼)
    @Override
    public void service(ServletRequest req, ServletResponse res) throws ServletException, IOException {
        System.out.println("servlet hello world~");
    }

    @Override
    public String getServletInfo() {
        return null;
    }

    @Override
    public void destroy() {

    }

    @Override
    public void init(ServletConfig config) throws ServletException {

    }

    @Override
    public ServletConfig getServletConfig() {
        return null;package com.itheima.web;

  1. 在類上方使用@WebServlet註解,配置該Servlet的訪問路徑
import javax.servlet.*;
import javax.servlet.annotation.WebServlet;
import java.io.IOException;


// 這裡使用註解,後面括弧內為訪問路徑
@WebServlet("/demo1")
public class ServletDemo1 implements Servlet {


    @Override
    public void service(ServletRequest req, ServletResponse res) throws ServletException, IOException {
        System.out.println("servlet hello world~");
    }

    @Override
    public String getServletInfo() {
        return null;
    }

    @Override
    public void destroy() {

    }

    @Override
    public void init(ServletConfig config) throws ServletException {

    }

    @Override
    public ServletConfig getServletConfig() {
        return null;
    }
}

    }
}
  1. 訪問:啟動Tomcat,輸入URL即可訪問,並且觸動Servlet中的service方法
// /web-demo 是Web項目名稱
// /demo1是配置訪問路徑

http://localhost:8080/web-demo/demo1

Servlet生命周期

在分析執行流程前,我們先明白兩個問題:

  • Servlet由Web伺服器創建,Servlet方法由Web伺服器調用
  • 因為我們自定義的Servlet,必須實現Servlet介面並覆寫其方法,所以Servlet介面中必定存在service方法

生命周期概念:

  • 生命周期:指一個對象從被創建到被銷毀的全過程

Servlet生命周期:

  1. 載入和實例化:
    • 預設情況下,當Servlet第一次被訪問時,由容器創建Servlet對象
  2. 初始化:
    • 在Servlet實例化之後,容器將調用Servlet的init()方法初始化這個對象,完成一些如載入配置文件,創建連接等初始化的工作,該方法只調用一次!
  3. 請求處理:
    • 每次請求Servlet時,Servlet容器都會調用Service方法來對請求進行處理
  4. 服務終止:
    • 當需要釋放記憶體或容器關閉時,容器就會調用Servlet實例的destroy()方法完成資源的釋放;在destroy方法調用之後,容器會釋放這個Servlet實例,該實例隨後會被Java的垃圾收集器回收

註意:@WebServlet(urlPatterns = “/demo1”,loadOnStartup = 1)

loadOnStartup:當為負整數,表示第一次被訪問時創建;當為正整數或0,表示伺服器啟動時創建,數字越小優先順序越高

Servlet方法介紹

Servlet存在五種方法,我們在代碼中進行介紹:

package com.itheima.web;

import javax.servlet.*;
import javax.servlet.annotation.WebServlet;
import java.io.IOException;

/**
 * Servlet 生命周期方法
 */
@WebServlet(urlPatterns="/demo2",loadOnStartup = 1)
public class ServletDemo2 implements Servlet {

    /**
     * 初始化方法
     * 1. 調用時機:預設情況下,Servlet被第一次訪問時,調用
     *      * loadOnStartup:
     * 2. 調用次數:1次
     * @param config
     * @throws ServletException
     */
    @Override
    public void init(ServletConfig config) throws ServletException {
        System.out.println("init...");
    }


    /**
     * 提供服務
     * 1. 調用時機:每一次Servlet被訪問時,調用
     * 2. 調用次數:多次
     *
     *
     * @param req
     * @param res
     * @throws ServletException
     * @throws IOException
     */
    @Override
    public void service(ServletRequest req, ServletResponse res) throws ServletException, IOException {
        System.out.println("servlet hello world~");
    }


    /**
     * 銷毀方法
     * 1. 調用時機:記憶體釋放或者伺服器關閉的時候,Servlet對象會被銷毀,調用
     * 2. 調用次數:1次
     */
    @Override
    public void destroy() {
        System.out.println("destroy...");
    }

    // 用於獲取Servlet的具體信息
    @Override
    public String getServletInfo() {
        return null;
    }

    // 用於獲取ServletConfig對象
    @Override
    public ServletConfig getServletConfig() {
        return null;
    }
}

Servlet體繫結構

Servlet屬於最高級根介面,為了更加契合HTTP的使用

我們又以Servlet創建了GennericServlet類,再以GennericServlet類為模板創建了HTTPServlet類

在這部分我們將介紹HTTPServlet類:

  • 我們的B/S構架的Web的開發,都是針對HTTP協議的,所以我們自定義的Servlet類可以繼承HTTPServlet類

HTTPServlet使用步驟:

  • 繼承HTTPServlet類
  • 重寫doGet和doPost方法

HttpServlet原理:

  • 獲得請求方式,並根據不同請求方法,調用不同的do方法

我們給出一個具體實例:

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("/demo4")
public class ServletDemo4 extends HttpServlet {

    // HTTPServlet根據其請求的GET或POST方法提供不同的返回信息
    
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("get...");
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("post...");
    }
}

Servlet urlPattern配置

Servlet如果想被訪問,就必須要配置urlPattern信息(訪問路徑)

首先我們闡明一個道理:

  • 一個Servlet,可以配置多個urlPattern
@WebServlet(urlPattern = {"/demo1","/demo2"})

然後我們介紹Servlet的urlPattern匹配規則:

  1. 精準匹配
// Java源碼
@WebServlet(urlPattern = "/user/select")

// 查詢網站
localhost8080/web-demo/user/select
  1. 目錄匹配
// Java源碼
@WebServlet(urlPattern = "/user/*")

// 查詢網站
localhost8080/web-demo/user/aaa
localhost8080/web-demo/user/bbb    
  1. 擴展名匹配
// Java源碼
@WebServlet(urlPattern = "*.do")

// 查詢網站
localhost8080/web-demo/aaa.do
localhost8080/web-demo/bbb.do
  1. 任意匹配
// Java源碼
@WebServlet(urlPattern = "/")
@WebServlet(urlPattern = "/*")

// 查詢網站
localhost8080/web-demo/hehe
localhost8080/web-demo/haha
    
/*
介紹一下 / 和 /* 區別:

/*: 可以匹配任意訪問路徑

/: 當我們的項目中配置了"/"後,會覆蓋掉tomcat中的DefaultServlet,這樣就會導致你的靜態內容(html)都無法被訪問,所以儘量不要使用
*/

優先順序:精確路徑 > 目錄路徑 > 擴展名路徑 > /* > /

XML配置方法編寫Servlet

Servlet在3.0版本後才可以使用註解配置(@註解)

在3.0版本之前我們需要採用XML配置文件的配置方法

配置方法:

  • 編寫Servlet類
  • 在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-name>demo13</servlet-name>
        <servlet-class>com.itheima.web.ServletDemo13</servlet-class>
    </servlet>
    
    
    <!--
        Servlet 訪問路徑
    -->
    
    <servlet-mapping>
        <servlet-name>demo13</servlet-name>
        <url-pattern>/demo13</url-pattern>
    </servlet-mapping>
</web-app>

結束語

好的, 關於JavaWeb的第一期就到這裡,具體介紹了HTTP,Tomcat和Servlet三門技術

下一期將會介紹Request和Response以及案例介紹

附錄

該文章屬於學習內容,具體參考B站黑馬程式員陳老師的JavaWeb課程

這裡附上鏈接:01-Web核心介紹_嗶哩嗶哩_bilibili


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 多個元素的過渡 點擊打開視頻講解更加詳細 我們之後討論多個組件的過渡,對於原生標簽可以使用 v-if/v-else。最常見的多標簽過渡是一個列表和描述這個列表為空消息的元素: <transition> <table v-if="items.length > 0"> <!-- ... --> </ta ...
  • process-env 在使用vue框架時,經常用到的倆種環境,一種是開發環境,一種是生產環境。 平時開發使用的是開發環境,如果發佈到線上時,需要切換為線上環境。可以通過不同配置不同的運行命令來自動切換環境。 配置環境實現原理 實現原理是採用nodeJS的頂層對象中的process.env(進程環境 ...
  • 有時候想寫一個無關框架組件,又不想用原生或者 Jquery 那套去寫,而且還要避免樣式衝突,用 Web Components 去做剛覺就挺合適的。但是現在 Web Components 使用起來還是不夠靈活,很多地方還是不太方便的,如果能和 MVVM 搭配使用就好了。早在之前 Angular 就支持 ...
  • 時隔幾個月,拖拖拉拉的終於整理好了一份使用指南。下次終於可以甩個文檔連接了🤣,再也不用一個個解釋了。 感慨 隨隨便便做的一個主題,沒想到會有人使用。🤣因為沒有文檔,時不時有人會來問怎麼使用,無奈只有一個個郵件回覆告知。體會到開源不易,維護更不易🤣(在此對曾經使用過的開源庫表示感謝)。 以前主題 ...
  • JS第七種數據類型Symbol詳解 點擊打開視頻講解更加詳細 一、什麼是Symbol? Symbol是ES6中引入的一種新的基本數據類型,用於表示一個獨一無二的值。它是JavaScript中的第 七種數據類型,與undefined、null、Number(數值)、String(字元串)、Boolea ...
  • 函數:就是封裝了一段可以被重覆執行調用的代碼塊,目的就是讓大量的代碼重覆使用 函數的使用 分兩步:聲明函數和調用函數 函數的封裝 函數的封裝是把一個或者多個功能通過函數的方式封裝起來,對外只提供一個簡單的函數介面 函數的參數 形參和實參 形參和實參個數不匹配問題 ...
  • IM多人聊天室功能簡介 ZIM SDK 提供多人房間聊天功能,支持用戶向房間內發送文本消息或自定義消息,實現了多人線上交流、同步分享。 多人房間聊天功能可應用於小班課或者會議室等場景,房間成員數量上限請參考 計費說明。 IM房間管理功能的前提條件 在實現“房間管理”功能之前,請確保: 已在 ZEGO ...
  • 關健術語 本文用到的一些關鍵詞語以及常用術語,主要如下: 信號量(Semaphore): 是在多線程環境下使用的一種設施,是可以用來保證兩個或多個關鍵代碼段不被併發調用,也是作系統用來解決併發中的互斥和同步問題的一種方法。 信號量機制(Semaphores): 用來解決同步/互斥的問題的,它是196 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...