天天看點

javaweb

目錄

JSONMybatis

花卉管理系統

什麼是mybatis

普通環境搭建

搭建優化

三種查詢方式

參數傳遞

增删改操作(基于sqlSession)

Mapper代理實作增删改查

多參傳遞

動态SQL

多表查詢

resultType與resultMap的使用場景

Mybatis中的緩存

ThreadLocal

Mybaties注解支援

JSP

釋出項目到伺服器并通路

統計網站通路人數

jsp标簽

Jsp模拟登陸

Servlet

可以用做動态網頁開發

Servlet進行流程控制

生命周期

類加載的時機

API

參數讀取

中文亂碼問題

請求和響應

HttpServletRequest類

Base标簽作用

web中的/

HttpServletResponse 類

請求重定向

Listener監聽器

EL表達式

概念

EL 表達式搜尋域資料的順序

Empty

三元表達式

. 與 [ ] 運算

11個隐含對象

檔案的上傳和下載下傳

檔案的上傳介紹(重點)

commons-fileupload.jar常用API說明

Cookie免使用者名登入

Session

什麼是session

Session的建立和擷取

Session域對象的存取

Session生命周期控制

浏覽器和Session之間的技術内幕

Filter

什麼是過濾器

Filter的初體驗

Filter 的生命周期

FilterCongif類

FilterChain 過濾器鍊

Filter的攔截路徑

JSONJSON在JavaScript中的使用

JSON在java中的使用

AJAX請求

<code>目前需要建立的包</code>

dao dao.impl entity 存放實體 test 測試 util 工具

在實體類中,通常需要 實作 <code>序列化接口</code>

mybatis是一個半自動<code>ORM</code>架構

半自動:mybatis需要我們自己手寫sql語句

<code>注意:</code> &amp; 在xml中不能識别, 需要寫成 <code>&amp;amp;</code>

步驟

導包 書寫配置檔案 mybatis.xml 配置 Mapper.xml

<code>配置檔案mybatis.xml</code>

``Mapper.xml`

<code>namespace規範參考</code>

cn.cqie.mapper.FlowerMapper

<code>配置别名</code>

在mybatis.xml中

屬性的名稱配置

<code>jdbc.properties</code>

<code>引入properties後的 value 變化</code>

settings開啟log4j的支援

這裡隻弄了兩種常用的

傳入單個參數

傳入對象

<code>#{id} #{name} 這裡底層調用的 get方法</code>

傳入map

insert

注意:mybatis預設不送出事務 ,需要我們自行送出

<code>兩種方式設定送出</code>:

手動送出:在執行增加後,寫 sqlSession.commit();

自動送出:SqlSession sqlSession = factory.openSession (true); 把true寫進去

<code>傳回值類型可以省略</code> test

delete

mapper

<code>這個param1可以寫成 args0, 建議寫 param1</code> test

update

test

sqlSession進行增删改查的缺點:

無法實作多參傳遞

書寫的時候無接口,後期的維護就比較低

步驟:

在mapper包中編寫接口,與xml檔案

在mapper中的對應xml檔案中關聯接口,namespace="接口的路徑" <code>直接copy reference</code>

mybatis.xml中掃描mapper中的對應xml文檔

在mapper中對應xml檔案中編寫代碼

編寫test檔案

<code>注意:</code>mapper中對應xml檔案中的 id 應與 mapper 中接口的方法名對應(方法名要一樣)

select,delete,update與insert類似

傳的都是值,以select為例

<code>注意:</code>在xml中寫sql語句時,select 的 一定要寫傳回類型

傳的兩個對象,以select為例

mybatis.xml文檔的小優化

@Param方式

Flower selectOne2(@Param("uu") int id,@Param("yy") String name); sql語句中: #{uu} #{yy}
目前學習的内容sql語句都是直接寫死的,但是在實際的開發過程中很多的sql語句都是根據不同的業務情況進行不同的改變的。 為了解決這個問題,就用sql語句的動态拼接

學習的标簽:

<code>if</code> <code>where</code> when <code>set</code> trim <code>foreach</code> <code>bind</code> include sql

if标簽

相當于 if() {}

when标簽

相當于 if(){} else if(){}

Where标簽的作用:會自動的增加where關鍵字,并且會把多餘的第一個and去掉

foreach

另外一個動态 SQL 通用的必要操作是疊代一個集合, 通常是建構在 IN 條件中的。

<code>eg</code>

<code>其餘功能參考說明文檔</code>

bind

bind 就是在like後 ,通常在模糊查詢中用
還有種方式 就是用 $符号 (會有sql注入風險)

sql include

sql定義公共的SQL代碼片段 include 處就是替換原有的

業務代碼查詢A

就是先查詢出所有的學生資訊,然後根據學生資訊查詢班級資訊。

業務代碼查詢B

類似于A

N+1方式查詢

什麼是N+1的查詢方式? 如果沒有N+1的方式我們想要實作多表的查詢,自己書寫查詢的業務邏輯代碼(java) mybatis希望通過自己标簽配置的方式來解決這個問題 [2]執行的操作 ​ 查詢學生所在班級的資訊(一對一) ​ 查詢班級中所有學生的資訊(一對多) 使用的時候書寫标簽需要注意: 查詢出來傳回的是一個對象:association 查詢出來傳回的是一個集合:collection 總結: 業務裝配方式和N+1查詢方式 ​ 共同點:執行SQL語句的條數上都是N+1條語句 ​ 不同點: ​ 業務裝配方式:是我們自己書寫java代碼的方式進行配置的 ​ N+1方式:通過MyBatis标簽配置的方式實作的

查詢學生所在班級的資訊(一對一)

javaweb
javaweb
如果你做的是單表的查詢并且封裝的實體和資料庫的字段一一對應 resultType 如果實體封裝的屬性和資料庫的字段不一緻 resultMap 使用的是多表的聯合查詢 resultMap 使用N+1查詢的時候 resultMap

sqlsession一級緩存

使用SqlSession對象操作資料庫資源時,SqlSession對象會先去其緩存區查找是否有現成的符合要求的資料,如果有則傳回,沒有則按照需求進行資料庫操作擷取符合要求的資源,并将資源傳回給使用者的同時在其緩存中緩存,當我們使用同一個SqlSession對象操作同一個Sql資源時,就可以從緩存中直接擷取資料庫資源資料了
javaweb

factory的緩存(二級緩存)

使用的方法: 在Mybatis.xml中開始二級緩存 在對應的mapper.xml檔案中&lt;cache readOnly="true"&gt; 關閉獲得送出指定的sqlsesson對象
注意 當使用者查詢時,會先在Factory對象自己的緩存中檢視是否有現成的資料,有則直接傳回,沒有則繼續檢視sqlSession中是否有,有則傳回,沒有則去資料庫中擷取資源,将資源傳回的同時在SqlSession的緩存中緩存一份兒,當該SqlSession對象被commit或者close時将其緩存的資料刷入到Factory中。 查詢資料順序 二級--&gt;一級---&gt;資料庫---&gt;把資料儲存到一級,當sqlsession關閉或者送出的時候,把資料刷入到二級緩存中
javaweb
網上查閱

接口中的代碼

注解優缺點

使用注解沒有實作java代碼個sql語句的解耦 進行多表的查詢比較的麻煩 無法實作sql語句的動态拼接

需求說明:

建立Web項目,開發靜态頁面 部署到伺服器Tomcat 啟動伺服器Tomcat 不同使用者通過浏覽器來通路Web項目
javaweb
本地位址:127.0.0.1

JSP = Java Server Pages

Sun公司推出的動态網頁技術,類似的技術還包括ASP、PHP。相對的技術是HTML(靜态網頁技術) 動态生成網頁資料,而不是有動态效果的網頁! JSP是在HTML中嵌入Java腳本代碼 JSP是伺服器端技術(JavaScript是用戶端技術) 由應用伺服器來編譯和執行嵌入的Java腳本代碼,然後将生成的整個頁面資訊傳回給用戶端

JSP本質就是java

jsp檔案

<code>小總結</code>

jsp的本質就是一個servlet(就是類)

在jsp頁面中書寫java代碼的方式

小腳本 &lt;% %&gt;

表達式

聲明式 &lt;%! %&gt;

小腳本和聲明式的差別

小腳本聲明的變量是局部變量,在聲明式中聲明的變量是成員變量

小腳本中不可以定義方法,在聲明式中可以定義方法

小腳本可以使用jsp的内置對象,聲明式中不可以 (比如 out)

注釋

java中的三種注釋

HTML的注釋

jsp注釋 <code>推薦使用:優點:節省網絡的帶寬,可以增快通路的速度</code>

include

&lt;!--動态包含 ---動作辨別 --&gt; &lt;% &lt;jsp:include page="1.jsp"&gt;&lt;/jsp:include&gt; %&gt; &lt;!--靜态包含---指令辨別 --&gt; &lt;%@include file="head.jsp" %&gt;

forward param 使用方式同上

動态包含和靜态包含的差別:

靜态的引入式把代碼原封不動的複制到主檔案中,動态的引入是相當于方法的調用

靜态的引入的方式引入檔案和主檔案中是不可以存在同名的變量 ,動态的引入可以存在

靜态的引入式不會産生class檔案 ,動态的引入式産生class檔案

靜态的引入産生的時機是第一個階段 ,動态的引入式産生産生的時機是第三階段

共同點:

都可以實作網頁的引入

javaweb

<code>login</code>

<code>doLogin</code>

浏覽器端控制的跳轉方式有幾種?

直接輸入URL位址 送出form表單 超連結方式
javaweb

流程

首先寫一個class類 去繼承一個Httpservlet 重寫service方法,注意一定要把super.service()去掉 進行動态網頁的開發--那如何通路這個servlet呢?需要配置 在web.xml中進行配置

<code>MyServlet.java</code>

<code>web.xml</code>

javaweb

<code>DoLogin.java</code>

servlet是一個單執行個體 多線程的程式

​ servlet的生命周期

​ 【1】類加載

​ "com.bjsxt.servlet.LifeServlet"

​ Class clazz= Class.forName("com.bjsxt.servlet.LifeServlet");

​ 【2】執行個體化 (離不開反射)

​ Object obj= clazz.newInstance();

​ 【3】 初始化(離不開反射)

​ 【4】服務請求(service)(離不開反射)

​ 【5】 銷毀操作(離不開反射)

​ 【1】預設的情況是第一次通路servlet的時候進行類加載

​ 【2】0(當啟動伺服器時候加載) 數字越小加載的時機越往前

Servlet接口:所有servlet必須直接或間接實作的類。 init( ServletConfig config ) service(ServletRequest req, ServletResponse res) destroy() getServletInfo():獲得Servlet資訊。 getServletConfig():獲得Servlet配置相關資訊 GenericServlet抽象類:implements Servlet, ServletConfig 定義了一個通用的,不依賴于具體協定的Servlet,給出了除service()方法外的其餘四個方法的實作。 public void init(ServletConfig config) thows SerletExcepiton protected void init() thows SerletExcepiton 第一個是servlet接口的init(),調用第二個init(), 重寫第二個init()即可 HttpServlet類 public void service(ServletRequest req, ServletResponse res) protected void service(HttpServletRequest req, HttpServletResponse res) protected void doGet(request,response) protected void doPost(request,response) public service()是父類的方法,protected service()是自己的方法。前者首先把參數分别轉換為HttpServletRequest和HttpServletResponse ,再調用protected service(); protected service()根據HTTP請求方法的類型調用相應doXXX()方法 我們自己編寫的servlet應該繼承HttpServlet,一般要覆寫Service或者doPost/doGet方法。

設定編碼 UTF-8;

<code>ParamServlet.java</code>

get方式和Post送出方式的差別

get資料的傳輸是不安全的 ,post資料傳遞更加安全

get方式資料傳遞有大小限制 post傳輸資料沒有限制

get傳輸的資料速度比較快 post比較慢

解決post送出亂碼

request.setCharacterEncoding

解決GET方式送出的亂碼

方式1

byte [] bytes = str.getBytes("iso-8859-1");

String cstr = new String(bytes,"utf-8");

方式2

在server.xml中指定對應的伺服器編碼

​ URIEncoding="utf-8"

在JAVAEE 6 以上 支援<code>@WebServlet(/abc)</code>注解

i. getRequestURI() 擷取請求的資源路徑 ii. getRequestURL() 擷取請求的統一資源定位符(絕對路徑) iii. getRemoteHost() 擷取用戶端的ip 位址 iv. getHeader() 擷取請求頭 v. getParameter() 擷取請求的參數 vi. getParameterValues() 擷取請求的參數(多個值的時候使用) vii. getMethod() 擷取請求的方式GET 或POST viii. setAttribute(key, value); 設定域資料 ix. getAttribute(key); 擷取域資料 x. getRequestDispatcher() 擷取請求轉發對象

<code>ServletAPI.java</code>

javaweb
javaweb

<code>c.html</code>

<code>index</code>

/ 斜杠 如果被浏覽器解析,得到的位址是: http://ip:port

/ 斜杠 如果被伺服器解析,得到的位址是:http://ip:port/工程路徑

​ 1、/servlet1

​ 2、servletContext.getRealPath(“/”);

​ 3、request.getRequestDispatcher(“/”);

特殊情況: response.sendRediect(“/”); 把斜杠發送給浏覽器解析。得到http://ip:port/

HttpServletResponse 類和HttpServletRequest 類一樣。每次請求進來,Tomcat 伺服器都會建立一個Response 對象傳 遞給Servlet 程式去使用。HttpServletRequest 表示請求過來的資訊,HttpServletResponse 表示所有響應的資訊, 我們如果需要設定傳回給用戶端的資訊,都可以通過HttpServletResponse 對象來進行設定

兩個輸出流的說明

位元組流 getOutputStream(); 常用于下載下傳(傳遞二級制資料) 字元流 getWriter(); 常用于回傳字元串(常用)

兩個流同時隻能使用一個。

往用戶端回傳資料

解決亂碼問題

resp.setContentType("text/html;charset=UTF-8");

<code>注意:</code>這個要放在擷取流對象之前。 這個同時設定伺服器和用戶端都使用UTF-8字元集,還設定了響應頭

javaweb
請求重定向的第一種方案: // 設定響應狀态碼302 ,表示重定向,(已搬遷) resp.setStatus(302); // 設定響應頭,說明新的位址在哪裡 resp.setHeader("Location", "http://localhost:8080"); 請求重定向的第二種方案(推薦使用): resp.sendRedirect("http://localhost:8080");
1、Listener 監聽器它是JavaWeb 的三大元件之一。JavaWeb 的三大元件分别是:Servlet 程式、Filter 過濾器、Listener 監 聽器。 2、Listener 它是JavaEE 的規範,就是接口 3、監聽器的作用是,監聽某種事物的變化。然後通過回調函數,回報給客戶(程式)去做一些相應的處理

<code>MyServletListenerContextLisenerIMPL .java</code>

什麼是EL表達式,EL表達式的作用?

EL 表達式的全稱是:Expression Language 是表達式語言 EL表達式的作用:EL表達式主要是代替jsp頁面中的表達式腳本在jsp頁面中進行輸出。 因為EL表達式在輸出資料的時候,要比jsp的表達式腳本簡潔很多

<code>index.jsp</code>

javaweb

EL表達式的格式: <code>${表達式}</code>

EL表達式在輸出null值時,輸出的是空串,jsp表達式輸出的是null

EL表達式主要是在jsp頁面中輸出資料

主要是輸出域對象中的資料

當四個域中都有相同的key的資料的時候,EL表達式會按照四個域的從小到大的順序去進行搜尋,找到就輸出

empty 運算可以判斷一個資料是否為空,如果為空,則輸出true,不為空輸出false。 以下幾種情況為空: 1、值為null 值的時候,為空 2、值為空串的時候,為空 3、值是Object 類型數組,長度為零的時候 4、list 集合,元素個數為零 5、map 集合,元素個數為零

表達式1?表達式2:表達式3

如果表達式1 的值為真,傳回表達式2 的值,如果表達式1 的值為假,傳回表達式3 的值。

.點運算,可以輸出Bean 對象中某個屬性的值。 []中括号運算,可以輸出有序集合中某個元素的值。 并且[]中括号運算,還可以輸出map 集合中key 裡含有特殊字元的key 的值。
EL 個達式中11 個隐含對象,是EL 表達式中自己定義的,可以直接使用。 變量 類型 作用 pageContext PageContextImpl 它可以擷取jsp 中的九大内置對象 pageScope Map&lt;String,Object&gt; 它可以擷取pageContext 域中的資料 requestScope Map&lt;String,Object&gt; 它可以擷取Request 域中的資料 sessionScope Map&lt;String,Object&gt; 它可以擷取Session 域中的資料 applicationScope Map&lt;String,Object&gt; 它可以擷取ServletContext 域中的資料 param Map&lt;String,String&gt; 它可以擷取請求參數的值 paramValues Map&lt;String,String[]&gt; 它也可以擷取請求參數的值,擷取多個值的時候使用。 header Map&lt;String,String&gt; 它可以擷取請求頭的資訊 headerValues Map&lt;String,String[]&gt; 它可以擷取請求頭的資訊,它可以擷取多個值的情況 cookie Map&lt;String,Cookie&gt; 它可以擷取目前請求的Cookie 資訊 initParam Map&lt;String,String&gt; 它可以擷取在web.xml 中配置的上下文參數
pageScope ====== pageContext 域 requestScope ====== Request 域 sessionScope ====== Session 域 applicationScope ====== ServletContext 域
javaweb

檔案的上傳和下載下傳,是非常常見的功能。很多的系統中,或者軟體中都經常使用檔案的上傳和下載下傳。

比如:QQ 頭像,就使用了上傳。

郵箱中也有附件的上傳和下載下傳功能。

OA 系統中審批有附件材料的上傳。

要有一個form 标簽,method=post 請求 form 标簽的encType 屬性值必須為multipart/form-data 值 在form 标簽中使用input type=file 添加上傳的檔案 編寫伺服器代碼(Servlet 程式)接收,處理上傳的資料。

encType=multipart/form-data 表示送出的資料,以多段(每一個表單項一個資料段)的形式進行拼

接,然後以二進制流的形式發送給伺服器

<code>uploaded.jsp</code>

<code>ServletUpload.java</code>

commons-fileupload.jar 需要依賴commons-io.jar 這個包,是以兩個包我們都要引入。

commons-fileupload.jar 和commons-io.jar 包中,我們常用的類有哪些?

作用

ServletFileUpload

用于解析上傳的資料

FileItem

表示每一個表單項

boolean ServletFileUpload.isMultipartContent(HttpServletRequest request)

判斷目前上傳的資料格式是否是多段的格式

public List parseRequest(HttpServletRequest request)

解析上傳資料

boolean FileItem.isFormField()

判斷目前這個表單項,是否是普通的表單項。還是上傳的檔案類型。

true 表示普通類型的表單項

false 表示上傳的檔案類型

String FileItem.getFieldName()

擷取表單項的name 屬性值

String FileItem.getString()

擷取目前表單項的值

String FileItem.getName()

擷取上傳的檔案名

void FileItem.write( file )

将上傳的檔案寫到參數file 所指向抽硬碟位置

<code>login.jsp</code>

一個接口(HttpSession)

是會話

request.getSession()

​ 第一次調用是:建立session 會話

​ 之調用都是:擷取前面建立好的Session會話對象

isNew() 判斷是不是剛建立出來的(新的)

​ true: 表示剛建立

​ false:擷取之前的建立

每一個會話都有一個身份證号碼。也就是ID值,ID值是惟一的。

getId() 得到session的id 值

<code>SessionServlet.java</code>

public void setMaxInactiveInterval(int interval) 設定Session 的逾時時間(以秒為機關),超過指定的時長,Session

就會被銷毀。

值為正數的時候,設定Session 的逾時時長。

負數表示永不逾時(極少使用)

public int getMaxInactiveInterval() 擷取Session 的逾時時間

public void invalidate() 讓目前Session 會話馬上逾時無效。

Session 預設的逾時時長是多少!

Session 預設的逾時時間長為30 分鐘。

因為在Tomcat 伺服器的配置檔案web.xml 中預設有以下的配置,它就表示配 置了目前Tomcat 伺服器下所有的Session

逾時配置預設時長為:30 分鐘。

如果說。你希望你的web 工程,預設的Session 的逾時時長為其他時長。你可以在你自己的web.xml 配置檔案中做

以上相同的配置。就可以修改你的web 工程所有Seession 的預設逾時時長。

<code>Session銷毀</code>

Session 技術,底層其實是基于Cookie 技術來實作的。

javaweb

1、Filter 過濾器它是 JavaWeb 的三大元件之一。三大元件分别是:Servlet 程式、Listener 監聽器、Filter 過濾器

2、Filter 過濾器它是 JavaEE 的規範。也就是接口

3、Filter 過濾器它的作用是:攔截請求,過濾響應。

攔截請求常見的應用場景有:

1、權限檢查

2、日記操作

3、事務管理

​ ……等等

要求:要求:在你的 web 工程下,有一個 admin 目錄。這個 admin 目錄下的所有資源(html 頁面、jpg 圖檔、jsp 檔案、等等)都必

​ 須是使用者登入之後才允許通路。

思考:根據之前我們學過内容。我們知道,使用者登入之後都會把使用者登入的資訊儲存到 Session 域中。是以要檢查使用者是否

登入,可以判斷 Session 中否包含有使用者登入的資訊即可!!!

Filter的工作流程

javaweb

<code>AdminFilter.java</code>

Filter 過濾器的使用步驟:

1、編寫一個類去實作 Filter 接口

2、實作過濾方法 doFilter()

3、到 web.xml 中去配置 Filter 的攔截路徑

完善的使用者登入

<code>LoginServlet.java</code>

Filter 的生命周期包含幾個方法

​ 1、構造器方法

​ 2、init 初始化方法

​ 第 1,2 步,在 web 工程啟動的時候執行(Filter 已經建立)

​ 3、doFilter 過濾方法

​ 第 3 步,每次攔截到請求,就會執行

​ 4、destroy 銷毀

​ 第 4 步,停止 web 工程的時候,就會執行(停止 web 工程,會銷毀 Filter 過濾器)

FilterConfig 類見名知義,它是 Filter 過濾器的配置檔案類。

Tomcat 每次建立 Filter 的時候,也會同時建立一個 FilterConfig 類,這裡包含了 Filter 配置檔案的配置資訊。

FilterConfig 類的作用是擷取 filter 過濾器的配置内容

​ 1、擷取 Filter 的名稱 filter-name 的内容

​ 2、擷取在 Filter 中配置的 init-param 初始化參數

​ 3、擷取 ServletContext 對象

<code>java代碼</code>

注意: 的位置
javaweb

精确比對:

​ &lt;url-pattern&gt;/target.jsp&lt;/url-pattern&gt;

​ 以上配置的路徑,表示請求位址必須為:http://ip:port/工程路徑/target.jsp

目錄比對:

​ &lt;url-pattern&gt;/admin/*&lt;/url-pattern&gt;

​ 以上配置的路徑,表示請求位址必須為:http://ip:port/工程路徑/admin/*

字尾名比對:

​ &lt;url-pattern&gt;*.html&lt;/url-pattern&gt;

​ 以上配置的路徑,表示請求位址必須以.html 結尾才會攔截到

​ &lt;url-pattern&gt;*.do&lt;/url-pattern&gt;

​ 以上配置的路徑,表示請求位址必須以.do 結尾才會攔截到

​ &lt;url-pattern&gt;*.action&lt;/url-pattern&gt;

​ 以上配置的路徑,表示請求位址必須以.action 結尾才會攔截到

​ Filter 過濾器它隻關心請求的位址是否比對,不關心請求的資源是否存在!!!

JSON (JavaScript Object Notation) 是一種輕量級的資料交換格式。易于人閱讀和編寫。同時也易于機器解析和生成。JSON

采用完全獨立于語言的文本格式,而且很多語言都提供了對 json 的支援(包括 C, C++, C#, Java, JavaScript, Perl, Python

等)。 這樣就使得 JSON 成為理想的資料交換格式。

json 是一種輕量級的資料交換格式。

輕量級指的是跟 xml 做比較。

資料交換指的是用戶端和伺服器之間業務資料的傳遞格式

json定義:json 是由鍵值對組成,并且由花括号包圍,每個鍵由引号引起來,鍵和值之間使用冒号進行分隔,多組鍵值對之間用逗号進行分隔。

JSON的兩個常用方法:

JSON的存在有兩種形式。

對象的形式存在,叫做json對象

字元串的形式存在,叫做json字元串

一般我們要操作JSON中的資料的時候,需要JSON對象的格式。

一般我們要在用戶端和伺服器之間進行資料交換的時候,使用JSON字元串

JSON.stringify() 把JSON對象轉換成json字元串

JSON.parse() 把JSON字元串轉換成JSON對象

<code>JsonTest.java</code>

AJAX 即“Asynchronous Javascript And XML”(異步 JavaScript 和 XML),是指一種建立互動式網頁應用的網頁開發

技術。

ajax 是一種浏覽器通過 js 異步發起請求,局部更新頁面的技術。

Ajax 請求的局部更新,浏覽器位址欄不會發生變化

局部更新不會舍棄原來頁面的内容

本文來自部落格園,作者:chn-tiancx,轉載請注明原文連結:https://www.cnblogs.com/tiancx/p/15359127.html