Servlet處理原生Ajax請求

来源:https://www.cnblogs.com/1314520wly/archive/2019/10/29/iloveyou.html
-Advertisement-
Play Games

萌新小白人生中的第一篇博客,難免會有差錯,還望各位大佬多多包涵。 1. Ajax技術簡介 Ajax(Asynchronous JavaScript and XML,非同步JavaScript和XML)時一種創建互動式網頁應用的網頁開發技術,它並不是一項新的技術,其產生的目的是用於實現頁面的局部刷新。通 ...


萌新小白人生中的第一篇博客,難免會有差錯,還望各位大佬多多包涵。

1. Ajax技術簡介 

    Ajax(Asynchronous JavaScript and XML,非同步JavaScript和XML)時一種創建互動式網頁應用的網頁開發技術,它並不是一項新的技術,其產生的目的是用於實現頁面的局部刷新。通過Ajax技術可以使之前的應用程式在每次提交時不用進行頁面的整體刷新,從而提升操作的性能。

2. Servlet概念

    Servlet(伺服器端小程式)是使用java編寫的伺服器端小程式,可以像JSP一樣,生成動態的Web頁。不過,Servlet側重於邏輯控制,JSP側重於視圖展示。Servlet主要運行在伺服器端,並由伺服器調用執行,是一種按照Servlet標準開發的類。Servlet最大的好處就是可以處理客戶傳來的HTTP請求,並返回一個響應。

3. 同步和非同步

    同步:客戶端發送請求給服務端,在等待服務端響應請求的這段時間,客戶端不能做其他事情,只能等待。伺服器端做完了才返回給客戶端,這時客戶端就可以做其他事情了。用戶使用起來可能不太友好,但是有時我們必須拿到服務端的數據才能進行下一步操作。比如我給你打電話,你必須接通電話我才可以和你通話。

    非同步:客戶端發送請求給服務端,在等待服務端響應請求的這段時間,客戶端可以做其他事情,不用等待。節約了時間。提高了效率。比如發簡訊。一條簡訊發完後,不管你看沒看,回覆沒回覆,我可以再發下一條簡訊。不過,也有可能造成簡訊干擾。所以要慎重。當然,打電話和發簡訊的前提是必須有手機,手機必須有話費。(說一句廢話)。

4. Servlet處理原生Ajax請求(不發送數據/發送key/value數據/發送json格式數據)

開發環境:eclipse+tomcat+jsp+javascript+ajax+servlet

 

4.1 Servlet處理原生Ajax請求(不攜帶數據,返回普通文本)

    (1) 搭建環境:

    在eclipse中新建Java web項目(會自動導入JRE System Library包),比如我把項目名字寫為AjaxDemo,並將項目部署到tomcat伺服器上,下麵是eclipse中項目的目錄結構:

    

我們先不管lib中的jar包,下麵我會進行分析,一步一步來。下麵我們進行開發。

   (2)編寫inedex.jsp頁面

     在WebContent根目錄下新建index.jsp文件,文件內容如下:

      

 1 <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
 2 
 3 <%-- <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%> --%>
 4 <%
 5     String path = request.getContextPath();
 6     String basePath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort()
 7             + path + "/";
 8 %>
 9 <!DOCTYPE html>
10 <html>
11 <head>
12 <base href="<%=basePath%>">
13 <title>I LOVE YOU</title>
14 <link rel="stylesheet" type="text/css" href="">
15 <script type="text/javascript" src="index.js"></script>
16 
17 </head>
18 <body>
19 
20 <button id="mybutton" value="非同步請求伺服器" onclick="fun1()" >發送數據格式為key/value的原生ajax請求</button>
21 <spand id="show" />
22 
23 <br/>
24 
25 <hr/>
26 
27 <button id="mybutton1" value="非同步請求伺服器" onclick="fun2()" >發送數據格式為json的原生ajax請求</button>
28 <spand id="show1" />
29 
30 
31 <br/>
32 <hr/>
33 
34 <button id="mybutton2" value="非同步請求伺服器" onclick="fun3()" >不發送數據</button>
35 <spand id="show2" />
36 
37 </body>

 

這個頁面我們編寫了三個按鈕,並且都註冊了事件,可以調用js文件中對應的函數來響應按鈕。這裡我們看id="mybutton2"這個按鈕(第三個),不發送數據這個按鈕。<span>標簽的作用主要是為了顯示返回的內容。我們註意到這個jsp文件引用了javascript文件。下麵我們編寫js文件。

(3)編寫inedex.js文件

   

 1 /**
 2  * 
 3  */
 4 //原生ajax提交key/value數據
 5 function fun1(){
 6     
 7     var value="username=wly&password=1314520";  //key/value類型
 8     var x=new XMLHttpRequest();   //創建ajax對象
 9     x.onreadystatechange=function(){     //對ajax對象進行監聽    
10         if(x.readyState==4){         //4表示解析完畢    
11             if(x.status==200){            //200為正常返回
12                 var data=x.responseText;   //返回的文本內容
13                 document.getElementById("show").innerHTML=data;
14                 console.log(data);  //web控制台列印
15             }
16         }    
17     }
18     
19     //(1)發送方式
20     //(2)發送地址
21     //(3)是否非同步,true為非同步,false為同步    
22     x.open("POST","AjaxServlet",true);
23     x.setRequestHeader("Content-type","application/x-www-form-urlencoded");
24     x.send(value);  //發送    
25 }
26 
27 
28 //原生ajax提交json數據
29 function fun2(){
30     var user={    
31         "username":"wly",
32         "password":"1314521"
33     };
34     var x=new XMLHttpRequest();   //創建ajax對象
35     x.onreadystatechange=function(){     //對ajax對象進行監聽    
36         if(x.readyState==4){         //4表示解析完畢    
37             if(x.status==200){            //200為正常返回
38                 var data=JSON.parse(x.responseText);   //把json字元串解析為javascript對象
39                 document.getElementById("show1").innerHTML=data.message+" "+data.user.username+" "+data.user.password;
40                 console.log(data);
41                 console.log(data.meaasage);
42                 console.log(data.user);
43             }
44         }            
45     }
46     
47     //(1)發送方式
48     //(2)發送地址
49     //(3)是否非同步,true為非同步,false為同步    
50     x.open("POST","AjaxServlet1",true);
51     x.setRequestHeader("Content-type","application/x-www-form-urlencoded");
52     
53     //把javascript對象轉化為json字元串
54     x.send(JSON.stringify(user));  
55 }
56 
57 
58 //原生ajax請求(不發送數據)
59 function fun3(){
60     
61     
62     var x=new XMLHttpRequest();   //創建ajax對象
63     x.onreadystatechange=function(){     //對ajax對象進行監聽    
64         if(x.readyState==4){         //4表示解析完畢    
65             if(x.status==200){            //200為正常返回
66                 var data=x.responseText;   //返回的文本內容
67                 document.getElementById("show2").innerHTML=data;//將內容顯示在span標簽中
68                 console.log(data);  //web控制台列印
69             }
70         }    
71     }
72     
73     //(1)發送方式
74     //(2)發送地址
75     //(3)是否非同步,true為非同步,false為同步    
76     x.open("POST","AjaxServlet2",true);
77     //設置請求頭信息
78     x.setRequestHeader("Content-type","application/x-www-form-urlencoded");
79     x.send(null);  //發送    ,不發送數據,使用null
80 }

 

我們來看fun3()這個函數,這裡我們使用原生ajax提交請求,這裡我們不發送數據,所以send中的參數為null。代碼裡面都有註釋,這裡不做過多解釋。

既然提交了請求,那麼我們必須編寫伺服器端代碼來處理ajax請求。接下來servlet就登場了。

(4)編寫Servlet文件

   

 1 package com.servlet;
 2 
 3 import java.io.IOException;
 4 
 5 import javax.servlet.ServletException;
 6 import javax.servlet.http.HttpServlet;
 7 import javax.servlet.http.HttpServletRequest;
 8 import javax.servlet.http.HttpServletResponse;
 9 
10 public class AjaxServlet2 extends HttpServlet {
11 
12     protected void doGet(HttpServletRequest request, HttpServletResponse response)
13             throws ServletException, IOException {
14 
15         // 設置發送到客戶端的響應的內容類型為html,編碼方式為UTF-8
16         response.setContentType("text/html;charset=UTF-8");
17         // 返回內容
18         response.getWriter().write("我想你了!");// 返回一個普通字元串
19     }
20 
21     protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
22         this.doGet(req, resp);
23     }
24 }

此時servlet處理Ajax請求非常簡單,因為不需要接受數據,所以只返回普通文本就行了。註意response.getWriter()返回的是PrintWriter,這是一個列印輸出流。調用其write方法輸出文本內容。接下來我們再web.xml配置servlet。

 

(5)web.xml配置Servlet

   為什麼要在web.xml中配置Servlet呢?因為當我們在瀏覽器輸入url地址時,發送請求給tomcat容器,tomcat必須要載入相對應servlet,並調用Servlet去處理請求,所以必須要在web.xml中配置servlet。如果不配置的話,就會找不到相應的Servlet來處理。

   

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
 3   <display-name>AjaxDemo</display-name>
 4   <welcome-file-list>
 5     <welcome-file>index.html</welcome-file>
 6     <welcome-file>index.htm</welcome-file>
 7     <welcome-file>index.jsp</welcome-file>
 8     <welcome-file>default.html</welcome-file>
 9     <welcome-file>default.htm</welcome-file>
10     <welcome-file>default.jsp</welcome-file>
11   </welcome-file-list>
12   
13   
14   <servlet>
15       <servlet-name>AjaxServlet</servlet-name>
16       
17       <servlet-class>com.servlet.AjaxServlet</servlet-class>
18   </servlet>
19   
20   <servlet>
21       <servlet-name>AjaxServlet1</servlet-name>
22       
23       <servlet-class>com.servlet.AjaxServlet1</servlet-class>
24   </servlet>
25   
26    
27    <servlet>
28       <servlet-name>AjaxServlet2</servlet-name>
29       
30       <servlet-class>com.servlet.AjaxServlet2</servlet-class>
31   </servlet>
32   
33   
34   
35   
36   
37   
38   <servlet-mapping>
39       
40       <servlet-name>AjaxServlet</servlet-name>
41       <url-pattern>/AjaxServlet</url-pattern>
42       
43   </servlet-mapping>
44   
45   
46   <servlet-mapping>
47       
48       <servlet-name>AjaxServlet1</servlet-name>
49       <url-pattern>/AjaxServlet1</url-pattern>
50       
51   </servlet-mapping>
52   
53   
54   <servlet-mapping>
55       
56       <servlet-name>AjaxServlet2</servlet-name>
57       <url-pattern>/AjaxServlet2</url-pattern>
58       
59   </servlet-mapping>
60     
61 </web-app>

 

我們看到AjaxServlet2配置好了。說明一下。配置servlet有2個標簽。第一個是<servlet></servlet>這裡面我們配置的是servlet名稱和全類路徑。第二個

<servlet-mapping></servlet-mapping>配置的是servlet名稱(和第一個標簽的servlet名稱保持一致)和映射路徑。這裡我使用斜杠/加上自己的路徑。

我們註意到<welcome-file-list>標簽配置有一個index.jsp文件,相當於是一個歡迎頁面。到時我們寫url請求地址時就不用寫文件名字了。(方便)

下來我們跑一下程式。

 

(5)運行程式

   啟動tomcat,在谷歌瀏覽器地址欄上輸入請求地址url:localhost/AjaxDemo/ 

   好了,ok。點擊按鈕(不發送數據)運行就行了。效果展示圖:

   

註意:一般請求地址為localhost:埠號/項目名/jsp文件名。localhost意為本地主機,就是這台電腦。tomcat的預設埠號為8080,我把tomcat的埠號改為了80,而80埠號是HTTP協議的預設埠號。所以我可以省略掉80埠號。其實在你輸入網站的時候其實瀏覽器(非IE)已經幫你輸入協議了。後面的jsp文件名我也省了,因為得益於上面標簽<welcme-file-list>的配置。哈哈。方便了好多。同理。我們可以實現其他實例。

 

4.2 Servlet處理原生Ajax請求(發送key/value數據,返回普通文本)

(1)編寫jsp文件

   上面有index.jsp代碼,看第一個按鈕就行了。同理。

(2)編寫js文件

   上面有index文件,看第一個函數fun1()就行了。註釋都有。註意key/value的格式為data="username=wly&password=1314520"。多個鍵值對可以用&來連接,然後再使用send(data)方法進行發送數據。

 (3)編寫Servlet文件

   

 1 package com.servlet;
 2 
 3 import java.io.IOException;
 4 
 5 import javax.servlet.ServletException;
 6 import javax.servlet.http.HttpServlet;
 7 import javax.servlet.http.HttpServletRequest;
 8 import javax.servlet.http.HttpServletResponse;
 9 
10 public class AjaxServlet extends HttpServlet {
11 
12     protected void doGet(HttpServletRequest request, HttpServletResponse response)
13             throws ServletException, IOException {
14 
15         response.setContentType("text/html;charset=UTF-8");
16         String username = request.getParameter("username");  //獲取username的內容
17         String password = request.getParameter("password");   //獲取password的內容
18         System.out.println(username + " " + password);
19         response.getWriter().write("haha " + "username: " + username + " password: " + password);  //連接一個普通字元串返回
20 
21     }
22 
23     protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
24         this.doGet(req, resp);
25     }
26 }

此時servlet要做的事情,接受前臺傳來的數據和返回內容。獲取前臺傳來的內容,使用request.getParameter(String paramString)方法。可以根據參數的名稱獲取相應的內容。這個方法非常重要。獲取到了以後,我們只返回一個普通文本字元串即可。

(4)web.xml配置servlet

   同理。上面web.xml已經配置好了。配置的是AjaxServlet。這裡不做過多解釋。

(5)運行程式

   啟動tomcat,在谷歌瀏覽器地址欄上輸入請求地址url:localhost/AjaxDemo/ 

   好了,ok。點擊第一個按鈕運行就行了。效果展示圖:

   

 

4.3 Servlet處理原生Ajax請求(發送json數據,返回json數據)

(1)Json

      JSON(JavaScript Object Notation, JS 對象簡譜) 是一種輕量級的數據交換格式。對於Ajax應用程式來說,json比xml更快更易使用。人類易於閱讀和書寫。機器很容易解析和生成。它基於JavaScript編程語言(標準ECMA-262第三版-1999年12月)的子集。JSON是一種文本格式,它完全獨立於語言。這些屬性使JSON成為理想的數據交換語言。項目中常用的Json類庫:Gson(谷歌公司研發),FastJson(阿裡巴巴研發),Jackson(簡單易用,依賴包少),Json-lib(使用廣泛,依賴包較多)。

(2)導入jar包

      因為涉及到json數據格式的處理,所以我們必須導入json相關的包以及依賴包進行處理。我們使用應用比較廣泛的Json-lib類庫。上面項目結構裡面有7個jar包(lib下麵)。可以發現上面json-lib庫的核心jar包是json-lib-2.4-jdk15.jar,其他幾個都是依賴包。Json-lib是一個Java類庫,用於將bean,集合,java數組和XML轉換為JSON,然後再次轉換為bean和DynaBeans(動態bean)。

(3)新建實體類(User)

   因為涉及到將json對象轉化為java對象,將java對象轉化為json對象。所以要建立User對象,有2個屬性,username和password。並提供setter和getter方法,還有toString()方法。

   

package com.entity;

public class User {

    private String username;

    private String password;

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    @Override
    public String toString() {
        return "User [username=" + username + ", password=" + password + "]";
    }

}

 

(4)編寫jsp文件

   同理。看第二個按鈕即可。

(5)編寫js文件

   同理。上面index.js文件中的fun2()函數。這裡做一下解釋。註意json的數據格式var user={"username":"wly", "password":1314521}。這裡我們把數據value值直接寫了。(為了方便)。實際開發中我們應該獲取頁面的username的value值。password的value值。可以使用 document.getElementById("id").value來獲取頁面數據。還要註意有2個方法。觀察fun2()。我們發現發送的時候,做了一下處理,使用的是JSON.stringify(user)。這個函數的作用主要是將javascript對象轉化為json字元串,因為定義的user是一個var類型,它是一個javascript對象,只是內容定義的是符合json數解析為javascript對象據規範的格式。所以才可以轉化。轉化為json字元串才可以發送。在把參數傳入send()方法裡面進行發送。同理。還有一個方法JSON.parse(返回的json字元串),它的作用是將返回的json字元解析為javascript對象,然後再進行前臺頁面數據的顯示。

(6)編寫servlet文件

   第一步,先編寫一個json的工具類,用來接受前臺傳來的json字元串,並把json字元串轉化為json對象。

   

 1 package com.util;
 2 
 3 import java.io.BufferedReader;
 4 import java.io.IOException;
 5 import java.io.InputStreamReader;
 6 import java.io.UnsupportedEncodingException;
 7 
 8 import javax.servlet.http.HttpServletRequest;
 9 
10 import net.sf.json.JSONObject;
11 
12 public class JsonReader {
13 
14     public static JSONObject receivePost(HttpServletRequest request) throws UnsupportedEncodingException, IOException {
15 
16         // 讀取請求內容
17         BufferedReader br = new BufferedReader(new InputStreamReader(request.getInputStream(), "UTF-8"));
18 
19         String line = null;
20         StringBuilder sb = new StringBuilder();
21 
22         while ((line = br.readLine()) != null) {
23             sb.append(line);
24         }
25 
26         // 將json字元串轉化為json對象
27         JSONObject json = JSONObject.fromObject(sb.toString());
28         return json;
29     }
30 
31 }

第二步,編寫servlet類。

 

 1 package com.servlet;
 2 
 3 import java.io.IOException;
 4 
 5 import javax.servlet.ServletException;
 6 import javax.servlet.http.HttpServlet;
 7 import javax.servlet.http.HttpServletRequest;
 8 import javax.servlet.http.HttpServletResponse;
 9 
10 import com.entity.User;
11 import com.util.JsonReader;
12 
13 import net.sf.json.JSONObject;
14 
15 public class AjaxServlet1 extends HttpServlet {
16 
17     protected void doGet(HttpServletRequest request, HttpServletResponse response)
18             throws ServletException, IOException {
19 
20         // response.setContentType("text/html;charset=UTF-8");
21 
22         response.setContentType("application/json;charset=UTF-8");  //設置響應的內容類型和編碼
23         JSONObject json = JsonReader.receivePost(request);
24         System.out.println(json);
25 
26         // 將json對象轉化為java對象
27         User user = (User) JSONObject.toBean(json, User.class);
28 
29         JSONObject result = new JSONObject();
30 
31         // 將user對象轉化為json對象,保存user
32         result.put("user", JSONObject.fromObject(user));
33         result.put("message", "返回成功");
34         response.getWriter().print(result);
35     }
36 
37     protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
38         this.doGet(req, resp);
39     }
40 }

 

BufferedReader可以用來讀取文件或者接收來自鍵盤(控制台)的信息。它比Scanner更加快捷,能夠大幅度縮短程式運

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

-Advertisement-
Play Games
更多相關文章
  • 事件對象相容 window.event只能在IE下運行,而不能在Firefox下運行,這是因為Firefox的event只能在事件發生的現場使用。Firefox必須從源處加入event作參數傳遞。IE忽略該參數,用window.event來讀取該event。 解決的方法: event = event ...
  • 場景 Nginx簡介 Nginx ("engine x")是一個高性能的 HTTP 和反向代理伺服器 特點是占有記憶體少,併發能力強,事實上 nginx 的併發能力確實在同類型的網頁伺服器中表現較好,中國大陸使用 nginx網站用戶有:百度、京東、新浪、網易、騰訊、淘寶等。 Nginx可以作為靜態頁面 ...
  • 大數據的發展歷史 3V:volume、velocity、variety(結構化和非結構化數據)、value(價值密度低) 大數據帶來的技術挑戰 存儲容量不斷增加 獲取有價值的信息的難度:搜索、廣告、推薦 大容量、多類型、高時效的數據處理場景,使得從數據中獲取有價值的信息變得非常困難 hadoop理論 ...
  • 集合: 集合就是一個容器,他可以存儲對象,我們說集合就是一個可變的數組 集合框架特點 1、list和set集合同時實現了collection介面 2、set集合存儲唯一,無序的對象。 3、list 存儲的不唯一,有序的對象(順序,按存儲的先後順序) 4、map介面存儲的方式:鍵值對進行存儲,鍵是唯一 ...
  • CDN概念 CDN全稱叫做“Content Delivery Network”,中文叫內容分髮網絡。 原理分析 我們知道,當我們使用功能變數名稱訪問某一個網站時,實際上就是將請求包(以Http請求為例)通過網路傳輸給某台伺服器,比如訪問“www.baidu.com”時: 首先解析出該功能變數名稱所對應的IP地址(D ...
  • 理解 首先委派模式不屬於23種設計模式。 所謂委派,個人理解是:將為達到最終結果的事情交給其他人或中間人來乾,我只要最終結果,其他的事情,由我委派的人來安排。 更直白的表達就是,比如,我們想要蓋一棟樓房,蓋完之後我要刷漆,這些事情我自己肯定不能做,所以我這時候就會去找一個“包工頭”來幫我完成這件事情 ...
  • "曦曦粉絲會視頻鏈接" : https://v.qq.com/x/page/o3010zxz73y.html 周末閑看微信時,看到了上面這個視頻,一個 4 歲的小孩,面對一群大人提出的人問題,回答得頭頭是道,燃起了我的好奇心:一個還沒上學的小孩竟然知道這麼多東西,是怎麼學會的?而且看起來小孩看起來很 ...
  • 用戶認證 auth模塊 django.contrib.auth中提供了許多方法,這裡主要介紹其中的三個: 1.1 、authenticate() 提供了用戶認證,即驗證用戶名以及密碼是否正確,一般需要username password兩個關鍵字參數 如果認證信息有效,會返回一個 User 對象。au ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...