【非原創(chuàng)叮阅,內(nèi)容來源于網(wǎng)絡(luò)望侈、書本璧函,整合傀蚌,系學(xué)習(xí)筆記】
概述
?靜態(tài)Web與動(dòng)態(tài)Web最本質(zhì)區(qū)別主要就是靜態(tài)Web是無法進(jìn)行數(shù)據(jù)庫操作的,而動(dòng)態(tài)Web是 可以進(jìn)行數(shù)據(jù)庫操作的蘸吓。
?動(dòng)態(tài)Web最大特點(diǎn)就是具有交互性善炫,也就是服務(wù)器端會(huì)根據(jù)用戶不同請(qǐng)求返回不同的結(jié)果。實(shí)現(xiàn)一個(gè)動(dòng)態(tài)Web的主要方式有:CGI(Common Gateway Interface库继,公共網(wǎng)關(guān)接口)销部、PHP摸航、ASP、ASP.NET和JSP等舅桩。
JDBC
定義
JDBC:全稱是Java Database Connectivity酱虎,是一個(gè)應(yīng)用程序編成接口(API),包括了許多類和接口擂涛,程序員通過使用JDBC可以方便的將SQL語句傳送給幾乎任何一種數(shù)據(jù)庫读串。
有了JDBC,向各種關(guān)系數(shù)據(jù)發(fā)送SQL語句就是一件很容易的事撒妈。換言之恢暖,有了JDBC API,就不必為訪問Sybase數(shù)據(jù)庫專門寫一個(gè)程序狰右,為訪問Oracle數(shù)據(jù)庫又專門寫一個(gè)程序杰捂,或?yàn)樵L問Informix數(shù)據(jù)庫又編寫另一個(gè)程序等等,程序員只需用JDBC API寫一個(gè)程序就夠了棋蚌,它可向相應(yīng)數(shù)據(jù)庫發(fā)送SQL調(diào)用嫁佳。同時(shí),將Java語言和JDBC結(jié)合起來使程序員不必為不同的平臺(tái)編寫不同的應(yīng)用程序谷暮,只須寫一遍程序就可以讓它在任何平臺(tái)上運(yùn)行蒿往,這也是Java語言“編寫一次,處處運(yùn)行”的優(yōu)勢湿弦。
JDBC主要完成三件事:
(1)與一個(gè)數(shù)據(jù)庫建立連接瓤漏;
(2)向數(shù)據(jù)庫發(fā)送SQL語句;
(3)處理數(shù)據(jù)庫返回的結(jié)果颊埃。
:arrow_up_small: 工作步驟
?向驅(qū)動(dòng)程序管理器加載注冊(cè)JDBC驅(qū)動(dòng)程序
?獲得特定數(shù)據(jù)庫的連接
?得到SQL語句容器蔬充,并發(fā)送SQL語句
?如果有結(jié)果集返回的話,處理結(jié)果集
?關(guān)閉數(shù)據(jù)庫連接
:zap: 包含角色
:Driver班利、DriverManager理朋、Connection癣丧、Statement兔魂、ResultSet弛作。數(shù)據(jù)庫驅(qū)動(dòng)Driver:JDBC的驅(qū)動(dòng)程序,通過指定的URL創(chuàng)建數(shù)據(jù)庫連接馒稍;
驅(qū)動(dòng)程序管理器DriverManager:DriverManger可以注冊(cè)和刪除加載的驅(qū)動(dòng)程序皿哨,可以根據(jù)給定的URL獲取符合URL協(xié)議的驅(qū)動(dòng)Driver或者是建立Conenction連接,進(jìn)行數(shù)據(jù)庫交互纽谒。
連接對(duì)象Connection:Driver 或者DriverManager根據(jù)連接的URL和參數(shù)信息創(chuàng)建Connection實(shí)例证膨,用來維持和數(shù)據(jù)庫的數(shù)據(jù)通信。
命令對(duì)象Statement:Connection創(chuàng)建Statement對(duì)象鼓黔,表示需要執(zhí)行的SQL語句或者存儲(chǔ)過程央勒;
結(jié)果對(duì)象ResultSet:表示Statement執(zhí)行完SQL語句后返回的結(jié)果集不见。
鏈接數(shù)據(jù)庫系統(tǒng)兩個(gè)步驟
驅(qū)動(dòng)程序類名:一個(gè)繼承java.sql.Driver接口的類名,JDBC驅(qū)動(dòng)程序管理器需要加載這個(gè)類來處理數(shù)據(jù)庫驅(qū)動(dòng)程序崔步。
數(shù)據(jù)庫URL:一個(gè)字符串稳吮,該字符串包含關(guān)于數(shù)據(jù)庫連接的信息和其他配置屬性。這個(gè)字符串有自己的格式井濒,不同數(shù)據(jù)庫之間存在不同灶似。
eg
MySQL
驅(qū)動(dòng)程序包:mysql-connector-java-5.1.18-bin.jar
驅(qū)動(dòng)程序類名:com.mysql.jdbc.Driver
URL格式:
jdbc:mysql://servername:port/database
Class.forName( " com.mysql.jdbc.Driver " );
cn = DriverManager.getConnection(
"jdbc:mysql://MyDbComputerName Or IP:3306/myDatabaseName", sUsr, sPwd );
建立一個(gè)JDBC應(yīng)用程序的步驟:
1.導(dǎo)入包 2. 注冊(cè)JDBC驅(qū)動(dòng)程序 3.打開連接 4.執(zhí)行查詢 5.從結(jié)果集中提取數(shù)據(jù) 6.清理數(shù)據(jù)【關(guān)閉】
JBoss
JBoss作為Java EE應(yīng)用服務(wù)器,支持如數(shù)據(jù)庫訪問(JDBC)瑞你、交易(JTA/JTS)酪惭、消息機(jī)制(JTS)、命名機(jī)制(JNDI)和管理支持(JMX)者甲。
JBoss是一種遵循從JavaEE規(guī)范的春感、開放源代碼的、純Java的EJB服務(wù)器虏缸,對(duì)于J2EE有很好的支持鲫懒。
Java servlet
定義
JavaServlet是位于Web服務(wù)器內(nèi)部的、運(yùn)行于服務(wù)器端的寇钉、獨(dú)立于平臺(tái)和協(xié)議的Java應(yīng)用程序(以下簡稱Servlet)刀疙,可以生成動(dòng)態(tài)的Web舶赔。屬于客戶與服務(wù)器的中間層扫倡。jsp和servlet可以實(shí)現(xiàn)同樣的頁面效果,編寫jsp的成本相對(duì)低一點(diǎn)竟纳。
Servlet由Web服務(wù)器進(jìn)行加載撵溃,該Web服務(wù)器必須包含支持Servlet的Java虛擬機(jī)。
Servlet的運(yùn)行需要在web.xml中進(jìn)行描述和注冊(cè)
Servlet響應(yīng)客戶請(qǐng)求的過程:
- 客戶端發(fā)送請(qǐng)求至服務(wù)器锥累。
- 服務(wù)器將請(qǐng)求信息發(fā)送至Servlet缘挑。
- Servlet生成相應(yīng)內(nèi)容并將其傳給服務(wù)器。
- 服務(wù)器將響應(yīng)返回給客戶端桶略。
servlet可以完成的任務(wù)
1.動(dòng)態(tài)生成HTML文檔语淘。
2.把請(qǐng)求轉(zhuǎn)發(fā)給同一個(gè)Web應(yīng)用中的其他Servlet組件。
3.把請(qǐng)求轉(zhuǎn)發(fā)給其他Web應(yīng)用中的Servlet組件际歼。
4.讀取客戶端的Cookie惶翻,以及向客戶端寫入Cookie。
5.訪問其他服務(wù)器資源鹅心。
特點(diǎn)
1 .高效性
Servlet采用了多線程的處理機(jī)制吕粗,有效地節(jié)省了處理時(shí)間和資源分配,提高了處理效率旭愧。
2 .開發(fā)的方便性
Servlet提供了大量的實(shí)用工具例程颅筋,用戶可以非常方便地學(xué)習(xí)并在此基礎(chǔ)上開發(fā)出所需的應(yīng)用程序宙暇。
3.強(qiáng)大的功能性
Servlet為用戶提供了許多以往CGI很難實(shí)現(xiàn)的功能,這些強(qiáng)大的功能為用戶的Web開發(fā)提供了很好的支持议泵。
4.可移植性
Servlet的定義和開發(fā)具有完善的標(biāo)準(zhǔn)占贫。因此,Servlet不需修改或只需簡單調(diào)整即可移植到Apache先口、Microsoft IIS等支持Servlet的Web服務(wù)器上靶剑。幾乎所有的主流服務(wù)器都直接或通過插件支持Servlet。
5.安全性
Servlet是由Java編寫的池充,所以它可以使用Java的安全框架桩引;ServletAPI被實(shí)現(xiàn)為類型安全的;容器也會(huì)對(duì)Servlet的安全進(jìn)行管理收夸。
集成性好:Servlet有Servlet容器管理坑匠, Servlet容器位于Servlet服務(wù)器中,Servlet和服務(wù)器緊密集成卧惜,使Servlet和服務(wù)器密切合作
內(nèi)容和接口
https://blog.csdn.net/qq_34594236/article/details/78345478【接口總結(jié)】
Servlet架構(gòu)由javax.servlet和javax.servlet.http兩個(gè)Java包組成厘灼。在javax.servlet包中定義了所有的Servlet類都必須實(shí)行或擴(kuò)展的通用接口和類。
在javax.servlet.http包中定義了采用http通信的HttpServlet類咽瓷。
所有的Servlet 對(duì)象都要實(shí)現(xiàn)Servlet 接口设凹。已經(jīng)實(shí)現(xiàn)了Servlet 接口的javax.servlet.GenericServlet 和 javax.servlet.http.HttpServlet 這兩個(gè)抽象類的子類來間接實(shí)現(xiàn)Servlet 接口。[常用javax.servlet.http.HttpServlet ]
用戶編寫的Servlet程序都必須實(shí)現(xiàn)javax.servlet.Servlet接口茅姜,該接口是ServletAPI的核心闪朱,在這個(gè)接口中有5個(gè)方法必須實(shí)現(xiàn)。
(1)init()方法
在 Servlet 的生命期中钻洒,僅執(zhí)行一次 init() 方法奋姿。它是在服務(wù)器裝入 Servlet 時(shí)執(zhí)行的。 可以配置服務(wù)器素标,以在啟動(dòng)服務(wù)器或客戶機(jī)首次訪問 Servlet 時(shí)裝入 Servlet称诗。 無論有多少客戶機(jī)訪問 Servlet,都不會(huì)重復(fù)執(zhí)行 init() 头遭。
缺省的 init() 方法通常是符合要求的寓免,但也可以用定制 init() 方法來覆蓋它,典型的是管理服務(wù)器端資源计维。
(2)service()方法【之前老是用】
格式:public void service(ServletRequest req,ServletResponse res) throws ServletException,IOException 說明:Servlet成功初始化后該方法會(huì)被調(diào)用袜香,用于處理用戶請(qǐng)求。該方法在Servlet生命周期中可執(zhí)行很多次享潜,每個(gè)用戶的請(qǐng)求都會(huì)執(zhí)行一次service()方法困鸥,完成與相應(yīng)客戶端的交互。
service() 方法是 Servlet 的核心。每當(dāng)一個(gè)客戶請(qǐng)求一個(gè)HttpServlet 對(duì)象疾就,該對(duì)象的service() 方法就要被調(diào)用澜术,而且傳遞給這個(gè)方法一個(gè)"請(qǐng)求"(ServletRequest)對(duì)象和一個(gè)"響應(yīng)"(ServletResponse)對(duì)象作為參數(shù)。 在 HttpServlet 中已存在 service() 方法猬腰。缺省的服務(wù)功能是調(diào)用與 HTTP 請(qǐng)求的方法相應(yīng)的 do 功能鸟废。例如, 如果 HTTP 請(qǐng)求方法為 GET姑荷,則缺省情況下就調(diào)用 doGet() 盒延。Servlet 應(yīng)該為 Servlet 支持的 HTTP 方法覆蓋 do 功能。因?yàn)?HttpServlet.service() 方法會(huì)檢查請(qǐng)求方法是否調(diào)用了適當(dāng)?shù)奶幚矸椒ㄊ竺幔槐匾采w service() 方法添寺。只需覆蓋相應(yīng)的 do 方法就可以了。
doGet() 方法
當(dāng)一個(gè)客戶通過 HTML 表單發(fā)出一個(gè) HTTP GET 請(qǐng)求或直接請(qǐng)求一個(gè) URL 時(shí)懈费,doGet() 方法被調(diào)用计露。與 GET 請(qǐng)求相關(guān)的參數(shù)添加到 URL 的后面,并與這個(gè)請(qǐng)求一起發(fā)送憎乙。當(dāng)不會(huì)修改服務(wù)器端的數(shù)據(jù)時(shí)票罐,應(yīng)該使用 doGet() 方法。
doPost() 方法
當(dāng)一個(gè)客戶通過 HTML 表單發(fā)出一個(gè) HTTP POST 請(qǐng)求時(shí)泞边,doPost() 方法被調(diào)用该押。與 POST 請(qǐng)求相關(guān)的參數(shù)作為一個(gè)單獨(dú)的 HTTP 請(qǐng)求從瀏覽器發(fā)送到服務(wù)器。當(dāng)需要修改服務(wù)器端的數(shù)據(jù)時(shí)阵谚,應(yīng)該使用 doPost() 方法蚕礼。
以上三種方法 ,均需要 “請(qǐng)求”和“響應(yīng)”對(duì)象作為參數(shù)椭蹄∥拍担“請(qǐng)求”對(duì)象提供有關(guān)請(qǐng)求的信息净赴,而“響應(yīng)”對(duì)象提供了一個(gè)將響應(yīng)信息返回給瀏覽器的一個(gè)通信途徑绳矩。
(3)destroy()方法
destroy() 方法僅執(zhí)行一次,即在服務(wù)器停止且卸裝 Servlet 時(shí)執(zhí)行該方法玖翅。典型的翼馆,將 Servlet 作為服務(wù)器進(jìn)程的一部分來關(guān)閉。缺省的 destroy() 方法通常是符合要求的金度,但也可以覆蓋它应媚,典型的是管理服務(wù)器端資源
(4)getServletConfig()方法
返回一個(gè) ServletConfig 對(duì)象,該對(duì)象用來返回初始化參數(shù)和 ServletContext猜极。ServletContext 接口提供有關(guān) servlet 的環(huán)境信息
(5)getServletInfo()方法
是一個(gè)可選的方法中姜,它提供有關(guān) servlet 的信息,如作者、版本丢胚、版權(quán)翩瓜。
這個(gè)HelloWorld類,繼承了HttpServlet接口携龟。而HttpServlet是一個(gè)實(shí)現(xiàn)了Servlet接口的類兔跌,所以這個(gè)Servlet就間接地實(shí)現(xiàn)了Servlet的接口,從而可以使用接口提供的服務(wù)峡蟋。
這個(gè)程序中的doGet()方法就是具體的功能處理方法坟桅,這個(gè)方法可以對(duì)以get方法發(fā)起的請(qǐng)求進(jìn)行處理,在這里這個(gè)方法的功能就是輸出一個(gè)HTML頁面蕊蝗。
本例中并沒有出現(xiàn)具體的init()方法和destroy()方法仅乓,而是由Servlet容器以默認(rèn)的方式對(duì)這個(gè)Servlet進(jìn)行初始化和銷毀動(dòng)作。
question:JavaServlet針對(duì)HTTP協(xié)議提供的專門類和接口有哪些蓬戚。
HttpServlet是滿足Servlet規(guī)范方灾、基于Http作為傳輸協(xié)議而設(shè)計(jì)的一個(gè)接口。所以碌更,它不僅滿足Servlet規(guī)范裕偿,繼承了Servlet中的所有功能(接口方法),并且痛单,它還具有自己的一些特有的功能嘿棘,而這些功能即是專門用來處理通過http所傳輸?shù)男畔⒌摹_@么說可能有點(diǎn)晦澀難懂旭绒,還是舉幾個(gè)例子吧: 例如HttpServlet中不僅僅有service方法鸟妙,它還包含有doGet、doPost挥吵、doPut等一系列方法重父,如果你熟悉http協(xié)議,你應(yīng)該清楚忽匈,http請(qǐng)求類型有post房午、get、put丹允、delete等郭厌,而httpServlet中doGet、doPost方法就是專門用來處理相關(guān)的http請(qǐng)求類型. 再舉個(gè)例子雕蔽,如果你仔細(xì)看看HttpServletRequest接口折柠,你就會(huì)發(fā)現(xiàn),除了繼承ServletRequest中的方法外批狐,它還有g(shù)etHeader扇售、getMethod方法,而getHeader就是專門用來獲得http的頭(header)信息的,getMethod就是專門用來獲得client基于http協(xié)議請(qǐng)求的方式的承冰,如post嘱根、get等。
配置
Servlet編譯完以后不能直接運(yùn)行巷懈,還需要存放在指定位置该抒,并在web.xml文件中進(jìn)行配置。
在該配置文件中<servlet>和<servlet-mapping>標(biāo)識(shí)用于對(duì)Servlet進(jìn)行配置顶燕,這個(gè)配置信息可以分為兩個(gè)部分凑保,第一部分是配置Servlet的名稱和對(duì)應(yīng)的類,第二部分是配置Servlet的訪問路徑涌攻。有一個(gè)servlet配置一個(gè)
【web.xml 很多屬性欧引,具體見配置文件】
生命周期
每個(gè)Servlet都有一個(gè)生命周期,該生命周期由創(chuàng)建Servlet實(shí)例的Servlet容器進(jìn)行控制恳谎。所謂Servlet生命周期就是指Servlet容器創(chuàng)建Servlet實(shí)例后響應(yīng)客戶請(qǐng)求直至銷毀的全過程芝此。
Servlet的生命周期可以分為四個(gè)階段:類裝載及實(shí)例創(chuàng)建階段、實(shí)例初始化階段因痛、服務(wù)階段以及實(shí)例銷毀階段婚苹。
- 客戶端請(qǐng)求該 Servlet;
- 加載 Servlet 類到內(nèi)存鸵膏;
- 實(shí)例化并調(diào)用init()方法初始化該 Servlet膊升;
- service()(根據(jù)請(qǐng)求方法不同調(diào)用doGet() 或者 doPost(),此外還有doHead()谭企、doPut()廓译、doTrace()、doDelete()债查、doOptions()非区、destroy())。
- 加載和實(shí)例化 Servlet盹廷。這項(xiàng)操作一般是動(dòng)態(tài)執(zhí)行的征绸。然而,Server 通常會(huì)提供一個(gè)管理的選項(xiàng)速和,用于在 Server 啟動(dòng)時(shí)強(qiáng)制裝載和初始化特定的 Servlet歹垫。
1.類裝載及實(shí)例創(chuàng)建
默認(rèn)情況下,Servlet實(shí)例是在接受第一次請(qǐng)求時(shí)進(jìn)行創(chuàng)建颠放,而且對(duì)以后的請(qǐng)求進(jìn)行復(fù)用。
如果Servlet實(shí)例需要在初始化時(shí)完成一些復(fù)雜的工作吭敢,可以通過配置在服務(wù)器啟動(dòng)時(shí)就創(chuàng)建實(shí)例:聲明servlet標(biāo)簽中添加<load- on-startup>1</load-on-startup>標(biāo)簽碰凶。
其中<load-on-startup>標(biāo)記的值必須為數(shù)值類型,表示Servlet的裝載順序,取值及含義如下:? 正數(shù)或零:該Servlet必須在應(yīng)用啟動(dòng)時(shí)裝載欲低,容器必須保證數(shù)值小的Servlet先裝載
2.初始化Servlet 實(shí)例init()
一旦Servlet實(shí)例被創(chuàng)建辕宏,將會(huì)調(diào)用Servlet的init(ServletConfig config)方法。init()方法在整個(gè)Servlet生命周期中只會(huì)調(diào)用一次砾莱,如果初始化成功則進(jìn)入可服務(wù)狀態(tài)瑞筐,準(zhǔn)備處理用戶的請(qǐng)求,否則卸載該servlet實(shí)例腊瑟。
在init()方法中包含了一個(gè)參數(shù)config聚假,主要用于傳遞Servlet的配置信息,比如初始化參數(shù)等闰非,該對(duì)象由服務(wù)器進(jìn)行創(chuàng)建膘格。
3.服務(wù) services()
一旦Servlet實(shí)例成功創(chuàng)建并且初始化,該Servlet實(shí)例就可以被服務(wù)器用來服務(wù)于客戶端的請(qǐng)求并生成響應(yīng)财松。在服務(wù)階段瘪贱,應(yīng)用服務(wù)器會(huì)調(diào)用該實(shí)例的 service(ServletRequest request, ServletResponse response)方法,其中request對(duì)象和response對(duì)象由服務(wù)器創(chuàng)建并傳給Servlet實(shí)例辆毡。request對(duì)象封裝了客戶端發(fā)往服務(wù)器端的信息菜秦,response對(duì)象封裝了服務(wù)器發(fā)往客戶端的信息。
4.銷毀 destory()
當(dāng)Servlet容器將決定結(jié)束某個(gè)Servlet時(shí)舶掖,將會(huì)調(diào)用destory()方法喷户,在destory方法中進(jìn)行資源釋放。一旦destory()方法被調(diào)用访锻,Servlet容器將不會(huì)再發(fā)送任何請(qǐng)求給這個(gè)實(shí)例褪尝。若Servlet容器需再次使用該Servlet,需重新實(shí)例化該Servlet實(shí)例期犬。
工作模式
客戶端發(fā)送請(qǐng)求至服務(wù)器
服務(wù)器啟動(dòng)并調(diào)用 Servlet河哑,Servlet 根據(jù)客戶端請(qǐng)求生成響應(yīng)內(nèi)容并將其傳給服務(wù)器
服務(wù)器將響應(yīng)返回客戶端
JSP與servlet:JSP 中的 out 對(duì)象,一般可以使用 doXXX 方法中的 response 參數(shù)獲得
web.xml
設(shè)置全局參數(shù)龟虎,該參數(shù)所有的 Servlet 都可以訪問
<context-param>
<param-name>參數(shù)名</param-name>
<param-value>參數(shù)值</param-value>
</context-param>
設(shè)置局部參數(shù)璃谨,該參數(shù)只有相應(yīng)的 Servlet 才能訪問
<servlet>
<servlet-name>Servlet 名稱</servlet-name>
<servlet-class>Servlet 類路徑</servlet-class>
<init-param>
<param-name>參數(shù)名</param-name>
<param-value>參數(shù)值</param-value>
</init-param>
</servlet>
JSP
定義
JSP全名為Java Server Pages,中文名叫java服務(wù)器頁面鲤妥,其根本是一個(gè)簡化的Servlet設(shè)計(jì)佳吞,它是一種動(dòng)態(tài)網(wǎng)頁技術(shù)標(biāo)準(zhǔn)。JSP技術(shù)有點(diǎn)類似ASP技術(shù)棉安,它是在傳統(tǒng)的網(wǎng)頁HTML(標(biāo)準(zhǔn)通用標(biāo)記語言的子集)文件(.htm,.html)中插入Java程序段(Scriptlet)和JSP標(biāo)記(tag)底扳,從而形成JSP文件,后綴名為(*.jsp)贡耽。
它實(shí)現(xiàn)了Html語法中的java擴(kuò)展(以 <%, %>形式)衷模。JSP與Servlet一樣鹊汛,是在服務(wù)器端執(zhí)行的。通常返回給客戶端的就是一個(gè)HTML文本阱冶,因此客戶端只要有瀏覽器就能瀏覽刁憋。
JSP技術(shù)使用Java編程語言編寫類XML的tags和scriptlets,來封裝產(chǎn)生動(dòng)態(tài)網(wǎng)頁的處理邏輯木蹬。 JSP(JavaServer Pages)是一種動(dòng)態(tài)頁面技術(shù)至耻,它的主要目的是將表示邏輯從Servlet中分離出來。
Java Servlet是JSP的技術(shù)基礎(chǔ)镊叁,而且大型的Web應(yīng)用程序的開發(fā)需要Java Servlet和JSP配合才能完成尘颓。JSP本質(zhì)上還是Servlet。當(dāng)Java EE容器接收到對(duì)某個(gè)JSP的第一次請(qǐng)求時(shí)意系,就會(huì)對(duì)這個(gè)JSP文件進(jìn)行分析泥耀,生成Servlet源文件,再編譯成Class類文件蛔添,執(zhí)行這個(gè)類文件痰催,把執(zhí)行結(jié)果作為應(yīng)答發(fā)送給客戶端;如果接收到的不是對(duì)這個(gè)JSP的第一次請(qǐng)求迎瞧,直接執(zhí)行對(duì)應(yīng)的類文件夸溶,把執(zhí)行結(jié)果作為應(yīng)答發(fā)送給客戶端。
執(zhí)行過程
客戶端請(qǐng)求URL即請(qǐng)求jsp容器(比如tomcat)中的JSP頁面凶硅,第一個(gè)用戶請(qǐng)求jsp文件的時(shí)候缝裁,把jsp文件轉(zhuǎn)換成java文件(servlet類文件),然后再編譯成class文件足绅。最后以HTML格式返回到給客戶端瀏覽器捷绑「刂客戶端瀏覽器解釋HTML標(biāo)簽呈現(xiàn)給用戶厨钻。由于編譯后的class文件常駐內(nèi)存疼邀,如果再次有客戶請(qǐng)求的時(shí)候稚机,直接再開一個(gè)線程,無須重新編譯红柱,直接執(zhí)行第一次已經(jīng)編譯好的class文件檐蚜,這樣速度要快一些贯城。當(dāng)然加缘,如果jsp文件發(fā)生變化鸭叙,那么就需要重新編譯一次
內(nèi)置對(duì)象
9個(gè)內(nèi)置對(duì)象
out 對(duì)象:負(fù)責(zé)管理對(duì)客戶端的輸出 輸出對(duì)象
request 對(duì)象:負(fù)責(zé)得到客戶端的請(qǐng)求信息 請(qǐng)求對(duì)象
response 對(duì)象:負(fù)責(zé)向客戶端發(fā)出響應(yīng) 響應(yīng)對(duì)象
session 對(duì)象:負(fù)責(zé)保存同一客戶端一次會(huì)話過程中的一些信息 會(huì)話對(duì)象
application 對(duì)象:表示整個(gè)應(yīng)用的環(huán)境的信息 應(yīng)用application對(duì)象
應(yīng)答與請(qǐng)求的page對(duì)象
獲取web.xml配置信息的config對(duì)象
獲取異常信息exception對(duì)象
頁面上下文的pageContext對(duì)象
page:只在一個(gè)頁面中保存屬性,跳轉(zhuǎn)之后無交效拣宏。
request:只有一次請(qǐng)求中保存沈贝,服務(wù)器跳轉(zhuǎn)后依然有效。
sesscion:在一次會(huì)話范圍中蚀浆,無論何種跳轉(zhuǎn)都可以使用缀程,但是開瀏覽器無法使用搜吧。
application:在整個(gè)服務(wù)器上保存市俊,所有用戶都可以使用杨凑。
【摘自百度百科】
request
request 對(duì)象是 javax.servlet.httpServletRequest類型的對(duì)象。 該對(duì)象代表了客戶端的請(qǐng)求信息摆昧,主要用于接受通過HTTP協(xié)議傳送到服務(wù)器的數(shù)據(jù)撩满。(包括頭信息、系統(tǒng)信息绅你、請(qǐng)求方式以及請(qǐng)求參數(shù)等)伺帘。request對(duì)象的作用域?yàn)橐淮握?qǐng)求。
response
response 代表的是對(duì)客戶端的響應(yīng)忌锯,主要是將JSP容器處理過的對(duì)象傳回到客戶端伪嫁。response對(duì)象也具有作用域,它只在JSP頁面內(nèi)有效偶垮。张咳、、對(duì)象response是服務(wù)器端向客戶端返回的數(shù)據(jù)似舵,從這個(gè)對(duì)象中間可以取出一部分與服務(wù)器互動(dòng)的數(shù)據(jù)和信息脚猾。只有接受這個(gè)對(duì)象的頁面才可以訪問這個(gè)對(duì)象。對(duì)象response用來對(duì)客戶的請(qǐng)求做出動(dòng)態(tài)的響應(yīng)砚哗,向客戶端發(fā)送數(shù)據(jù)龙助。
session
對(duì)象session維護(hù)著客戶端用戶和服務(wù)器端的狀態(tài),從這個(gè)對(duì)象中間可以取出用戶和服務(wù)器交互的過程中的數(shù)據(jù)和信息蛛芥。這個(gè)對(duì)象在用戶關(guān)閉瀏覽器離開Web 應(yīng)用之前一直有效提鸟。
1.什么是session:從一個(gè)客戶打開瀏覽器并連接到服務(wù)器開始,到客戶關(guān)閉瀏覽器離開這個(gè)服務(wù)器結(jié)束仅淑,被稱為一個(gè)會(huì)話称勋。當(dāng)一個(gè)客戶訪問一個(gè)服務(wù)器時(shí),可能會(huì)在這個(gè)服務(wù)器的幾個(gè)頁面之間反復(fù)連接漓糙,反復(fù)刷新一個(gè)頁面铣缠,服務(wù)器應(yīng)當(dāng)通過某種辦法知道這是同一個(gè)客戶,這就需要session對(duì)象昆禽。
2.session對(duì)象的ID:當(dāng)一個(gè)客戶首次訪問服務(wù)器上的一個(gè)JSP頁面時(shí)蝗蛙,JSP引擎產(chǎn)生一個(gè)session對(duì)象,同時(shí)分配一個(gè)String類型的ID號(hào)醉鳖,JSP引擎同時(shí)將這個(gè)ID號(hào)發(fā)送到客戶端捡硅,存放在Cookie中,這樣session對(duì)象和客戶之間就建立了一一對(duì)應(yīng)的關(guān)系盗棵。當(dāng)客戶再訪問連接該服務(wù)器的其他頁面時(shí)壮韭,不再分配給客戶新的session對(duì)象北发,直到客戶關(guān)閉瀏覽器后,服務(wù)器端該客戶的session對(duì)象才取消喷屋,并且和客戶的會(huì)話對(duì)應(yīng)關(guān)系消失琳拨。當(dāng)客戶重新打開瀏覽器再連接到該服務(wù)器時(shí),服務(wù)器為該客戶再創(chuàng)建一個(gè)新的session對(duì)象屯曹。
3.session對(duì)象存在一定時(shí)間過期問題狱庇,所以存在session中的名值對(duì)會(huì)在一定時(shí)間后失去,可以通過更改session有效時(shí)間來避免這種情況恶耽。同時(shí)編程時(shí)盡量避免將大量有效信息存儲(chǔ)在session中密任,request是一個(gè)不錯(cuò)的替代對(duì)象。
application
1.什么是application:
服務(wù)器啟動(dòng)后就產(chǎn)生了這個(gè)application對(duì)象偷俭,當(dāng)客戶在所訪問的網(wǎng)站的各個(gè)頁面之間瀏覽時(shí)浪讳,這個(gè)application對(duì)象都是同一個(gè),直到服務(wù)器關(guān)閉涌萤。但是與session不同的是淹遵,所有客戶的application對(duì)象都是同一個(gè),即所有客戶共享這個(gè)內(nèi)置的application對(duì)象形葬。
2.a(chǎn)pplication對(duì)象常用方法:
(1)public void setAttribute(String key,Object obj): 將參數(shù)Object指定的對(duì)象obj添加到application對(duì)象中合呐,并為添加的對(duì)象指定一個(gè)索引關(guān)鍵字。
(2)public Object getAttribute(String key): 獲取application對(duì)象中含有關(guān)鍵字的對(duì)象笙以。
out
out 對(duì)象用于在Web瀏覽器內(nèi)輸出信息淌实,并且管理應(yīng)用服務(wù)器上的輸出緩沖區(qū)。在使用 out 對(duì)象輸出數(shù)據(jù)時(shí)猖腕,可以對(duì)數(shù)據(jù)緩沖區(qū)進(jìn)行操作拆祈,及時(shí)清除緩沖區(qū)中的殘余數(shù)據(jù),為其他的輸出讓出緩沖空間倘感。待數(shù)據(jù)輸出完畢后放坏,要及時(shí)關(guān)閉輸出流。
page
page 對(duì)象代表JSP本身老玛,只有在JSP頁面內(nèi)才是合法的淤年。 page隱含對(duì)象本質(zhì)上包含當(dāng)前 Servlet接口引用的變量,類似于Java編程中的 this 指針蜡豹。
config
config 對(duì)象的主要作用是取得服務(wù)器的配置信息麸粮。通過 pageContext對(duì)象的 getServletConfig() 方法可以獲取一個(gè)config對(duì)象。當(dāng)一個(gè)Servlet 初始化時(shí)镜廉,容器把某些信息通過 config對(duì)象傳遞給這個(gè) Servlet弄诲。 開發(fā)者可以在web.xml 文件中為應(yīng)用程序環(huán)境中的Servlet程序和JSP頁面提供初始化參數(shù)。
exception
java.lang.Throwable 的實(shí)例娇唯,該實(shí)例代表其他頁面中的異常和錯(cuò)誤齐遵。只有當(dāng)頁面是錯(cuò)誤處理頁面寂玲,即編譯指令page 的isErrorPage 屬性為true 時(shí),該對(duì)象才可以使用梗摇。常用的方法有g(shù)etMessage()和printStackTrace()等拓哟。
pageContext
pageContext 對(duì)象的作用是取得任何范圍的參數(shù),通過它可以獲取 JSP頁面的out留美、request彰檬、reponse伸刃、session谎砾、application 等對(duì)象。pageContext對(duì)象的創(chuàng)建和初始化都是由容器來完成的捧颅,在JSP頁面中可以直接使用 pageContext對(duì)象景图。
jsp特點(diǎn)
JSP技術(shù)所開發(fā)的Web應(yīng)用程序是基于Java的,它擁有Java語言跨平臺(tái)的特性碉哑,以及業(yè)務(wù)代碼分離挚币、組件重用、基礎(chǔ)Java Servlet功能和預(yù)編譯等特征扣典。
- 跨平臺(tái)
既然JSP是基于Java語言的妆毕,那么它就可以使用Java API,所以它也是跨平臺(tái)的贮尖,可以應(yīng)用在不同的系統(tǒng)中笛粘,如Windows、Linux湿硝、Mac和Solaris等薪前。這同時(shí)也拓寬了JSP可以使用的Web服務(wù)器的范圍。另外关斜,應(yīng)用于不同操作系統(tǒng)的數(shù)據(jù)庫也可以為JSP服務(wù)示括,JSP使用JDBC技術(shù)操作數(shù)據(jù)庫,從而避免了代碼移植導(dǎo)致更換數(shù)據(jù)庫時(shí)的代碼修改問題痢畜。
正是因?yàn)榭缙脚_(tái)的特性垛膝,使得采用JSP技術(shù)開發(fā)的項(xiàng)目可以不加修改地應(yīng)用到任何不同的平臺(tái)上,這也應(yīng)驗(yàn)了Java語言的"一次編寫丁稀,到處運(yùn)行"的特點(diǎn)吼拥。
- 業(yè)務(wù)代碼分離
采用JSP技術(shù)開發(fā)的項(xiàng)目,通常使用HTML語言來設(shè)計(jì)和格式化靜態(tài)頁面的內(nèi)容二驰,而使用JSP標(biāo)簽和Java代碼片段來實(shí)現(xiàn)動(dòng)態(tài)部分扔罪。程序開發(fā)人員可以將業(yè)務(wù)處理代碼全部放到JavaBean中,或者把業(yè)務(wù)處理代碼交給Servlet桶雀、Struts等其他業(yè)務(wù)控制層來處理矿酵,從而實(shí)現(xiàn)業(yè)務(wù)代碼從視圖層分離唬复。這樣JSP頁面只負(fù)責(zé)顯示數(shù)據(jù)即可,當(dāng)需要修改業(yè)務(wù)代碼時(shí)全肮,不會(huì)影響JSP頁面的代碼敞咧。
- 組件重用
JSP中可以使用JavaBean編寫業(yè)務(wù)組件,也就是使用一個(gè)JavaBean類封裝業(yè)務(wù)處理代碼或者作為一個(gè)數(shù)據(jù)存儲(chǔ)模型辜腺,在JSP頁面甚至整個(gè)項(xiàng)目中都可以重復(fù)使用這個(gè)JavaBean休建。JavaBean也可以應(yīng)用到其他Java應(yīng)用程序中,包括桌面應(yīng)用程序评疗。
- 繼承Java Servlet功能
Servlet是JSP出現(xiàn)之前的主要Java Web處理技術(shù)测砂。它接受用戶請(qǐng)求,在Servlet類中編寫所有Java和HTML代碼百匆,然后通過輸出流把結(jié)果頁面返回給瀏覽器砌些。其缺點(diǎn)是:在類中編寫HTML代碼非常不便,也不利于閱讀加匈。使用JSP技術(shù)之后存璃,開發(fā)Web應(yīng)用便變得相對(duì)簡單快捷多了,并且JSP最終要編譯成Servlet才能處理用戶請(qǐng)求雕拼,因此我們說JSP擁有Servlet的所有功能和特性纵东。
- 預(yù)編譯
預(yù)編譯就是在用戶第一次通過瀏覽器訪問JSP頁面時(shí),服務(wù)器將對(duì)JSP頁面代碼進(jìn)行編譯啥寇,并且僅執(zhí)行一次編譯偎球。編譯好的代碼將被保存,在用戶下一次訪問時(shí)示姿,直接執(zhí)行編譯好的代碼甜橱。這樣不僅節(jié)約了服務(wù)器的CPU資源,還大大提升了客戶端的訪問速度栈戳。
缺點(diǎn):
(1) 與ASP也一樣岂傲,Java的一些優(yōu)勢正是它致命的問題所在。正是由于為了跨平臺(tái)的功能子檀,為了極度的伸縮能力镊掖,所以極大的增加了產(chǎn)品的復(fù)雜性。
(2) Java的運(yùn)行速度是用class常駐內(nèi)存來完成的褂痰,所以它在一些情況下所使用的內(nèi)存比起用戶數(shù)量來說確實(shí)是“最低性能價(jià)格比”了
jsp指令與動(dòng)作
JSP 包含三個(gè)指令:page亩进、include 和 taglib。其中缩歪,使用最多的是 page 指令和 include 指令
JSP 動(dòng)作指使用 XML 語法格式的標(biāo)記來控制服務(wù)器的行為归薛。其用法如下
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8" import="java.sql.*,java.io.*"%>
jsp:include:當(dāng)頁面被請(qǐng)求時(shí)引入一個(gè)文件
<jsp:include page="文件名" />
jsp:forward:將請(qǐng)求轉(zhuǎn)到另外一個(gè)頁面
<jsp:forward page="文件名"/>
中文亂碼問題
提交過程中顯示亂碼,有 3 種方法解決這個(gè)問題
將其轉(zhuǎn)成 gb2312 格式
直接修改 request 的編碼
利用過濾器
jsp與servlet區(qū)別、應(yīng)用
JSP是Servlet技術(shù)的擴(kuò)展主籍,本質(zhì)上就是Servlet的簡易方式习贫。JSP編譯后是“類servlet”。Servlet和JSP最主要的不同點(diǎn)在于千元,Servlet的應(yīng)用邏輯是在Java文件中苫昌,并且完全從表示層中的HTML里分離開來。而JSP的情況是Java和HTML可以組合成一個(gè)擴(kuò)展名為.jsp的文件幸海。JSP側(cè)重于視圖祟身,Servlet主要用于控制邏輯。在struts框架中,JSP位于MVC設(shè)計(jì)模式的視圖層,而Servlet位于控制層.
JSP與Servlet不同之處:
1物独、簡單的來說JSP就是含有Java代碼的html袜硫,而servlet是含有html的Java代碼。
2议纯、JSP最終也是被解釋為servlet并編譯再執(zhí)行父款。
3、在MVC三層結(jié)構(gòu)中瞻凤,JSP負(fù)責(zé)V(視圖),servlet負(fù)責(zé)C(控制)世杀,各有優(yōu)勢阀参,各司其職。Servlet在功能實(shí)現(xiàn)上其實(shí)是一樣的瞻坝,可以說用JSP的能實(shí)現(xiàn)的蛛壳,Servlet也可以實(shí)現(xiàn),但是從應(yīng)用的角度來講所刀,JSP更適合做表現(xiàn)層的事情因?yàn)樗袠?biāo)簽支持衙荐,而Servlet適合做數(shù)據(jù)邏輯層的數(shù)據(jù)處理。
4浮创、Servlet 就是一個(gè)Java類忧吟,Web中應(yīng)用的應(yīng)該是HttpServerlet,Serverlet類最大的好處就是能夠提供request/response的服務(wù)器功能,當(dāng)有請(qǐng)求提交到Serverlet 時(shí)斩披,他執(zhí)行它自身的service(request,response)方法溜族。
EL & JSTL
EL定義
EL(Expression Language) 是為了使JSP寫起來更加簡單。 是JSP表達(dá)式語言垦沉,提供了JSP中簡化表達(dá)式的方法煌抒。
為方便存取數(shù)據(jù)所自定義的語言,后來成了 JSP 標(biāo)準(zhǔn)的一部分厕倍,如今 EL 已經(jīng)是一項(xiàng)成熟寡壮、標(biāo)準(zhǔn)的技術(shù)
EL 具有與表達(dá)式相同的輸出的功能,另外其還具有簡單的運(yùn)算符、訪問對(duì)象况既、簡單的JavaBean 訪問屋群、簡單的集合訪問功能
EL使用
語法結(jié)構(gòu):${ }
${sessionScope.user.sex}
上述 EL 范例的意思是:從 session 的范圍中,取得用戶的性別坏挠。顯然芍躏,使用了 EL,需要編寫輸出信息的代碼時(shí)降狠,代碼量少了对竣,工作的效率自然會(huì)提高。
- EL 提供了兩種實(shí)現(xiàn)對(duì)相應(yīng)數(shù)據(jù)存取的運(yùn)算符:.(點(diǎn)操作)和[]操作
${sessionScope.user.sex}
等價(jià)于
String str = "sex"; ${sessionScope.user[str]}
- 使用 EL 表達(dá)式訪問 JavaBean榜配,基本語法如下
? ${bean.property}
JSTL 定義
JSP標(biāo)準(zhǔn)標(biāo)簽庫(JSTL)是一個(gè)JSP標(biāo)簽集合否纬,它封裝了JSP應(yīng)用的通用核心功能。
JSTL支持通用的蛋褥、結(jié)構(gòu)化的任務(wù)临燃,比如迭代,條件判斷烙心,XML文檔操作膜廊,國際化標(biāo)簽,SQL標(biāo)簽淫茵。 除了這些爪瓜,它還提供了一個(gè)框架來使用集成JSTL的自定義標(biāo)簽。
根據(jù)JSTL標(biāo)簽所提供的功能匙瘪,可以將其分為5個(gè)類別铆铆。
核心標(biāo)簽 格式化標(biāo)簽 SQL 標(biāo)簽 XML 標(biāo)簽 JSTL 函數(shù)
JSTL 是標(biāo)準(zhǔn)的已制定好的標(biāo)簽庫,可以應(yīng)用于各種領(lǐng)域丹喻,如:基本輸入輸出薄货、流程控制、循環(huán)碍论、XML 文件剖析谅猾、數(shù)據(jù)庫查詢及國際化和文字格式標(biāo)準(zhǔn)化等應(yīng)用
JSTL的使用
使用 JSTL 必須使用 taglib 指令,taglib 指令的作用是聲明 JSP 文件使用的標(biāo)簽庫骑冗,同時(shí)引入該標(biāo)簽庫赊瞬,并指定標(biāo)簽的前綴。以聲明核心標(biāo)簽庫 core 為例贼涩,其基本語法如下:
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
必須notice各類標(biāo)簽庫的使用巧涧。
過濾器filter
Filter概述:在web服務(wù)器中,當(dāng)客戶端發(fā)起URL請(qǐng)求時(shí)遥倦,web服務(wù)器收到客戶端請(qǐng)求首先經(jīng)過過濾器谤绳,如果過濾器允許則客戶才可以到達(dá)最終的URL占锯。過濾器就象一個(gè)鏈條。介于客戶端與服務(wù)器端資源URL(如JSP,Servlet)之間缩筛。多個(gè)過濾器還可以組成一個(gè)過濾鏈消略。
Filter 不是一個(gè)servlet,它不能產(chǎn)生一個(gè)response,它能夠在一個(gè)request到達(dá)servlet之前預(yù)處理request,也可以在離開 servlet時(shí)處理response。也就是說Filter其實(shí)是一個(gè)”servlet chaining”(servlet 鏈).
一個(gè)Filter 包括:
? 在servlet被調(diào)用之前截獲;
? 在servlet被調(diào)用之前檢查servlet request;
? 根據(jù)需要修改request頭和request數(shù)據(jù);
? 根據(jù)需要修改response頭和response數(shù)據(jù);
javabean
定義
JavaBean是Java語言編寫的類瞎抛。實(shí)現(xiàn)業(yè)務(wù)層代碼艺演,它通常具有如下特點(diǎn):
這個(gè)Java類必須具有一個(gè)無參的構(gòu)造函數(shù)
屬性必須私有化。
私有化的屬性必須通過public類型的方法暴露給其它程序桐臊,并且方法的命名也必須遵守一定的命名規(guī)范
JavaBean 有廣義的和狹義的兩種概念胎撤。廣義的 JavaBean 是指普通的 Java 類;狹義的JavaBean 是指嚴(yán)格按照 JavaBean 規(guī)范編寫的 Java 類
JavaBean的屬性可以是任意類型断凶,并且一個(gè)JavaBean可以有多個(gè)屬性伤提。每個(gè)屬性通常都需要具有相應(yīng)的setter、 getter方法认烁,setter方法稱為屬性修改器肿男,getter方法稱為屬性訪問器。
屬性修改器必須以小寫的set前綴開始却嗡,后跟屬性名舶沛,且屬性名的第一個(gè)字母要改為大寫,例如稽穆,name屬性的修改器名稱為setName冠王,password屬性的修改器名稱為setPassword。
屬性訪問器通常以小寫的get前綴開始舌镶,后跟屬性名,且屬性名的第一個(gè)字母也要改為大寫豪娜,例如餐胀,name屬性的訪問器名稱為getName,password屬性的訪問器名稱為getPassword瘤载。
一個(gè)JavaBean的某個(gè)屬性也可以只有set方法或get方法否灾,這樣的屬性通常也稱之為只寫、只讀屬性鸣奔。
特殊 JavaBean 屬性
給 boolean 類型設(shè)置屬性墨技,要將 getter 方法改為 is 方法
數(shù)組屬性
jsp相關(guān)javabean標(biāo)簽
JSP技術(shù)提供了三個(gè)關(guān)于JavaBean組件的動(dòng)作元素,即JSP標(biāo)簽挎狸,它們分別為:
<jsp:useBean>標(biāo)簽:用于在JSP頁面中查找或?qū)嵗粋€(gè)JavaBean組件扣汪。
<jsp:setProperty>標(biāo)簽:用于在JSP頁面中設(shè)置一個(gè)JavaBean組件的屬性。
<jsp:getProperty>標(biāo)簽:用于在JSP頁面中獲取一個(gè)JavaBean組件的屬性锨匆。
xml
定義
XML即可擴(kuò)展的標(biāo)記語言崭别,可以定義語義標(biāo)記,是元標(biāo)記語言。XML與超文本標(biāo)記語言HTML不同茅主,HTML只能使用規(guī)定的標(biāo)記舞痰,對(duì)于XML,用戶可以定義自己需要的標(biāo)記诀姚。本質(zhì)上XML文件是一個(gè)純文本文件响牛。
它和json都是一種數(shù)據(jù)交換格式
作用
1、XML可用于存儲(chǔ)數(shù)據(jù)
通過使用XML赫段,純文本文件可用于存儲(chǔ)數(shù)據(jù)呀打。也可使用XML將數(shù)據(jù)存儲(chǔ)于文件或數(shù)據(jù)庫之中∪鹋澹可以編寫從數(shù)據(jù)倉庫中存儲(chǔ)信息的應(yīng)用程序聚磺,而普通的應(yīng)用程序就可被用來顯示這些數(shù)據(jù)。XML使您的數(shù)據(jù)更有用通過使用XML炬丸,您的數(shù)據(jù)可供更多的用戶使用陵吸。
2、XML用于交換數(shù)據(jù)
通過使用XML钢悲,可以在互不兼容的系統(tǒng)間交換數(shù)據(jù)屯烦。在現(xiàn)實(shí)世界中,計(jì)算機(jī)系統(tǒng)和數(shù)據(jù)庫通過互不兼容的格式來容納數(shù)據(jù)首启。對(duì)開發(fā)人員來說暮屡,其中一項(xiàng)最費(fèi)時(shí)的挑戰(zhàn)一直是在因特網(wǎng)上的系統(tǒng)之間交換數(shù)據(jù)。通過將數(shù)據(jù)轉(zhuǎn)換為XML毅桃,可以極大地降低這種復(fù)雜性褒纲,并創(chuàng)建可被許多不同類型的應(yīng)用程序讀取的數(shù)據(jù)。
3钥飞、XML可被用來共享數(shù)據(jù)
通過使用XML莺掠,純文本文件可用于共享數(shù)據(jù)。XML提供了獨(dú)立于軟硬件的數(shù)據(jù)共享解決方案读宙。這使得不同的應(yīng)用程序都可以更容易地創(chuàng)建數(shù)據(jù)彻秆。
合法
合法的XML文件:
1、文檔必須包含一個(gè)或多個(gè)元素(不能為空)
2结闸、每個(gè)XML文件有且僅有一個(gè)聲明
<?xml version = "1.0" standalone = "no" encoding = "GB2312" ? >
3唇兑、每個(gè)xml文件有且僅有一個(gè)根節(jié)點(diǎn)。
4桦锄、每個(gè)XML標(biāo)記嚴(yán)格區(qū)分大小寫扎附,開始標(biāo)記與結(jié)束標(biāo)記配對(duì)出現(xiàn)或空標(biāo)記關(guān)閉。
5察纯、標(biāo)記可以嵌套但不可以交叉帕棉。
6针肥、屬性必須由名稱與值構(gòu)成,出現(xiàn)元素開始標(biāo)記中香伴。
DTD
通過制定DTD文檔慰枕,XML的數(shù)據(jù)格式就會(huì)得到約束,從而使數(shù)據(jù)交換有一個(gè)依據(jù)即纲,在數(shù)據(jù)發(fā)送和接收時(shí)據(jù)此進(jìn)行合法性的驗(yàn)證具帮。
當(dāng)打開DTD關(guān)聯(lián)XML文檔時(shí),就要使DTD在該XML文檔中起作用低斋,XML文檔中如果出現(xiàn)違反DTD規(guī)則的定義之處蜂厅,就會(huì)出錯(cuò)。
XML文檔必須滿足兩個(gè)正確的標(biāo)準(zhǔn):
一個(gè)就是格式要正確膊畴,要滿足基本的XML語法規(guī)則掘猿;
一個(gè)是滿足DTD中制定的關(guān)于XML文檔元素的有關(guān)規(guī)則,即使DTD或XML有效唇跨。
DTD的聲明方法是:
<!DOCTYPE 根元素名稱 [定義的內(nèi)容]>
其中稠通,[定義的內(nèi)容]用標(biāo)簽<!ELEMENT>來分別定義所包含的子元素名稱以及每一個(gè)子元素的數(shù)據(jù)類型。
內(nèi)部DTD 外部DTD
XML Schema
Schema是由一組元素構(gòu)成的买猖,其根元素是<Schema>改橘。
<Schema>元素是XML Schema中第一個(gè)出現(xiàn)的元素,用來表明該XML文檔是一個(gè)Schema文檔玉控,其結(jié)束標(biāo)記對(duì)應(yīng)地為</Schema>飞主。
一個(gè)Schema文檔的基本結(jié)構(gòu)如下:
<Schema name=”Schema名字” xmlns=”命名空間”>
DOM & SAX
如果需要在不同的應(yīng)用程序中存取XML文檔中的數(shù)據(jù),這樣的分析器代碼就要被重寫多次高诺。
很明顯地碌识,需要一個(gè)統(tǒng)一的XML接口,借助它可以對(duì)XML文檔進(jìn)行比較方便的存取操作虱而。
有兩種標(biāo)準(zhǔn)應(yīng)用程序接口:DOM和SAX丸冕,它們是由W3C和XML_DEV分別提出的。
DOM
DOM的全稱是Document Object Model薛窥,即文檔對(duì)象模型。
在應(yīng)用程序中眼姐,基于DOM的XML分析器將一個(gè)XML文檔轉(zhuǎn)換成一個(gè)對(duì)象模型的集合诅迷,也可以稱之為DOM樹。
應(yīng)用程序通過對(duì)這個(gè)對(duì)象模型的操作众旗,實(shí)現(xiàn)對(duì)XML文檔的數(shù)據(jù)的操作罢杉。
通過DOM接口,應(yīng)用程序可以在任何時(shí)候訪問XML文檔中的任何一部分?jǐn)?shù)據(jù)贡歧。
DOM接口提供了一種通過分層對(duì)象模型來訪問XML文檔信息的方式滩租,這些分層對(duì)象模型依據(jù)XML的文檔結(jié)構(gòu)形成一棵節(jié)點(diǎn)樹赋秀。
不論XML文檔中描述的是什么類型的數(shù)據(jù)信息,在DOM所生成的模型中都是節(jié)點(diǎn)樹形式律想。
借助DOM接口可以對(duì)XML文檔中任何部分進(jìn)行隨機(jī)訪問猎莲。
當(dāng)分析的文檔比較大結(jié)構(gòu)比較復(fù)雜時(shí),XML文檔經(jīng)轉(zhuǎn)換生成的DOM樹也相應(yīng)地大而繁雜技即。
SAX
SAX的全稱是Simple APIs for XML著洼,即XML簡單應(yīng)用程序接口。
與DOM不同而叼,SAX的訪問模式是一種順序模式身笤,當(dāng)使用SAX進(jìn)行文檔解析時(shí),會(huì)觸發(fā)一系列事件葵陵,并激活相對(duì)應(yīng)的時(shí)間處理方法(函數(shù))液荸。
應(yīng)用程序通過這些事件處理方法實(shí)現(xiàn)對(duì)XML文檔的訪問,因此SAX接口被稱之為事件驅(qū)動(dòng)接口脱篙。
與DOM相比娇钱,SAX是一種輕量型的方法。
在處理DOM的時(shí)候涡尘,需要讀入整個(gè)XML文檔忍弛,在文檔比較大的時(shí)候,處理時(shí)間和內(nèi)存占用都很大考抄。
與DOM不同细疚,SAX是事件驅(qū)動(dòng)的,就是說川梅,它不需要讀入整個(gè)文檔疯兼,而是一邊讀入文檔,一邊進(jìn)行解析贫途。
解析開始之前吧彪,需要向XMLReader注冊(cè)一個(gè)ContentHandler,就是一個(gè)事件監(jiān)聽器丢早。
在ContentHandler中定義了若干方法姨裸,在解析文檔的不同階段被自動(dòng)調(diào)用。
1.簡述什么是XML怨酝?什么是DTD傀缩?什么是Schema?
2.什么是DOM农猬?簡述其作用赡艰。
3.什么是SAX?簡述其作用斤葱。
4.實(shí)現(xiàn)一訪問XML文檔的DOM程序慷垮。
5.實(shí)現(xiàn)一訪問XML文檔的SAX程序揖闸。
Xml 和 Json
詳細(xì)對(duì)比: https://www.cnblogs.com/SanMaoSpace/p/3139186.html
https://www.cnblogs.com/linjiyeah/p/4053289.html
·JSON
JSON(Javascript Object Notation,Javascript對(duì)象表示法)是一種輕量級(jí)的數(shù)據(jù)格式料身,而不是一種編程語言汤纸。它利用Javascript中某些模式來表示結(jié)構(gòu)化數(shù)據(jù),通過eval()方法惯驼,Javascript能夠把這種數(shù)據(jù)格式轉(zhuǎn)化為對(duì)應(yīng)的js類型來使用蹲嚣。
.XML
XML(Extensible Markup Language,可擴(kuò)展性標(biāo)記語言)是一種用來交換數(shù)據(jù)的標(biāo)記語言祟牲,而同樣是標(biāo)記語言的HTML(HyperText Markup Language隙畜,超文本標(biāo)記語言)則是用來顯示數(shù)據(jù)的標(biāo)記語言。它允許用戶自定義標(biāo)簽來標(biāo)記數(shù)據(jù)和定義數(shù)據(jù)類型说贝。
·聯(lián)系
JSON和XML均是可跨平臺(tái)使用的议惰,且它們都是用于交換數(shù)據(jù)所用。后者相對(duì)而言更具有歷史性乡恕,所以通用性也自然地比較搶言询,而且它衍生出很多其他的語言,譬如SVG(這個(gè)東西我正在緩慢研究)傲宜、RSS等等运杭。
但由于JSON格式簡單直白,且一般是壓縮形式出現(xiàn)函卒,所以請(qǐng)求文件的大小自然縮小辆憔。因此,前端工程師們應(yīng)該都不會(huì)不愛它吧报嵌。
JQuery & Ajax
JQuery定義
JQuery是繼prototype之后又一個(gè)優(yōu)秀的Javascript框架虱咧,JQuery是一個(gè)快速的、簡潔的JavaScript函數(shù)庫锚国,使用戶能更方便地處理HTML文檔腕巡、事件、實(shí)現(xiàn)動(dòng)畫效果血筑,并且方便地為網(wǎng)站提供AJAX交互绘沉。JQuery還有一個(gè)比較大的優(yōu)勢是,它的文檔說明很全豺总,而且各種應(yīng)用也描述得很詳細(xì)梆砸,同時(shí)還有許多成熟的插件可供選擇。
JQuery 特性
JQuery包含以下特性:HTML 元素選取园欣、HTML 元素操作、CSS 操作休蟹、HTML 事件函數(shù)沸枯、JavaScript 特效和動(dòng)畫日矫、HTML DOM 遍歷和修改、AJAX绑榴。?Utilities
JQuery用法
jQuery 元素選擇器和屬性選擇器允許通過標(biāo)簽名哪轿、屬性名或內(nèi)容對(duì) HTML 元素進(jìn)行選擇。
JQuery + ajax(Xml)
? Ajax(Asynchronous JavaScript and XML)即異步JavaScript和XML技術(shù)翔怎。是結(jié)合了Java技術(shù)窃诉、XML以及JavaScript等編程技術(shù)。Ajax是使用客戶端腳本與Web服務(wù)器交換數(shù)據(jù)的Web應(yīng)用開發(fā)方法赤套。 【幾種技術(shù)的結(jié)合】
異步這個(gè)詞是指AJAX應(yīng)用軟件與主機(jī)服務(wù)器進(jìn)行聯(lián)系的方式飘痛。如果使用舊模式,每當(dāng)用戶執(zhí)行某種操作容握、向服務(wù)器請(qǐng)求獲得新數(shù)據(jù)宣脉,Web瀏覽器就會(huì)更新當(dāng)前窗口。如果使用AJAX的異步模式剔氏,瀏覽器就不必等用戶請(qǐng)求操作塑猖,也不必更新整個(gè)窗口就可以顯示新獲取的數(shù)據(jù)。只要來回傳送采用XML格式的數(shù)據(jù)谈跛,在瀏覽器里面運(yùn)行的JavaScript代碼就可以與服務(wù)器進(jìn)行聯(lián)系羊苟。JavaScript代碼還可以把樣式表加到檢索到的數(shù)據(jù)上,然后在現(xiàn)有網(wǎng)頁的某個(gè)部分加以顯示感憾。Google和百度的搜索框中的智能感知等使用了Ajax技術(shù)蜡励。Web頁面不用打斷交互流程進(jìn)行重新加裁,就可以動(dòng)態(tài)地更新吹菱。
請(qǐng)求和響應(yīng)過程
?(1)網(wǎng)頁調(diào)用JavaScript程序巍虫。
?(2)JavaScript利用瀏覽器提供的XMLHTTP對(duì)象向Web服務(wù)器發(fā)送請(qǐng)求。
?(3)請(qǐng)求的URL資源處理后返回結(jié)果給瀏覽器的XMLHTTP對(duì)象鳍刷。
?(4)XMLHTTP對(duì)象調(diào)用實(shí)現(xiàn)設(shè)置的處理方法占遥。
?(5)JavaScript方法解析返回的數(shù)據(jù),利用返回的數(shù)據(jù)更新頁面输瓜。
JQuery + json
json定義
JSON概念很簡單瓦胎,JSON 是一種輕量級(jí)的數(shù)據(jù)格式,JSON是 JavaScript語法的子集尤揣,即數(shù)組和對(duì)象表示搔啊。由于使用的是 JavaScript語法,因此JSON 定義可以包含在JavaScript文件中北戏,對(duì)其的訪問無需通過XML解析负芋。
簡單地說,JSON 可以將 JavaScript對(duì)象中表示的一組數(shù)據(jù)轉(zhuǎn)換為字符串嗜愈,然后就可以在函數(shù)之間輕松地傳遞這個(gè)字符串旧蛾,或者在異步應(yīng)用程序中將字符串從 Web 客戶端傳遞給服務(wù)器端程序莽龟。
json 數(shù)據(jù)表示方式
1、JSON 表示名稱/值對(duì):
{ "StudentName": "zhangliuwen" }
2锨天、包含多個(gè)名稱--值對(duì):
{ " StudentName ": "zhou", "email": "zhou@mycom.com" }
3毯盈、值的數(shù)組:
當(dāng)需要表示一組值時(shí),JSON 不但能夠提高可讀性病袄,而且可以減少復(fù)雜性搂赋。使用 JSON,就只需將多個(gè)帶花括號(hào)的記錄分組在一起:
{ "students": [
{ " StudentName ": "zhou", "email": "zhou@mycom.com"},
{ " StudentName ": "zhang", "email": "zhang@mycom.com" },
{ " StudentName ": "liu", "email": "liu@mycom.com"} ]}
Ajax 相關(guān)
Questions:
Ajax 技術(shù)的原理
能否在登錄提交時(shí)益缠,瀏覽器界面不刷新脑奠,提交改為在后臺(tái)異步進(jìn)行,當(dāng)服務(wù)器端驗(yàn)證完畢左刽,將結(jié)果在界面上原來登錄表單所在的位置顯示出來捺信?
答案:使用Ajax
異步同步
異步(Asynchronous)的概念和同步(Synchronous)相對(duì)。當(dāng)一個(gè)異步過程調(diào)用發(fā)出后欠痴,調(diào)用者不需要立刻得到結(jié)果迄靠,可以繼續(xù)做自己的事情,等到過程調(diào)用完畢喇辽,再通過回調(diào)函數(shù)通知調(diào)用方掌挚。而同步情況下,調(diào)用方必須等待對(duì)方得到結(jié)果菩咨,才能繼續(xù)運(yùn)行
Ajax 包含內(nèi)容
1.異步數(shù)據(jù)獲取技術(shù)吠式,使用 XMLHttpRequest
2.基于標(biāo)準(zhǔn)的表示技術(shù),使用 XHTML 與 CSS
3.動(dòng)態(tài)顯示和交互技術(shù)抽米,使用 Document Object Model(文檔對(duì)象模型)
4.數(shù)據(jù)互換和操作技術(shù)特占,使用 XML 與 XSLT
5.Html/XHtml:實(shí)現(xiàn)頁面內(nèi)容的表示。
6.JavaScript云茸,將以上技術(shù)融合在一起
Html/XHtml:實(shí)現(xiàn)頁面內(nèi)容的表示
CSS:格式化文本內(nèi)容是目。
DOM:對(duì)頁面內(nèi)容進(jìn)行動(dòng)態(tài)更新。
XML:實(shí)現(xiàn)數(shù)據(jù)交換和格式轉(zhuǎn)化标捺。
XMLHttpRequest對(duì)象:實(shí)現(xiàn)與服務(wù)器異步通信懊纳。
JavaScript:實(shí)現(xiàn)以上所有技術(shù)的融合。
Ajax優(yōu)點(diǎn)&缺點(diǎn)
優(yōu)點(diǎn):
1.減輕服務(wù)器負(fù)擔(dān)亡容,避免整個(gè)瀏覽器窗口刷新時(shí)造成的重復(fù)請(qǐng)求
2.帶來更好的用戶體驗(yàn)
3.進(jìn)一步促進(jìn)頁面呈現(xiàn)和數(shù)據(jù)本身的分離等
缺點(diǎn):
1.對(duì)瀏覽器具有一定的限制嗤疯,對(duì)于不兼容的瀏覽器,可能無法使用闺兢。
2.Ajax 沒有刷新頁面茂缚,瀏覽器上的"后退"按鈕是失效的,因此,客戶經(jīng)常無法回退到以前的操作
Ajax應(yīng)用場合
1.數(shù)據(jù)驗(yàn)證(保證數(shù)據(jù)唯一性等) 2.按需取數(shù)據(jù) 3.自動(dòng)更新頁面(天氣股市等實(shí)時(shí)更新)