事務是一系列的操作,當所有的步驟像一個操作一樣被完整地執行,我們稱該事務被提交。由于其中的一部分或多步執行失敗,導致沒有步驟被提交,則事務必須回滾到最初的系統狀態。增刪改,為什么將setAutoCommit設置為false
因為要在service層處理事務
servleit 字符集 提取表單信息
resp.setContentType
req.setCharacterEncoding("utf-8");
req.getparameter 從前臺獲取數據
req.setAttribute在服務器端保存值目的是把數據傳到頁面
Web層的數據共享,四個作用域(Scope)
- PageContext-----------page 保存的數據當前頁面有效
- HttpServletRequest--------request 請求
- HttpSession------------------session 關閉瀏覽器數據失效
- ServletContext--------------application 關閉服務器數據失效
jsp的內置對象:request out session application response page pageContext config exception
請求轉發與重定向的區別:
- 轉發是一次請求而重定向是兩次請求
- 只能轉主站內的資源而重定向可以定向任意資源
- 如果是請求方,那么URL是第一次轉發時候的地址
而重定向會直接定向到最終的目標資源
//資源的跳轉(請求轉發:從A資源跳轉到B資源,客戶向服務器發送了一次請求)
//轉發
// RequestDispatcher rd=req.getRequestDispatcher("/aa");
// rd.forward(req, resp);
//重定向
resp.sendRedirect("/Java3DemoWebProject/aa");
提取客戶端表單信息:req.getParameter
修改字符集:req.setCharacterEncoding
resp.setContentType("text/html;charset=utf-8");
req.setCharacterEncoding("utf-8");
PrintWriter out=resp.getWriter();
String name=req.getParameter("name");//獲取表單參數
JavaWeb基礎
- Web項目的結構(基于請求和響應的)
<v:shapetype id="_x0000_t75" coordsize="21600,21600" o:spt="75" o:preferrelative="t" path="m@4@5l@4@11@9@11@9@5xe" filled="f" stroked="f"><v:stroke joinstyle="miter"><v:formulas></v:formulas><v:path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect"></v:path></v:stroke></v:shapetype><v:shape id="_x0000_i1043" type="#_x0000_t75" style="width:257.25pt;
height:121.5pt;visibility:visible;mso-wrap-style:square"><v:imagedata src="file:///C:\Users\ADMINI~1\AppData\Local\Temp\msohtmlclip1\01\clip_image001.png" o:title=""></v:imagedata></v:shape>
- 基本的概念:Http(無狀態連接協議) URL Web服務器(tomcat) 三層結構(MVC)
組件(可重用的) JavaEE(它是一個標準:jdbc jsp servlet) C/S與B/S Web容器(服務器就是一個web容器)
3.常見的服務端語言:PHP JSP Python C# JavaScript(Nodejs)
4.下載并安裝一個web應用服務器:Tomcat
目錄結構:
<v:shape id="_x0000_i1042" type="#_x0000_t75" style="width:63.75pt;height:127.5pt;
visibility:visible;mso-wrap-style:square"><v:imagedata src="file:///C:\Users\ADMINI~1\AppData\Local\Temp\msohtmlclip1\01\clip_image002.png" o:title=""></v:imagedata></v:shape>
Bin:存放了一些可執行文件(.bat) startup.bat啟動服務器
Shutdown.bat停止服務器
Conf:存放了一些配制文件server.xml(核心)
<Connector connectionTimeout="20000" port="8089" protocol="HTTP/1.1" redirectPort="8443"/>
Lib:web開發所需要的類庫
Log:服務器的日志信息
Webapps:所有的web項目都會發布到此文件夾中
5. 還需要配制環境變量
<v:shape id="_x0000_i1041" type="#_x0000_t75" style="width:192.75pt;height:257.25pt;
visibility:visible;mso-wrap-style:square"><v:imagedata src="file:///C:\Users\ADMINI~1\AppData\Local\Temp\msohtmlclip1\01\clip_image003.png" o:title=""></v:imagedata></v:shape>
6.要將tomcat與eclipse整合
<v:shape id="_x0000_i1040" type="#_x0000_t75" style="width:240.75pt;height:186.75pt;
visibility:visible;mso-wrap-style:square"><v:imagedata src="file:///C:\Users\ADMINI~1\AppData\Local\Temp\msohtmlclip1\01\clip_image004.png" o:title=""></v:imagedata></v:shape>
創建Web項目幾種:
創建一個普通的JavaWeb項目
利用Maven創建一個JavaWeb項目
7.web項目的結構
<v:shape id="_x0000_i1039" type="#_x0000_t75" style="width:141pt;height:162.75pt;
visibility:visible;mso-wrap-style:square"><v:imagedata src="file:///C:\Users\ADMINI~1\AppData\Local\Temp\msohtmlclip1\01\clip_image005.png" o:title=""></v:imagedata></v:shape>
WebContent:可以存放靜態資源(html,css,js,img)
每個web項目中核心的配制文件:web.xml
注意:WEB-INF下面資源對用戶是不可見的
8.什么是Servlet(控制器controller):服務器端的小應用程序。作用:可以處理客戶端的請求,可以進行資源跳轉。
如何創建一個servlet程序
當前類要繼承HttpServlet
doGet
(
HttpServletRequestreq,
HttpServletResponseresp)
3.
doPost(
HttpServletRequestreq,
HttpServletResponseresp)
說明:如果客戶端向服務器端發的請求的方式為get,調用
doGet
如果客戶端向服務器端發的請求的方式為post,調用
doPost HttpServletRequest接口,是由web容器對其進行初始化的,作用:可以
封裝請求的數據(參數)
HttpServletResponse接口,作用:向客戶端響應結果(html/img/css)
- 配制web.xml文件
<v:shape id="_x0000_i1038" type="#_x0000_t75" style="width:339.75pt;height:204.75pt;visibility:visible;
mso-wrap-style:square"><v:imagedata src="file:///C:\Users\ADMINI~1\AppData\Local\Temp\msohtmlclip1\01\clip_image006.png" o:title=""></v:imagedata></v:shape>
- servlet的生命周期的三個方法地:
init() 初始化 service()響應客戶請求 destroy()銷毀
- HTTPServletRequest的作用 ü 提取客戶端請求信息 ? 提取客戶端表單信息req.getParameter("email"); ? 提取HTTP請求報頭信息 ? cookie ü 修改字符集req.setCharacterEncoding("utf-8"); ü 在服務器端保存值
如果想要在頁面上輸出list中的對象的信息,在Servlet中是非常麻煩的(不建議),推薦JSP(Java Server Page)動態網頁:與數據庫有交互。JSP就是一個簡化的Servlet,所有的Jsp網頁都會由Web容器自動編譯成Servlet最終執行的。
JSP如何創建,里面都寫什么?可以寫Java代碼、HTML、CSS、JavaScript
如何在服務端(Servlet)保存值:
req.setAttribute("list", list);
在Jsp中如何獲取到保存在服務端的list集合?
request.getAttribute("list");
ü WEB資源跳轉 — 請求轉發
兩種跳轉的方式:
- 轉發:客戶端向服務器只發送了一次請求
<v:shape id="_x0000_i1037" type="#_x0000_t75" style="width:263.25pt;height:159.75pt;
visibility:visible;mso-wrap-style:square"><v:imagedata src="file:///C:\Users\ADMINI~1\AppData\Local\Temp\msohtmlclip1\01\clip_image007.png" o:title=""></v:imagedata></v:shape>
- 重定向:發送了兩次請求
請求轉發與重定向的區別:
轉發是一次請求而重定向是兩次請求
只能轉主站內的資源而重定向可以定向任意資源
如果是請求發,那么URL是第一次轉發時候的地址
而重定向會直接定向到最終的目標資源
思考:我們現在做的刪除,修改,顯示所有的留言信息是否需要每一個操作都要對應一個Servlet(不建議),我們可以將以上的這些操作放到一個Servlet中(創建一個ManagerServlet)
如何確定頁面上的某一個操作將會對應Servlet中的某一個方法?我們需要從頁面向后臺傳遞參數!!!
傳遞參數的方式:
- 通過表單傳遞 前臺?name=tom&password=123&
n 后臺request.getParameter(“name”);
n 隱藏域<input type=”hidden” name=”q” value=”123”>
- 通過超鏈接向后臺傳遞參數
n <a href=”/工程名/映射地址?id=?&q=delete”>刪除</a>
<v:shape id="圖片_x0020_2" o:spid="_x0000_i1036" type="#_x0000_t75" style="width:414.75pt;height:229.5pt;visibility:visible;mso-wrap-style:square"><v:imagedata src="file:///C:\Users\ADMINI~1\AppData\Local\Temp\msohtmlclip1\01\clip_image008.png" o:title=""></v:imagedata></v:shape>
HTTPServletResponse的作用 ü 設置響應字符集
resp.setContentType("text/html;charset=utf-8"); ü 向客戶端輸出信息
out.println("添加失敗"); ? 輸出DHTML和數據 ? 輸出二進制文件 ? 輸出Cookie ? 輸出XML( Ajax) ü WEB資源跳轉 — 請求重定向
利用ServletContext可以獲取到web.xml配制文件中的初始化參數。
//ServletConfig可以獲取到初始化的參數(局部的初始化參數)
//<init-param>
// <param-name>pageSize</param-name>
// <param-value>10</param-value>
//</init-param>
//String abc = config.getInitParameter("pageSize");
//如何獲取到全局的初始化參數
// <context-param>
// <param-name>abc</param-name>
// <param-value>123</param-value>
// </context-param>
String abc = config.getServletContext().getInitParameter("abc");
JSP的內置對象
request response session out
application
pageContext page config exception
MVC模式(設計模式):單例(鏈接數據庫的時候) 工廠 代理 動態代理
M:Model模型
V:View 視圖
C:Control 控制器
<v:shape id="圖片_x0020_3" o:spid="_x0000_i1035" type="#_x0000_t75" style="width:365.25pt;
height:204.75pt;visibility:visible;mso-wrap-style:square"><v:imagedata src="file:///C:\Users\ADMINI~1\AppData\Local\Temp\msohtmlclip1\01\clip_image009.png" o:title=""></v:imagedata></v:shape>
MVC的優點 ü 低耦合性(減少層與層之間的依賴關系) ü 高重用性 ü 可維護性
三種JSP指令 1. page
include
taglib (自定義標簽)
在WEB應用中處理亂碼問題
需要設置請求與響應的字符編碼集
Jsp頭的字符編碼集
HTML頁面的字符編碼集
MySql數據庫的字符編碼集
設置服務器器的編碼集server.xml
注意: <a href="<%=path %>/user/manager?id=<%=gb.getId() %>&q=delete&name=張三" class="btn btn-danger">刪除</a>
后臺:String name = req.getParameter(“name”);//此時獲取到的name是亂碼
解決方法:
String username = new String(name.getBytes(“ISO-8859-1”),”utf-8”);
JSP的動作標簽有幾個?
<jsp:useBean> <jsp:getProperty> <jsp:setProperty>
<jsp:forward> <jsp:include>
EL( Expression Language) — 表達式語言 ü 是JSP中一種簡潔的數據訪問語言 ü 簡化JSP的開發 ? 主要功能 ü 通過它可以在JSP網頁中方便地訪問,并輸出: ? 存儲在作用域中的對象及其屬性 ? 訪問請求參數、 cookie和其他請求報文中的信息 ü 簡單的運算:算數、關系、邏輯、條件求值 ? 語法格式 ${expression}
EL中的隱式對象
<%request.setAttribute(“username”,”kitty”)%>
{username}
<%session.setAttribute(“username”,”kitty”)%>
${sessionScope.username}
${initParam.pageSize}
注意:默認情況下是從requestScope獲取數據
JSP 標準標簽庫(JSTL)
JSP標準標簽庫(JSTL)是一個JSP標簽集合,它封裝了JSP應用的通用核心功能。
JSTL支持通用的、結構化的任務,比如迭代,條件判斷,XML文檔操作,國際化標簽,SQL標簽。 除了這些,它還提供了一個框架來使用集成JSTL的自定義標簽。
根據JSTL標簽所提供的功能,可以將其分為5個類別。
· 核心(core)標簽:<c:if> <c:forEach> <c:set> <c:out>
· 格式化標簽
· SQL 標簽
· XML 標簽
· JSTL 函數
JSTL標簽是第三方給我們提供好的庫
https://mvnrepository.com/artifact/javax.servlet/jstl/1.2
<v:shape id="_x0000_i1034" type="#_x0000_t75" style="width:120pt;height:56.25pt;
visibility:visible;mso-wrap-style:square"><v:imagedata src="file:///C:\Users\ADMINI~1\AppData\Local\Temp\msohtmlclip1\01\clip_image010.png" o:title=""></v:imagedata></v:shape>
凡是以xxx.tld結尾的都是標簽文件
如何在Jsp頁面中引用jstl的核心標簽庫
%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %
JSP(servlet) 過濾器:Filter
JSP 和 Servlet 中的過濾器都是 Java 類。
過濾器可以動態地攔截請求和響應,以變換或使用包含在請求或響應中的信息。
可以將一個或多個過濾器附加到一個 Servlet 或一組 Servlet。過濾器也可以附加到 JavaServer Pages (JSP) 文件和 HTML 頁面。
過濾器是可用于 Servlet 編程的 Java 類,可以實現以下目的:
· 在客戶端的請求訪問后端資源之前,攔截這些請求。
· 在服務器的響應發送回客戶端之前,處理這些響應。
根據規范建議的各種類型的過濾器:
· 身份驗證過濾器(Authentication Filters)。
· 數據壓縮過濾器(Data compression Filters)。
· 加密過濾器(Encryption Filters)。
· 觸發資源訪問事件過濾器。
· 圖像轉換過濾器(Image Conversion Filters)。
· 日志記錄和審核過濾器(Logging and Auditing Filters)。
· MIME-TYPE 鏈過濾器(MIME-TYPE Chain Filters)。
· 標記化過濾器(Tokenizing Filters)。
· XSL/T 過濾器(XSL/T Filters),轉換 XML 內容。
過濾器通過 Web 部署描述符(web.xml)中的 XML 標簽來聲明,然后映射到您的應用程序的部署描述符中的 Servlet 名稱或 URL 模式。
當 Web 容器啟動 Web 應用程序時,它會為您在部署描述符中聲明的每一個過濾器創建一個實例。
Filter 的執行順序與在 web.xml 配置文件中的配置順序一致,一般把 Filter 配置在所有的 Servlet 之前。
<v:shape id="_x0000_i1033" type="#_x0000_t75" alt="http://www.runoob.com/wp-content/uploads/2014/01/20161112201612568.png" style="width:315.75pt;height:187.5pt;visibility:visible;mso-wrap-style:square"><v:imagedata src="file:///C:\Users\ADMINI~1\AppData\Local\Temp\msohtmlclip1\01\clip_image011.png" o:title="20161112201612568"></v:imagedata></v:shape>
Servlet 過濾器方法
過濾器是一個實現了 javax.servlet.Filter 接口的 Java 類。javax.servlet.Filter 接口定義了三個方法:
|
序號
|
方法 & 描述
|
|
1
|
public void doFilter (ServletRequest, ServletResponse, FilterChain) 該方法完成實際的過濾操作,當客戶端請求方法與過濾器設置匹配的URL時,Servlet容器將先調用過濾器的doFilter方法。FilterChain用戶訪問后續過濾器。
|
|
2
|
public void init(FilterConfig filterConfig) web 應用程序啟動時,web 服務器將創建Filter 的實例對象,并調用其init方法,讀取web.xml配置,完成對象的初始化功能,從而為后續的用戶請求作好攔截的準備工作(filter對象只會創建一次,init方法也只會執行一次)。開發人員通過init方法的參數,可獲得代表當前filter配置信息的FilterConfig對象。
|
|
3
|
public void destroy() Servlet容器在銷毀過濾器實例前調用該方法,在該方法中釋放Servlet過濾器占用的資源。
|
一、Filter 的基本工作原理
1、Filter 程序是一個實現了特殊接口的 Java 類,與 Servlet 類似,也是由 Servlet 容器進行調用和執行的。
2、當在 web.xml 注冊了一個 Filter 來對某個 Servlet 程序進行攔截處理時,它可以決定是否將請求繼續傳遞給 Servlet 程序,以及對請求和響應消息是否進行修改。
3、當 Servlet 容器開始調用某個 Servlet 程序時,如果發現已經注冊了一個 Filter 程序來對該 Servlet 進行攔截,那么容器不再直接調用 Servlet 的 service 方法,而是調用 Filter 的 doFilter 方法,再由 doFilter 方法決定是否去激活 servlet 方法。
4、但在 Filter.doFilter 方法中不能直接調用 Servlet 的 service 方法,而是調用 FilterChain.doFilter 方法來激活目標 Servlet 的 service 方法,FilterChain 對象時通過 Filter.doFilter 方法的參數傳遞進來的。
5、只要在 Filter.doFilter 方法中調用 FilterChain.doFilter 方法的語句前后增加某些程序代碼,這樣就可以在 Servlet 進行響應前后實現某些特殊功能。
· 6、如果在 Filter.doFilter 方法中沒有調用 FilterChain.doFilter 方法,則目標 Servlet 的 service 方法不會被執行,這樣通過 Filter 就可以阻止某些非法的訪問請求。
數據共享有幾種方式:
JavaWeb中的會話
Http協議:它是一種無狀態的鏈接協議。客戶端向服務器端發送了多次請求,服務器端無法確定是不是同一個用戶。如何解決以上問題:就要使用JavaWeb中的會話技術。
什么是會話:客戶端與服務器之間的數據傳遞。(登錄,購物車)
會話的管理:管理數據
常用的會話技術:Cookie(客戶端) Session(服務器端)
Cookie它是客戶端的技術,程序會把每個用戶的數據以Cookie的形式寫給用戶的各自瀏覽器
再次訪問Web服務器的時候,會將生成的id(Cookie)一起發送給服務器。
Cookie類:java.Servlet.http主要用于存儲會話數據。
1.構造器Cookie(
Stringname,
Stringvalue)``以名(key)值(value)對的方式來保存會話數據的
2.setMaxAge(int expiry)``設置Cookie的有效時間(時間以秒為單位)
有效時間一天(1*24*60*60)
3.``如何從服務器端向服務器端發送Cookie:resp.
addCookie(
Cookiecookie)
4.服務器端讀取客戶端發送的Cookie信息 req.getCookies() Cookie[]
Cookie的原理
1.要在服務器端創建Cookie對象,要將會話的數據保存到嗎會話中。
2.服務器會發送<u>Cookei</u>到瀏覽器端
3.瀏覽器會在下次訪問服務器的時候會攜帶<u>Cookei</u>的信息(這些信息會保存在<u>http</u>的請求頭當中)
4.服務器會接收到瀏覽器攜帶的Cookie信息
注意:cookie.setMaxAge(130246060)
1.正數:表示cookie的數據保存到硬盤中。
2.負數:只會保存到瀏覽器的內存當中,只要瀏覽器關閉,<u>cookei</u>就失效了
3.0表示會刪除同名的<u>cookei</u>數據
<u>cookei</u>中的數據智能保存非中文字符串類型。我們可以保存多個<u>cookei</u>,一個瀏覽器能保存300個<u>cookei</u>
每個站點可以保存20個<u>cookei</u>,每個<u>cookei</u>的大小為4KB
Session是服務器端的會話技術,服務器在運行的時候,會為每一個用戶創建一個單獨的Session
Session可為用戶的瀏覽器獨享。(只要瀏覽器不關閉保存在session中的信息會一直存在)
Session(HttpSession對象)中的和新方法:
getId()``獲取到session的id
setAttribute(
Stringname,
Objectvalue)``向session當中保存對象
getAttribute(
Stringname)
從session當中獲取對象
removeAttribute(
Stringname)``根據key刪除session中的對象
invalidate()``銷毀session對象
Session``的工作原理:
1.
第一次服務器會創建一個seesion對象,給它分配一個唯一的id(JSESSIONID)
2.
要將JSESSIONID``作為cookei的值發送給客戶端保存
3.
第二次再發送請求的時候瀏覽器會攜帶JSESSIONID的cookei信息來訪問服務器
4.
服務器要得到JSESSIONID,然后在服務器的內存當中搜索是否存在對應的session對象
5.
如果找不到就直接返回該對象
注意:保存到session的數據會被多個jsp、servlet共享
數據共享有幾種方式:
Web層的數據共享,四個作用域(Scope)
PageContext-----------page 保存的數據當前頁面有效
HttpServletRequest--------request 請求
HttpSession------------------session 關閉瀏覽器數據失效
ServletContext--------------application 關閉服務器數據失效
分頁:有幾種方法
前臺分頁 一次將數據全部取出
后臺分頁(數據庫分頁) Mysql:limit Oracle :rownum
a. 查詢表中總的記錄數
b. 計算總頁數:總的記錄數/每一頁要顯示的記錄數
總的記錄數/每一頁要顯示的記錄數+1
c. 查詢某一個區間段的數據
存儲過程PLSQL(表)
Ajax分頁
1.MySQL:清楚如何利用MySQL進行分頁(SQL怎么寫)
分頁需求:
客戶端通過傳遞start(頁碼),limit(每頁顯示的條數)兩個參數去分頁查詢數據庫表中的數據,那我們知道MySql數據庫提供了分頁的函數limit m,n,但是該函數的用法和我們的需求不一樣,所以就需要我們根據實際情況去改寫適合我們自己的分頁語句,具體的分析如下:
比如:
查詢第1條到第10條的數據的sql是:select * from table limit 0,10; ->對應我們的需求就是查詢第一頁的數據:select * from table limit (1-1)*10,10;
查詢第10條到第20條的數據的sql是:select * from table limit 10,20; ->對應我們的需求就是查詢第二頁的數據:select * from table limit (2-1)*10,10;
查詢第20條到第30條的數據的sql是:select * from table limit 20,30; ->對應我們的需求就是查詢第三頁的數據:select * from table limit (3-1)*10,10;
二:通過上面的分析,可以得出符合我們自己需求的分頁sql格式是:select * from table limit (start-1)*limit,limit; 其中start是頁碼,limit是每頁顯示的條數。
前臺所使用的分頁的插件:
DisplayTag
可以使用自己定義的標簽什么是 AJAX ?
AJAX = 異步 JavaScript 和 XML。
AJAX 是一種用于創建快速動態網頁的技術。
通過在后臺與服務器進行少量數據交換,AJAX 可以使網頁實現異步更新。這意味著可以在不重新加載整個網頁的情況下,對網頁的某部分進行更新。
傳統的網頁(不使用 AJAX)如果需要更新內容,必需重載整個網頁面。
有很多使用 AJAX 的應用程序案例:新浪微博、Google 地圖、開心網等等。
AJAX的開發流程
1. 創建 XMLHttpRequest 對象
variable=new XMLHttpRequest();
- 向服務器發送請求
xmlhttp.open("GET","test1.txt",true);
xmlhttp.send();
- 服務器響應
<pre style="margin-top:6.65pt;background:
whitesmoke;border:none;mso-border-alt:dotted #778855 .5pt;padding:0cm;
mso-padding-alt:9.0pt 9.0pt 9.0pt 9.0pt">document.getElementById("myDiv").innerHTML=xmlhttp.responseText;</pre>
4. 根據狀態的改變會觸發onreadystatechange 事件
<pre style="margin-top:6.65pt;background:
whitesmoke;border:none;mso-border-alt:dotted #778855 .5pt;padding:0cm;
mso-padding-alt:9.0pt 9.0pt 9.0pt 9.0pt">xmlhttp.onreadystatechange=function()</pre>
<pre style="margin-top:6.65pt;background:whitesmoke;border:none;mso-border-alt:dotted #778855 .5pt;
padding:0cm;mso-padding-alt:9.0pt 9.0pt 9.0pt 9.0pt"> {</pre>
<pre style="margin-top:6.65pt;background:whitesmoke;border:none;mso-border-alt:dotted #778855 .5pt;
padding:0cm;mso-padding-alt:9.0pt 9.0pt 9.0pt 9.0pt">if (xmlhttp.readyState==4 && xmlhttp.status==200)</pre>
<pre style="margin-top:6.65pt;background:whitesmoke;border:none;mso-border-alt:dotted #778855 .5pt;
padding:0cm;mso-padding-alt:9.0pt 9.0pt 9.0pt 9.0pt"> {</pre>
<pre style="margin-top:6.65pt;background:whitesmoke;border:none;mso-border-alt:dotted #778855 .5pt;
padding:0cm;mso-padding-alt:9.0pt 9.0pt 9.0pt 9.0pt"> document.getElementById("myDiv").innerHTML=xmlhttp.responseText;</pre>
<pre style="margin-top:6.65pt;background:whitesmoke;border:none;mso-border-alt:dotted #778855 .5pt;
padding:0cm;mso-padding-alt:9.0pt 9.0pt 9.0pt 9.0pt">}</pre>
<pre style="margin-top:6.65pt;background:whitesmoke;border:none;mso-border-alt:dotted #778855 .5pt;
padding:0cm;mso-padding-alt:9.0pt 9.0pt 9.0pt 9.0pt">}</pre>
Json的轉換工具
概述
JSON是一種輕量化的數據傳輸格式,在各種場景都有運用。比如在ajax中,服務端的數據一般通過JSON字符串的格式傳輸給前端,前端ajax引擎自動將JSON字符串轉化為JS對象(需要將ajax的返回內容格式設置為"json")。那么此時我們在后臺服務器中就需要將封裝好的JavaBean對象轉化為JSON格式字符串來傳輸給前臺ajax引擎,此時使用JSON轉化工具將大大簡化我們代碼量。
首先我們需要明確的是什么是JSON格式
JSON格式有兩種,一種是對象格式,另一種是數組格式(也可以叫集合)。
對象格式:{"key1":value1,"key2":value2......}
數組形式:[{對象1},{對象2}....]
<v:shape id="圖片_x0020_1" o:spid="_x0000_i1032" type="#_x0000_t75" alt="https://img-blog.csdn.net/20181010104715244?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3RpYW5qaW5kb25nMDgwNA==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70" style="width:302.25pt;height:71.25pt;visibility:visible;mso-wrap-style:square"><v:imagedata src="file:///C:\Users\ADMINI~1\AppData\Local\Temp\msohtmlclip1\01\clip_image012.jpg" o:title="70"></v:imagedata></v:shape>
1. GSON轉換工具
2. JSONLib轉換工具:JSONArray JSONObject
3. Jackson轉換工具
https://blog.csdn.net/tianjindong0804/article/details/80573127
JSON字符串如何轉化成對象?
解析
1、定義:是指將符合 JSON 語法規則的字符串轉換成對象的過程。
2、不同的編程語言都提供了解析 JSON 字符串的方法,在這里主要講解 JavaScript 中的解析方法。主要有三種:
1)- 使用 eval()
2)- 使用 JSON.parse()
3)- 使用第三方庫,例如 JQuery 等
eval()
1、eval() 函數的參數是一個字符串,其作用是直接執行其中的 JavaScript 代碼。
2、eval() 能夠解析 JSON 字符串。從這里也可以看得出,JSON 和 JavaScript 是高度嵌合的。
3、但是,現在已經很少直接使用 eval() 來解析了,如果您的瀏覽器版本真的是很舊,可能才需要這個方法。此外,eval() 是一個相對危險的函數,因為字符串中可能含有未知因素。在這里,作為學習,還是要知道這也是一種方法。
4、請注意 eval() 的參數,在字符串兩旁加了括號,這是必須的,否則會報錯。
5、因為 JSON 字符串是被大括號(“{}”)包圍的,直接放到 eval() 會被當成語句塊來執行,因此要在兩旁加上括號,使其變成表達式。
示例代碼
<script>
var str = “console.log(‘hello’)”;
eval(sre);
</script>
控制臺輸出的執行結果:
<v:shape id="圖片_x0020_4" o:spid="_x0000_i1031" type="#_x0000_t75" alt="https://images2015.cnblogs.com/blog/815181/201610/815181-20161027180549578-1762621811.png" style="width:163.5pt;height:53.25pt;visibility:visible;mso-wrap-style:square"><v:imagedata src="file:///C:\Users\ADMINI~1\AppData\Local\Temp\msohtmlclip1\01\clip_image013.png" o:title="815181-20161027180549578-1762621811"></v:imagedata></v:shape>
示例代碼
<script>
var str = ‘{ “name” : “Geoff Lui”,“age” : 26}’; //符合JSON語法規則的字符串
eval (“(“+str+”)”);
console.log(obj);
</script>
執行結果:
<v:shape id="圖片_x0020_5" o:spid="_x0000_i1030" type="#_x0000_t75" alt="https://images2015.cnblogs.com/blog/815181/201610/815181-20161027180556828-373237556.png" style="width:207.75pt;height:69pt;visibility:visible;mso-wrap-style:square"><v:imagedata src="file:///C:\Users\ADMINI~1\AppData\Local\Temp\msohtmlclip1\01\clip_image014.png" o:title="815181-20161027180556828-373237556"></v:imagedata></v:shape>
JSON.parse()
1、現在絕大多數瀏覽器都以支持 JSON.parse(),是推薦使用的方式
示例代碼:
<script>
var str = ‘{ “name” : “Geoff Lui”,“age” : 26}’; //符合JSON語法規則的字符串
var obj = JSON.parse(str);
console.log(obj);
</script>
執行結果:
<v:shape id="圖片_x0020_6" o:spid="_x0000_i1029" type="#_x0000_t75" alt="https://images2015.cnblogs.com/blog/815181/201610/815181-20161027180605125-787278386.png" style="width:195pt;height:61.5pt;visibility:visible;mso-wrap-style:square"><v:imagedata src="file:///C:\Users\ADMINI~1\AppData\Local\Temp\msohtmlclip1\01\clip_image015.png" o:title="815181-20161027180605125-787278386"></v:imagedata></v:shape>
2、如果輸入了不符合規范的字符串,會報錯
3、JSON.parse() 可以有第二個參數,是一個函數。此函數有兩個參數:name 和 value,分別代表名稱和值。當傳入一個 JSON 字符串后,JSON 的每一組名稱/值對都要調用此函數。該函數有返回值,返回值將賦值給當前的名稱(name)。
示例代碼:
<script>
var str = ‘{ “name” : “Geoff Lui”,“age” : 26}’; //符合JSON語法規則的字符串
var obj = JSON.parse(str,fun);
function fun (name , value){
console.log(name + “: ” + value);
return value;
}
console.log(obj);
</script>
執行結果:
<v:shape id="圖片_x0020_7" o:spid="_x0000_i1028" type="#_x0000_t75" alt="https://images2015.cnblogs.com/blog/815181/201610/815181-20161027180614406-1402965494.png" style="width:186.75pt;height:51.75pt;visibility:visible;mso-wrap-style:square"><v:imagedata src="file:///C:\Users\ADMINI~1\AppData\Local\Temp\msohtmlclip1\01\clip_image016.png" o:title="815181-20161027180614406-1402965494"></v:imagedata></v:shape>
示例代碼:
<script>
var str = ‘{ “name” : “Geoff Lui”,“age” : 26}’; //符合JSON語法規則的字符串
var obj = JSON.parse(str,fun);
function fun (name , value){
if(name == “age” )
value = 14;
return value;
}
console.log(obj);
</script>
執行結果:
<v:shape id="圖片_x0020_8" o:spid="_x0000_i1027" type="#_x0000_t75" alt="https://images2015.cnblogs.com/blog/815181/201610/815181-20161027180622593-1061276212.png" style="width:201.75pt;height:45pt;visibility:visible;mso-wrap-style:square"><v:imagedata src="file:///C:\Users\ADMINI~1\AppData\Local\Temp\msohtmlclip1\01\clip_image017.png" o:title="815181-20161027180622593-1061276212"></v:imagedata></v:shape>
JavaWeb復習:
Tomcat服務器的作用以及如何修改端口號server.xml,你還聽說過哪些服務器?
<v:shape id="圖片_x0020_16" o:spid="_x0000_i1026" type="#_x0000_t75" style="width:86.25pt;
height:149.25pt;visibility:visible;mso-wrap-style:square"><v:imagedata src="file:///C:\Users\ADMINI~1\AppData\Local\Temp\msohtmlclip1\01\clip_image018.png" o:title=""></v:imagedata></v:shape>
當服務器出問題如何解決:
<v:shape id="圖片_x0020_17" o:spid="_x0000_i1025" type="#_x0000_t75" style="width:172.5pt;
height:133.5pt;visibility:visible;mso-wrap-style:square"><v:imagedata src="file:///C:\Users\ADMINI~1\AppData\Local\Temp\msohtmlclip1\01\clip_image019.png" o:title=""></v:imagedata></v:shape>
jQuery 是一個 JavaScript 函數庫。
jQuery 庫包含以下特性:
· HTML 元素選取
· HTML 元素操作
· CSS 操作
· HTML 事件函數
· JavaScript 特效和動畫
· HTML DOM 遍歷和修改
· AJAX
jQuery 語法
jQuery 語法是為 HTML 元素的選取編制的,可以對元素執行某些操作。
基礎語法是:$(selector).action()
· 美元符號定義 jQuery
· 選擇符(selector)“查詢”和“查找” HTML 元素
· jQuery 的 action() 執行對元素的操作
文檔就緒函數
您也許已經注意到在我們的實例中的所有 jQuery 函數位于一個 document ready 函數中:
<pre style="margin-top:6.65pt;background:whitesmoke;border:none;mso-border-alt:dotted #778855 .5pt;
padding:0cm;mso-padding-alt:9.0pt 9.0pt 9.0pt 9.0pt">$(document).ready(function(){</pre>
<pre style="background:whitesmoke;border:none;mso-border-alt:dotted #778855 .5pt;
padding:0cm;mso-padding-alt:9.0pt 9.0pt 9.0pt 9.0pt">--- jQuery functions go here ----</pre>
<pre style="background:whitesmoke;border:none;mso-border-alt:dotted #778855 .5pt;
padding:0cm;mso-padding-alt:9.0pt 9.0pt 9.0pt 9.0pt">});</pre>
這是為了防止文檔在完全加載(就緒)之前運行 jQuery 代碼。如果在文檔沒有完全加載之前就運行函數,操作可能失敗。
$(function(){
$('input').click(function(){
alert("first jquery......");
});
});
AJAX