特殊教育081實(shí)習(xí)總結(jié)
特殊教育081班帶隊(duì)教師實(shí)習(xí)總結(jié)
實(shí)習(xí)地點(diǎn):齊齊哈爾特殊教育學(xué)校
帶隊(duì)教師:張雨龍王冬梅
時(shí)間:201*年4月5日201*年4月30日
為了更好的體現(xiàn)和運(yùn)用學(xué)!澳苡谩蛴、會(huì)用、適用”的八字
方針,按照學(xué)校的教育實(shí)習(xí)計(jì)劃,特殊教育專業(yè),08級(jí)全體學(xué)生自4月5日起至4月30日止在齊齊哈爾市特殊教育學(xué)習(xí)進(jìn)行了為期一個(gè)月的教育實(shí)習(xí)活動(dòng)。特殊教育專業(yè)共有學(xué)生21人,其中男生3人,女生18人。通過(guò)和實(shí)習(xí)學(xué)校相關(guān)領(lǐng)導(dǎo)的協(xié)商,把21名同學(xué)共分成10組,每組2-3人,分別分派到小學(xué)二年級(jí)至高中二年級(jí)的十個(gè)班級(jí)中。實(shí)習(xí)的工作任務(wù)一共有兩個(gè)部分:一部分是班主任工作,另一部分是教學(xué)工作,也就是說(shuō)既要求學(xué)生帶班又要求學(xué)生進(jìn)行課堂的教課。希望通過(guò)一個(gè)月的實(shí)習(xí)生活讓特殊教育專業(yè)的同學(xué)更多的接觸特殊學(xué)校的殘疾、聾啞及智障兒童,使他們更多的了解在特教學(xué)校的教師采用的有別于正常學(xué)校學(xué)生的教育和授課的方式、方法。最后,在實(shí)習(xí)結(jié)束的時(shí)候很多學(xué)生都和實(shí)習(xí)學(xué)校的同學(xué)以及帶課老師建立了深厚的感情,臨走之前,許多學(xué)生都有些依依不舍,還有一部分學(xué)生流下來(lái)眼淚。
在整個(gè)的實(shí)習(xí)過(guò)程中,全體同學(xué)都進(jìn)行了6-8節(jié)的課堂實(shí)際授課操練。很多同學(xué)第一次上講臺(tái)時(shí),感覺(jué)很緊張,講話的速度特別的快,對(duì)課程的把握和授課進(jìn)度也比正常的授課進(jìn)度要快。但是經(jīng)過(guò)后來(lái)的鍛煉,講話的速度逐漸放慢,而且越講越熟練,越講越流暢,聽課的學(xué)生都對(duì)實(shí)習(xí)教師的講授知識(shí)有很好的理解和吸收。尤其是實(shí)習(xí)學(xué)生的課堂駕馭能力有了很大提高,他們不但可以良好地控制授課時(shí)間,也能夠適時(shí)地調(diào)動(dòng)起學(xué)生的積極性,使課堂氣氛活躍起來(lái)。在課程結(jié)束后,進(jìn)行的課堂小測(cè)驗(yàn)中,也反映出學(xué)生對(duì)本節(jié)課的知識(shí)點(diǎn)也理解很清楚。
另外一項(xiàng)重要的實(shí)習(xí)任務(wù)就是要求每一位學(xué)生做好班主任工作。班主任作為全面關(guān)心學(xué)生成長(zhǎng)的主要教師、學(xué)生主要的精神關(guān)懷者、是影響學(xué)生發(fā)展的重要他人,他們肩負(fù)著神圣而又重要的職責(zé)。尤其對(duì)于特殊教育學(xué)校那些身心有殘疾的孩子,班主任的作用更加的重要和巨大。在學(xué)校里,他們就是學(xué)生的第一監(jiān)護(hù)人,所以班主任的日常工作非,嵥椤1M管如此,本次去實(shí)習(xí)的21名學(xué)生沒(méi)有被班主任工作的困難所嚇到,通過(guò)實(shí)習(xí)學(xué)校指導(dǎo)教師的反饋,所有的學(xué)生都出色的完成了班主任的工作,而且還有一部分學(xué)生組織了一堂生動(dòng)的班團(tuán)會(huì)。
實(shí)習(xí)結(jié)束后,通過(guò)學(xué)生授課情況的展示和實(shí)習(xí)學(xué)校師生的反饋,本次實(shí)習(xí)取得的良好的效果,參加實(shí)習(xí)的學(xué)生在教學(xué)能力、教學(xué)方法和教學(xué)組織等方面都獲得了很大的提高和進(jìn)步。尤其是通過(guò)實(shí)習(xí)使學(xué)生們真正體會(huì)到教師崗位的神圣與崇高,這些都是學(xué)生們?cè)谛W(xué)習(xí)中不曾接觸過(guò)或者學(xué)習(xí)過(guò)的地方。
與此同時(shí),作為實(shí)習(xí)的帶隊(duì)教師,也發(fā)現(xiàn)了本次參加實(shí)習(xí)的學(xué)
生身上存在的一些問(wèn)題,具體如下:
第一:部分同學(xué)對(duì)自己要求不嚴(yán)格,不能按照實(shí)習(xí)學(xué)校的時(shí)間要求參加實(shí)習(xí)活動(dòng),有晚來(lái)早走的現(xiàn)象存在。
第二:通過(guò)聽課的反饋,發(fā)現(xiàn)個(gè)別同學(xué)授課時(shí)板書不規(guī)范,粉筆字書寫不流暢,同時(shí)講課的聲音過(guò)小。
第三:在實(shí)習(xí)中發(fā)現(xiàn)有一部分學(xué)生對(duì)本專業(yè)的知識(shí)掌握的不夠清楚準(zhǔn)確,有一些學(xué)生在授課時(shí)有講錯(cuò)知識(shí)點(diǎn)的現(xiàn)象發(fā)生。
為了更好的提高學(xué)生實(shí)習(xí)的質(zhì)量,通過(guò)總結(jié)本次實(shí)習(xí)中出現(xiàn)的問(wèn)題,特此提出如下的改進(jìn)方法:
首先,在今后的課堂教學(xué)中,要加大和重視學(xué)生對(duì)基礎(chǔ)知識(shí)和基本技能的學(xué)習(xí)和訓(xùn)練。加強(qiáng)學(xué)生理論課程的學(xué)習(xí)。
其次,加強(qiáng)對(duì)學(xué)生的思想教育,嚴(yán)明考勤記錄。
最后,加強(qiáng)學(xué)生的板書訓(xùn)練,在日常的教學(xué)中,提高學(xué)生粉筆字的書寫能力。
總體上來(lái)說(shuō),本次實(shí)習(xí)無(wú)論是從學(xué)生的個(gè)人素質(zhì)提高,還是從實(shí)習(xí)學(xué)校的反饋信息中,都可以看出,本次實(shí)習(xí)取得了良好的實(shí)習(xí)效果。在實(shí)習(xí)中,特殊教育的學(xué)生各方面的能力都得到了鍛煉和提高,這也會(huì)對(duì)他們今后的學(xué)習(xí)、生活和工作產(chǎn)生深遠(yuǎn)的影響。相信通過(guò)本次實(shí)習(xí)活動(dòng),這些學(xué)生將會(huì)不斷努力,攀登人生的最高峰,最終成為一名合格的人民教師。
201*年5月4日
擴(kuò)展閱讀:計(jì)機(jī)081-曾銳-實(shí)習(xí)總結(jié)報(bào)告
仲愷農(nóng)業(yè)工程學(xué)院
實(shí)習(xí)總結(jié)報(bào)告
實(shí)習(xí)環(huán)節(jié)畢業(yè)實(shí)習(xí)
院系計(jì)算機(jī)科學(xué)與工程學(xué)院班級(jí)計(jì)算機(jī)科學(xué)與技術(shù)081班學(xué)生姓名曾銳
學(xué)號(hào)201*10214124指導(dǎo)教師陳勇
實(shí)習(xí)單位廣州思普計(jì)算機(jī)科技有限公司實(shí)習(xí)時(shí)間201*-2-20201*-3-23
二○一二年三月三十日目錄
一、實(shí)習(xí)目的...........................................................................................................................................................1二、單位介紹...........................................................................................................................................................1
2.1實(shí)習(xí)單位介紹.............................................................................................................................................12.2實(shí)習(xí)時(shí)間.....................................................................................................................................................2三、實(shí)習(xí)內(nèi)容...........................................................................................................................................................2
3.1java環(huán)境的配置..........................................................................................................................................2
3.1.1windowsxp下配置JDK環(huán)境變量.................................................................................................23.1.2Linux下配置JDK環(huán)境變量...........................................................................................................33.2HTML基礎(chǔ).................................................................................................................................................4
3.2.1HTML簡(jiǎn)述......................................................................................................................................43.2.2HTML示例......................................................................................................................................53.3CSS基礎(chǔ).....................................................................................................................................................6
3.3.1CSS簡(jiǎn)述..........................................................................................................................................63.3.2CSS語(yǔ)法..........................................................................................................................................73.3.2.1CSS定義....................................................................................................................................73.3.2.2選擇符組....................................................................................................................................73.3.2.3類選擇符....................................................................................................................................73.3.2.4ID選擇符..................................................................................................................................83.3.2.5包含選擇符...............................................................................................................................83.3.2.6樣式表的層疊性.......................................................................................................................93.3.2.7注釋:/*...*/.......................................................................................................................93.3.3將樣式表加入到網(wǎng)頁(yè)....................................................................................................................103.3.3.1定義內(nèi)部樣式塊對(duì)象..............................................................................................................103.3.3.2內(nèi)聯(lián)定義(InlineStyles)...................................................................................................113.3.3.3定義鏈接樣式...........................................................................................................................113.3.4幾種方式的優(yōu)先級(jí).......................................................................................................................123.4JavaScript基礎(chǔ)..........................................................................................................................................13
3.4.1JavaScript基本概念.......................................................................................................................133.4.2運(yùn)算符...........................................................................................................................................133.4.3表達(dá)式...........................................................................................................................................143.4.4語(yǔ)句...............................................................................................................................................143.4.5函數(shù)...............................................................................................................................................143.4.6對(duì)象...............................................................................................................................................153.4.7事件...............................................................................................................................................153.4.8變量...............................................................................................................................................163.5JSP(JavaServerPages)..............................................................................................................................16
3.5.1JSP簡(jiǎn)述.........................................................................................................................................163.5.2JSP技術(shù)的優(yōu)勢(shì).............................................................................................................................173.5.3JSP九大內(nèi)置對(duì)象.........................................................................................................................173.5.3.1request對(duì)象..........................................................................................................................173.5.3.2response對(duì)象........................................................................................................................173.5.3.3session對(duì)象..........................................................................................................................183.5.3.4application對(duì)象..................................................................................................................193.5.3.5out對(duì)象..................................................................................................................................3.5.3.6page對(duì)象................................................................................................................................193.5.3.7config對(duì)象............................................................................................................................203.5.3.8exception對(duì)象......................................................................................................................213.5.3.9pageContext對(duì)象..................................................................................................................213.5.4JSP四種屬性范圍.........................................................................................................................213.5.5JSP兩種跳轉(zhuǎn)方式的區(qū)別.............................................................................................................223.5.6JSP執(zhí)行過(guò)程.................................................................................................................................233.6Servlet........................................................................................................................................................24
3.6.1Servlet簡(jiǎn)述....................................................................................................................................243.6.2Servlet生命周期............................................................................................................................243.6.3HttpServlet應(yīng)用編程接口.............................................................................................................253.7MVC設(shè)計(jì)模式入門.................................................................................................................................273.8可擴(kuò)展標(biāo)記語(yǔ)言(XML)...........................................................................................................................28
3.8.1XML簡(jiǎn)介......................................................................................................................................283.8.2XML簡(jiǎn)明語(yǔ)法..............................................................................................................................293.8.3Java中四種操作XML方式的比較..............................................................................................303.8.3.1介紹.........................................................................................................................................303.8.3.2比較.........................................................................................................................................323.8.3.3四種xml操作方式的基本使用方法.......................................................................................323.9Ajax............................................................................................................................................................35
3.9.1Ajax簡(jiǎn)介........................................................................................................................................353.9.2Ajax實(shí)現(xiàn)........................................................................................................................................363.9.2.1.創(chuàng)建XMLHttpRequest方法:...............................................................................................363.9.2.2發(fā)送請(qǐng)求.................................................................................................................................373.9.2.3服務(wù)器的響應(yīng).........................................................................................................................373.9.2.4處理從服務(wù)器得到的數(shù)據(jù).....................................................................................................383.9.3Ajax的優(yōu)勢(shì)與劣勢(shì)........................................................................................................................383.10JSTL.........................................................................................................................................................40
3.10.1JSTL介紹.....................................................................................................................................403.10.2JSTL隱式對(duì)象.............................................................................................................................413.10.3常用函數(shù).....................................................................................................................................42
四、實(shí)習(xí)總結(jié).........................................................................................................................................................
一、實(shí)習(xí)目的
Java程序設(shè)計(jì)是一門應(yīng)用性很強(qiáng)的專業(yè)課,在學(xué)習(xí)時(shí)必須注意理論與實(shí)踐相結(jié)合,為此開設(shè)了本次實(shí)習(xí),其目的是通過(guò)本次實(shí)習(xí)使學(xué)生能夠較全面的掌握面向?qū)ο蟪绦蛟O(shè)計(jì)的有關(guān)概念和開發(fā)方法,以便能較全面地理解、掌握和綜合運(yùn)用所學(xué)的知識(shí),提高自身的編程能力。
通過(guò)這次實(shí)習(xí)進(jìn)一步了解java開發(fā)的相關(guān)知識(shí),掌握java開發(fā)的基本技術(shù),豐富java開發(fā)的實(shí)戰(zhàn)經(jīng)驗(yàn)。學(xué)習(xí)SQL的基礎(chǔ)知識(shí)及正確的運(yùn)用方法,和有用的相關(guān)技術(shù),提高自己的工作效率。通過(guò)實(shí)習(xí),鞏固大學(xué)所學(xué)專業(yè)的基本知識(shí),提高分析、判斷和處理實(shí)際問(wèn)題的能力,鍛煉自己的實(shí)際動(dòng)手能力,增強(qiáng)自己的團(tuán)隊(duì)協(xié)作意識(shí),了解軟件開發(fā)的思考角度和主要流程。為畢業(yè)之后能夠更快地進(jìn)入工作狀態(tài)并且能夠更好的工作,打好一定的基礎(chǔ)。
二、單位介紹
2.1實(shí)習(xí)單位介紹
思普公司成立于201*年,位于華景新城和科韻路兩大軟件園區(qū),主要從事計(jì)算機(jī)軟件研發(fā)、顧問(wèn)咨詢、人力資源服務(wù),公司主要核心團(tuán)隊(duì)具備十五年以上的信息服務(wù)行業(yè)的從業(yè)經(jīng)驗(yàn),對(duì)信息服務(wù)行業(yè)的業(yè)務(wù)、過(guò)程管理、開發(fā)、服務(wù)、標(biāo)準(zhǔn)等方面,具備深入的研究。行業(yè)經(jīng)驗(yàn):成長(zhǎng)中的思普公司,從成立至今,逐步在許多重要的領(lǐng)域,充當(dāng)起重要的角色,先后參與了廣電、電信、金融、電力、交通等五大行業(yè)的項(xiàng)目,積累了豐富的行業(yè)經(jīng)驗(yàn)和技術(shù)經(jīng)驗(yàn)。公司宗旨:完善的流程制度、不斷進(jìn)取的決心,追求創(chuàng)新以適應(yīng)變化的市場(chǎng),使公司能為客戶帶來(lái)優(yōu)質(zhì)的服務(wù),為社會(huì)創(chuàng)造更多的價(jià)值。廣州谷度計(jì)算機(jī)科技有限公司是專門從事以軟件業(yè)務(wù)、教育培訓(xùn)為核心,集軟件開發(fā)、系統(tǒng)集成、軟件離岸外包、信用服務(wù)等業(yè)務(wù)為一體的綜合性軟件服務(wù)企業(yè)。目前全面開展以面向外企、電信、金融等行業(yè)為主的中高級(jí)IT定制化職業(yè)培訓(xùn)及人才外包業(yè)務(wù)。主要向廣州、深圳等各大軟件企業(yè)及珠江三角洲地區(qū)的大型外資企業(yè)推薦中高端軟件開發(fā)工程師。已先后為IBM、Oracle、惠普(HP)、花旗軟件(CSTS)、上海貝爾、阿爾卡特、亞信科技等軟件公司輸送了近千名開發(fā)人員。
公司核心成員由海外留學(xué)人員和來(lái)自甲骨文(Oracle)、亞信科技(AsiaInfo)、Sun等國(guó)際大公司資深技術(shù)人員組成。公司網(wǎng)址:-sipu.com。
2.2實(shí)習(xí)時(shí)間
本次實(shí)習(xí)時(shí)間段為:201*年02月20日至201*年03月23日。
三、實(shí)習(xí)內(nèi)容
3.1java環(huán)境的配置
通常,我們需要設(shè)置三個(gè)環(huán)境變量:JAVA_HOME、PATH和CLASSPATH。
JAVA_HOME:該環(huán)境變量的值就是Java所在的目錄,一些Java版的軟件和一些Java的工具需要用到該變量,設(shè)置PATH和CLASSPATH的時(shí)候,也可以使用該變量以方便設(shè)置。
PATH:指定一個(gè)路徑列表,用于搜索可執(zhí)行文件的。執(zhí)行一個(gè)可執(zhí)行文件時(shí),如果該文件不能在當(dāng)前路徑下找到,則依次尋找PATH中的每一個(gè)路徑,直至找到。或者找完P(guān)ATH中的路徑也不能找到,則報(bào)錯(cuò)。Java的編譯命令(javac),執(zhí)行命令(java)和一些工具命令(javadoc,jdb等)都在其安裝路徑下的bin目錄中。因此我們應(yīng)該將該路徑添加到PATH變量中。
CLASSPATH:也指定一個(gè)路徑列表,是用于搜索Java編譯或者運(yùn)行時(shí)需要用到的類。在CLASSPATH列表中除了可以包含路徑外,還可以包含.jar文件。Java查找類時(shí)會(huì)把這個(gè).jar文件當(dāng)作一個(gè)目錄來(lái)進(jìn)行查找。通常,我們需要把JDK安裝路徑下的jre/lib/rt.jar(Linux:jre/lib/rt.jar)包含在CLASSPATH中。
PATH和CLASSPATH都指定路徑列表,列表中的各項(xiàng)(即各個(gè)路徑)之間使用分隔符分隔。在Windows下,分隔符是分號(hào)(;),而在Linux下,分隔符是冒號(hào)(:)。
3.1.1windowsxp下配置JDK環(huán)境變量
1.安裝JDK,安裝過(guò)程中可以自定義安裝目錄等信息,例如我們選擇安裝目錄為
D:/java/jdk1.5.0_08;
2.安裝完成后,右擊“我的電腦”,點(diǎn)擊“屬性”;3.選擇“高級(jí)”選項(xiàng)卡,點(diǎn)擊“環(huán)境變量”;
4.在“系統(tǒng)變量”中,設(shè)置3項(xiàng)屬性,JAVA_HOME,PATH,CLASSPATH(大小寫無(wú)所謂),若已存在則點(diǎn)擊“編輯”,不存在則點(diǎn)擊“新建”;
5.JAVA_HOME指明JDK安裝路徑,就是剛才安裝時(shí)所選擇的路徑D:/java/jdk1.5.0_08,此路徑下包括lib,bin,jre等文件夾(此變量最好設(shè)置,因?yàn)橐院筮\(yùn)行tomcat,eclipse等都需要設(shè)置此變量);
Path使得系統(tǒng)可以在任何路徑下識(shí)別java命令,設(shè)為:%JAVA_HOME%/bin;%JAVA_HOME%/jre/bin
CLASSPATH為java加載類(classorlib)路徑,只有類在classpath中,java命令才能識(shí)別,設(shè)為:
.;%JAVA_HOME%/lib/dt.jar;%JAVA_HOME%/lib/tools.jar(要加.表示當(dāng)前路徑)6.“開始”->;“運(yùn)行”,鍵入“cmd”;
7.鍵入命令“java-version”,“java”,“javac”幾個(gè)命令,出現(xiàn)畫面,說(shuō)明環(huán)境變量配置成功;8.好了,打完收工。下面開始你的第一個(gè)java程序吧。
3.1.2Linux下配置JDK環(huán)境變量
假設(shè)JDK在Linux下的安裝路徑是/usr/local/jdk/。那么,安裝后的JDK至少會(huì)包括如下內(nèi)容:
Linux下使用“變量名=變量值”設(shè)置變量,并使用export命令將其導(dǎo)出為環(huán)境變量。為了使每一次登錄都自動(dòng)設(shè)置好這些變量,你需要在~/.bash_profile里或者~./bashrc里進(jìn)行設(shè)置,如
exportJAVA_HOME=/usr/local/jdkexportPATH=$JAVA_HOME/bin:$PATHexportCLASSPATH=$JAVA_HOME/jre/lib/rt.jar:.
設(shè)置PATH時(shí)用的$JAVA_HOME是指替換變量JAVA_HOME的值到$JAVA_HOME所在位置。如上句實(shí)際就是exportPATH=/usr/local/jdk/bin:$PATH。這句中$PATH也是同樣的作用,不過(guò)這里的PATH是指以前設(shè)置的PATH變量的值,而非本次設(shè)置PATH變量的值。
注意,在CLASSPATH中包含了一個(gè)“當(dāng)前目錄(.)”。包含了該目錄后,就可以到任意目錄下去執(zhí)行需要用到該目錄下某個(gè)類的Java程序,即使該路徑并未包含在CLASSPATH中也可以。原因很簡(jiǎn)單:雖然沒(méi)有明確的把該路徑包含在CLASSPATH中,但CLASSPATH中的“.”在此時(shí)就代表了該路徑,例如
假設(shè)在/home/fancy/java目錄下有可運(yùn)行的類HelloJava.class,那么
[fancy@matrixfancy]$exportCLASSPATH=/usr/local/jdk/jre/lib/rt.jar:.//設(shè)置CLASSPATH,注意最后的“.”
[fancy@matrixfancy]$cd~/java//轉(zhuǎn)到/home/fancy/java[fancy@matrixjava]$pwd//顯示當(dāng)前目錄/home/fancy/java//當(dāng)前目錄是/home/fancy/java[fancy@matrixjava]$javaHelloJava//運(yùn)行HelloJavaHello,Java//運(yùn)行結(jié)果[fancy@matrixjava]$_
3.2HTML基礎(chǔ)
3.2.1HTML簡(jiǎn)述
文本標(biāo)記語(yǔ)言,即HTML(HypertextMarkupLanguage),是用于描述網(wǎng)頁(yè)文檔的一種標(biāo)記語(yǔ)言。
在WWW上的一個(gè)超媒體文檔稱之為一個(gè)頁(yè)面(page)。作為一個(gè)組織或個(gè)人在萬(wàn)維網(wǎng)上開始點(diǎn)的頁(yè)面稱為主頁(yè)Homepage,或首頁(yè),主頁(yè)中通常包括有指向其他相關(guān)頁(yè)面或其他節(jié)點(diǎn)的指針(超級(jí)鏈接)。在邏輯上將視為一個(gè)整體的一系列頁(yè)面的有機(jī)集合稱為網(wǎng)站(Website或Site)。
HTML是一種規(guī)范,一種標(biāo)準(zhǔn),它通過(guò)標(biāo)記符號(hào)來(lái)標(biāo)記要顯示的網(wǎng)頁(yè)中的各個(gè)部分。網(wǎng)頁(yè)文件本身是一種文本文件,通過(guò)在文本文件中添加標(biāo)記符,可以告訴瀏覽器如何顯示其中的內(nèi)容(如:文字如何處理,畫面如何安排,圖片如何顯示等)。瀏覽器按順序閱讀網(wǎng)頁(yè)文件,然后根據(jù)標(biāo)記符解釋和顯示其標(biāo)記的內(nèi)容,對(duì)書寫出錯(cuò)的標(biāo)記將不指出其錯(cuò)誤,且不停止其解釋執(zhí)行過(guò)程,編制者只能通過(guò)顯示效果來(lái)分析出錯(cuò)原因和出錯(cuò)部位。但需要注意的是,對(duì)于不同的瀏覽器,對(duì)同一標(biāo)記符可能會(huì)有不完全相同的解釋,因而可能會(huì)有不同的顯示效果。
HTML之所以稱為超文本標(biāo)記語(yǔ)言,是因?yàn)槲谋局邪怂^“超級(jí)鏈接”點(diǎn)。所謂超級(jí)鏈接,就是一種URL指針,通過(guò)激活(點(diǎn)擊)它,可使瀏覽器方便地獲取新的網(wǎng)頁(yè)。這也是HTML獲得廣泛應(yīng)用的最重要的原因之一。
一個(gè)網(wǎng)頁(yè)對(duì)應(yīng)于一個(gè)HTML文件,HTML文件以.htm或.html為擴(kuò)展名?梢允褂萌魏文軌蛏蒚XT類型源文件的文本編輯來(lái)產(chǎn)生HTML文件。
標(biāo)準(zhǔn)的HTML文件都具有一個(gè)基本的整體結(jié)構(gòu),即HTML文件的開頭與結(jié)尾標(biāo)志和HTML的頭部與實(shí)體2大部分。有3個(gè)雙標(biāo)記符用于頁(yè)面整體結(jié)構(gòu)的確認(rèn)。
3.2.2HTML示例
打開你的Notepad,新建一個(gè)文件,然后拷貝以下代碼到這個(gè)新文件,然后將這個(gè)文件存成first.html。
Titleofpage
Thisismyfirsthomepage.Thistextisbold示例解釋:
這個(gè)文件的第一個(gè)Tag是,這個(gè)Tag告訴你的瀏覽器這是HTML文件的頭。文件的最后一個(gè)Tag是,表示HTML文件到此結(jié)束。
在和之間的內(nèi)容,是Head信息。Head信息是不顯示出來(lái)的,你在瀏覽器里看不到。但是這并不表示這些信息沒(méi)有用處。比如你可以在Head信息里加上一些關(guān)鍵詞,有助于搜索引擎能夠搜索到你的網(wǎng)頁(yè)。
在和之間的內(nèi)容,是這個(gè)文件的標(biāo)題。你可以在瀏覽器最頂端的標(biāo)題欄看到這個(gè)標(biāo)題。
在和之間的信息,是正文。
在和之間的文字,用粗體表示。顧名思義,就是bold的意思。
HTML文件看上去和一般文本類似,但是它比一般文本多了Tag,比如,等,通過(guò)這些Tag,可以告訴瀏覽器如何顯示這個(gè)文件。
其它的HTML標(biāo)簽可以通過(guò)獲取標(biāo)簽的使用教程,這里不再敘述。
3.3CSS基礎(chǔ)
3.3.1CSS簡(jiǎn)述
CSS(CascadingStyleSheet)可譯為“層疊樣式表”或“級(jí)聯(lián)樣式表”,它定義如何顯示HTML元素,用于控制Web頁(yè)面的外觀。通過(guò)使用CSS實(shí)現(xiàn)頁(yè)面的內(nèi)容與表現(xiàn)形式分離,極大提高了工作效率。樣式存儲(chǔ)在樣式表中,通常放在部分或存儲(chǔ)在外部CSS文件中。作為網(wǎng)頁(yè)標(biāo)準(zhǔn)化設(shè)計(jì)的趨勢(shì),CSS取得了瀏覽器廠商的廣泛支持,正越來(lái)越多的被應(yīng)用到網(wǎng)頁(yè)設(shè)計(jì)中去。
層疊式表的特點(diǎn):1、便于頁(yè)面的修改。2、便于頁(yè)面風(fēng)格的統(tǒng)一。3、減少網(wǎng)頁(yè)的體積。
為什么叫層疊?
在頁(yè)面顯示的過(guò)程中,有很多的樣式作用在頁(yè)面元素上,這些樣式來(lái)自不同的地方。瀏覽器自己有默認(rèn)的樣式,網(wǎng)頁(yè)作者有自己寫的樣式,用戶也可能有自己的樣式,但是最終顯示的樣式是其中之一,它們之間產(chǎn)生了沖突,CSS通過(guò)一個(gè)稱為層疊(cascade)的過(guò)程處理這種沖突。層疊給每個(gè)規(guī)則分配一個(gè)重要度:作者的樣式表被認(rèn)為是最重要的,其次是用戶的樣式表,最后是瀏覽器或用戶代理使用的默認(rèn)樣式表。為了讓用戶有更多的控制能力,可以通過(guò)將任何規(guī)則指定為!important來(lái)提高它的重要度,讓它優(yōu)先于任何規(guī)則,甚至優(yōu)先于作者加上!important標(biāo)志的規(guī)則。因此,層疊采用以下重要度次序:標(biāo)為!important的用戶樣式>標(biāo)為!important的作者樣式>作者樣式>用戶樣式>瀏覽器/用戶代理應(yīng)用的樣式。然后,根據(jù)選擇器的特殊性決定規(guī)則的次序。具有更特殊選擇器的規(guī)則優(yōu)先于具有比較一般的選擇器的規(guī)則。如果兩個(gè)規(guī)則的特殊性相同,那么后定義的規(guī)則優(yōu)先。
由此可見,層疊是指不同的優(yōu)先級(jí)的構(gòu)成的層的疊加。
3.3.2CSS語(yǔ)法
3.3.2.1CSS定義
CSS的定義是由三個(gè)部分構(gòu)成:選擇符(selector),屬性(properties)和屬性的取值(value)。語(yǔ)法:selector{property:value}(選擇符{屬性:值})
例子:body{color:black},此例的效果是使頁(yè)面中的文字為黑色。
如果屬性的值是多個(gè)單詞組成,必須在值上加引號(hào),比如字體的名稱經(jīng)常是幾個(gè)單詞的組合:
例子:p{font-family:"sansserif"}(定義段落字體為sansserif)
如果需要對(duì)一個(gè)選擇符指定多個(gè)屬性時(shí),我們使用分號(hào)將所有的屬性和值分開:例子:p{text-align:center;color:red}(段落居中排列;并且段落中的文字為紅色)
3.3.2.2選擇符組
可以把相同屬性和值的選擇符組合起來(lái)書寫,用逗號(hào)將選擇符分開,這樣可以減少樣式重復(fù)定義:
h1,h2,h3,h4,h5,h6{color:green}(這個(gè)組里包括所有的標(biāo)題元素,每個(gè)標(biāo)題元素的文字都為綠色)
p,table{font-size:9pt}(段落和表格里的文字尺寸為9號(hào)字)效果完全等效于:p{font-size:9pt}table{font-size:9pt}
3.3.2.3類選擇符
用類選擇符你能夠把相同的元素分類定義不同的樣式,定義類選擇符時(shí),在自定類的名稱前面加一個(gè)點(diǎn)號(hào)。假如你想要兩個(gè)不同的段落,一個(gè)段落向右對(duì)齊,一個(gè)段落居中,你可以先定義兩個(gè)類:
p.right{text-align:right}p.center{text-align:center}
然后用不在不同的段落里,只要在HTML標(biāo)記里加入你定義的class參數(shù):這個(gè)段落向右對(duì)齊的這個(gè)段落是居中排列的
3.3.2.4ID選擇符
在HTML頁(yè)面中ID參數(shù)指定了某個(gè)單一元素,ID選擇符是用來(lái)對(duì)這個(gè)單一元素定義單獨(dú)的樣式。
ID選擇符的應(yīng)用和類選擇符類似,只要把CLASS換成ID即可。將上例中類用ID替代,ID只能在一個(gè)頁(yè)面中出現(xiàn)一次,而class可以多次運(yùn)用.
定義ID選擇符要在ID名稱前加上一個(gè)“#”號(hào)。和類選擇符相同,定義ID選擇符的屬性也有兩種方法。下面這個(gè)例子,ID屬性將匹配所有id="intro"的元素:
#intro{
font-size:110%;font-weight:bold;color:#0000ff;
background-color:transparent
}(字體尺寸為默認(rèn)尺寸的110%;粗體;藍(lán)色;背景顏色透明)下面這個(gè)例子,ID屬性只匹配id="intro"的段落元素:p#intro{}
注意:ID選擇符局限性很大,只能單獨(dú)定義某個(gè)元素的樣式,一般只在特殊情況下使用。
3.3.2.5包含選擇符
可以單獨(dú)對(duì)某種元素包含關(guān)系定義的樣式表,元素1里包含元素2,這種方式只對(duì)在元素1里的元素2定義,對(duì)單獨(dú)的元素1或元素2無(wú)定義,例如:
tablea{font-size:12px}
在表格內(nèi)的鏈接改變了樣式,文字大小為12像素,而表格外的鏈接的文字仍為默認(rèn)大小。
8font-size:110%;font-weight:bold;color:#0000ff;
background-color:transparent
3.3.2.6樣式表的層疊性
層疊性就是繼承性,樣式表的繼承規(guī)則是外部的元素樣式會(huì)保留下來(lái)繼承給這個(gè)元素所
包含的其他元素。事實(shí)上,所有在元素中嵌套的元素都會(huì)繼承外層元素指定的屬性值,有時(shí)會(huì)把很多層嵌套的樣式疊加在一起,除非另外更改。例如在DIV標(biāo)記中嵌套P標(biāo)記:div{color:red;font-size:9pt}……
這個(gè)段落的文字為紅色9號(hào)字
(P元素里的內(nèi)容會(huì)繼承DIV定義的屬性)
注意:有些情況下內(nèi)部選擇符不繼承周圍選擇符的值,但理論上這些都是特殊的。例如,上邊界屬性值是不會(huì)繼承的,直覺(jué)上,一個(gè)段落不會(huì)同文檔BODY一樣的上邊界值。另外,當(dāng)樣式表繼承遇到?jīng)_突時(shí),總是以最后定義的樣式為準(zhǔn)。如果上例中定義了P的顏色:
div{color:red;font-size:9pt}p{color:blue}……
這個(gè)段落的文字為藍(lán)色9號(hào)字
可以看到段落里的文字大小為9號(hào)字是繼承div屬性的,而color屬性則依照最后定義的。不同的選擇符定義相同的元素時(shí),要考慮到不同的選擇符之間的優(yōu)先級(jí)。ID選擇符,類選擇符和HTML標(biāo)記選擇符,因?yàn)镮D選擇符是最后加上元素上的,所以優(yōu)先級(jí)最高,其次是類選擇符。如果想超越這三者之間的關(guān)系,可以用!important提升樣式表的優(yōu)先權(quán),例如:p{color:#FF0000!important}.blue{color:#0000FF}#id1{color:#FFFF00}
同時(shí)對(duì)頁(yè)面中的一個(gè)段落加上這三種樣式,它最后會(huì)依照被!important申明的HTML標(biāo)記選擇符樣式為紅色文字。如果去掉!important,則依照優(yōu)先權(quán)最高的ID選擇符為黃色文字。
3.3.2.7注釋:/*...*/
可以在CSS中插入注釋來(lái)說(shuō)明你代碼的意思,注釋有利于你或別人以后編輯和更改代碼時(shí)理解代碼的含義。在瀏覽器中,注釋是不顯示的。CSS注釋以"/*"開頭,以"*/"結(jié)尾,如下:
/*定義段落樣式表*/
p{text-align:center;/*文本居中排列*/
color:black;/*文字為黑色*/
font-family:arial/*字體為arial*/
}3.3.3將樣式表加入到網(wǎng)頁(yè)
可以用以下幾種方式將樣式表加入網(wǎng)頁(yè)。而最接近目標(biāo)的樣式定義優(yōu)先權(quán)越高。高優(yōu)先權(quán)樣式將繼承低優(yōu)先權(quán)樣式的未重疊定義而覆蓋重疊的定義。例外請(qǐng)參閱!important聲明。
3.3.3.1定義內(nèi)部樣式塊對(duì)象
可以在HTML文檔的和標(biāo)記之間插入一個(gè)...塊對(duì)象。示例如下:
文檔標(biāo)題正文內(nèi)容
這里將style對(duì)象的type屬性設(shè)置為"text/css",是允許不支持這類型的瀏覽器忽略樣式表
單。
3.3.3.2內(nèi)聯(lián)定義(InlineStyles)
內(nèi)聯(lián)定義即是在對(duì)象的標(biāo)記內(nèi)使用對(duì)象的style屬性定義適用其的樣式表屬性。示例:
Thisisaparagraph
3.3.3.3定義鏈接樣式
CSS為一些特殊效果準(zhǔn)備了特定的工具,我們稱之為“偽類”。其中有幾項(xiàng)是我們經(jīng)常用到的,下面我們就詳細(xì)介紹一下經(jīng)常用于定義鏈接樣式的四個(gè)偽類,它們分別是:
:link
:visited:hover:active
定義鏈接樣式,其中必不可少的就是超級(jí)鏈接中的錨標(biāo)簽--a,錨標(biāo)簽和偽類鏈接起來(lái)書寫的方法就是定義鏈接樣式的基礎(chǔ)方法,它們的寫法如下:
a:link,定義正常鏈接的樣式;
a:visited,定義已訪問(wèn)過(guò)鏈接的樣式;a:hover,定義鼠標(biāo)懸浮在鏈接上時(shí)的樣式;a:active,定義鼠標(biāo)點(diǎn)擊鏈接時(shí)的樣式。
示例:
a:link{
color:#FF0000;
text-decoration:underline;}
a:visited{color:#00FF00;text-decoration:none;}
a:hover{color:#000000;text-decoration:none;}
a:active{color:#FFFFFF;text-decoration:none;}
3.3.3.4導(dǎo)入樣式(ImportStyles)
此方法與鏈入外部樣式的功能基本相同,只是語(yǔ)法和實(shí)現(xiàn)方式上有差別。
文檔標(biāo)題@importurl(css.css);
@importurl("csss.css");//單引號(hào)也可以@importcss,css;
@import"css.css";//單引號(hào)也可以
3.3.4幾種方式的優(yōu)先級(jí)
內(nèi)聯(lián)樣式優(yōu)先級(jí)最高,其次是鏈接樣式,再次是內(nèi)嵌式,最后是導(dǎo)入樣式。
3.4JavaScript基礎(chǔ)
3.4.1JavaScript基本概念
JavaScript是一種由Netscape的LiveScript發(fā)展而來(lái)的原型化繼承的面向?qū)ο蟮膭?dòng)態(tài)類型的區(qū)分大小寫的客戶端腳本語(yǔ)言,主要目的是為了解決服務(wù)器端語(yǔ)言,比如Perl,遺留的速度問(wèn)題,為客戶提供更流暢的瀏覽效果。當(dāng)時(shí)服務(wù)端需要對(duì)數(shù)據(jù)進(jìn)行驗(yàn)證,由于網(wǎng)絡(luò)速度相當(dāng)緩慢,只有28.8kbps,驗(yàn)證步驟浪費(fèi)的時(shí)間太多。于是Netscape的瀏覽器Navigator加入了JavaScript,提供了數(shù)據(jù)驗(yàn)證的基本功能。
JavaScript是一種基于對(duì)象和事件驅(qū)動(dòng)并具有相對(duì)安全性的客戶端腳本語(yǔ)言。同時(shí)也是一種廣泛用于客戶端Web開發(fā)的腳本語(yǔ)言,常用來(lái)給HTML網(wǎng)頁(yè)添加動(dòng)態(tài)功能,比如響應(yīng)用戶的各種操作。它最初由網(wǎng)景公司的BrendanEich設(shè)計(jì),是一種動(dòng)態(tài)、弱類型、基于原型的語(yǔ)言,內(nèi)置支持類。JavaScript是Sun公司的注冊(cè)商標(biāo)。[1]Ecma國(guó)際以JavaScript為基礎(chǔ)制定了ECMAScript標(biāo)準(zhǔn)。JavaScript也可以用于其他場(chǎng)合,如服務(wù)器端編程。完整的JavaScript實(shí)現(xiàn)包含三個(gè)部分:ECMAScript,文檔對(duì)象模型,字節(jié)順序記號(hào)。
3.4.2運(yùn)算符
運(yùn)算符就是完成操作的一系列符號(hào),它有七類:
賦值運(yùn)算符(=,+=,-=,*=,/=,%=,=,|=,&=)、算術(shù)運(yùn)算符(+,-,*,/,++,--,%)、比較運(yùn)算符(>,
5)2個(gè)null,或者2個(gè)都是未定義的,那么他們相等。
而“===”是全同運(yùn)算符,全同運(yùn)算符遵循等同運(yùn)算符的比較規(guī)則,但是它不對(duì)運(yùn)算數(shù)進(jìn)行類型轉(zhuǎn)換,當(dāng)兩個(gè)運(yùn)算數(shù)的類型不同時(shí),返回false;只有當(dāng)兩個(gè)運(yùn)算數(shù)的類型相同的時(shí)候,才遵循等同運(yùn)算符的比較規(guī)則進(jìn)行比較。
例如:null==undefined會(huì)返回真,但是null===undefined就會(huì)返回假!
3.4.3表達(dá)式
運(yùn)算符和操作數(shù)的組合稱為表達(dá)式,通常分為四類:賦值表達(dá)式、算術(shù)表達(dá)式、布爾表達(dá)式和字符串表達(dá)式。
3.4.4語(yǔ)句
JavaScript程序是由若干語(yǔ)句組成的,語(yǔ)句是編寫程序的指令。JavaScript提供了完整的基本編程語(yǔ)句,它們是:
賦值語(yǔ)句、switch選擇語(yǔ)句、while循環(huán)語(yǔ)句、for循環(huán)語(yǔ)句、foreach循環(huán)語(yǔ)句、dowhile循環(huán)語(yǔ)句、break循環(huán)中止語(yǔ)句、continue循環(huán)中斷語(yǔ)句、with語(yǔ)句、try...catch語(yǔ)句、
if語(yǔ)句(if..else,if...elseif...)、let語(yǔ)句。
3.4.5函數(shù)
函數(shù)是命名的語(yǔ)句段,這個(gè)語(yǔ)句段可以被當(dāng)作一個(gè)整體來(lái)引用和執(zhí)行。使用函數(shù)要注意
以下幾點(diǎn):
1)函數(shù)由關(guān)鍵字function定義(也可由Function構(gòu)造函數(shù)構(gòu)造);
2)使用function關(guān)鍵字定義的函數(shù)在一個(gè)作用域內(nèi)是可以在任意處調(diào)用的(包括定義函數(shù)的語(yǔ)句前);而用var關(guān)鍵字定義的必須定義后才能被調(diào)用;
3)函數(shù)名是調(diào)用函數(shù)時(shí)引用的名稱,它對(duì)大小寫是敏感的,調(diào)用函數(shù)時(shí)不可寫錯(cuò)函數(shù)名;4)參數(shù)表示傳遞給函數(shù)使用或操作的值,它可以是常量,也可以是變量,也可以是函數(shù),在函數(shù)內(nèi)部可以通過(guò)arguments對(duì)象(arguments對(duì)象是一個(gè)偽數(shù)組,屬性callee引用被調(diào)用的函數(shù))訪問(wèn)所有參數(shù);
5)return語(yǔ)句用于返回表達(dá)式的值。
6)yield語(yǔ)句扔出一個(gè)表達(dá)式,并且中斷函數(shù)執(zhí)行直到下一次調(diào)用next。
一般的函數(shù)都是以下格式:functionmyFunction(params){//執(zhí)行的語(yǔ)句}
函數(shù)表達(dá)式:
varmyFunction=function(params){//執(zhí)行的語(yǔ)句}
varmyFunction=function(){//執(zhí)行的語(yǔ)句}
myFunction();//調(diào)用函數(shù)
匿名函數(shù),它常作為參數(shù)在其他函數(shù)間傳遞:window.addEventListener("load",function(){//執(zhí)行的語(yǔ)句},false);
3.4.6對(duì)象
JavaScript的一個(gè)重要功能就是面向?qū)ο蟮墓δ埽ㄟ^(guò)基于對(duì)象的程序設(shè)計(jì),可以用更直
觀、模塊化和可重復(fù)使用的方式進(jìn)行程序開發(fā)。
一組包含數(shù)據(jù)的屬性和對(duì)屬性中包含數(shù)據(jù)進(jìn)行操作的方法,稱為對(duì)象。比如要設(shè)定網(wǎng)頁(yè)的背景顏色,所針對(duì)的對(duì)象就是document,所用的屬性名是bgcolor,如document.bgcolor="blue",就是表示使背景的顏色為藍(lán)色。
3.4.7事件
用戶與網(wǎng)頁(yè)交互時(shí)產(chǎn)生的操作,稱為事件。事件可以由用戶引發(fā),也可能是頁(yè)面發(fā)生改
變,甚至還有你看不見的事件(如Ajax的交互進(jìn)度改變)。絕大部分事件都由用戶的動(dòng)作所引發(fā),如:用戶按鼠標(biāo)的按鍵,就產(chǎn)生click事件,若鼠標(biāo)的指針在鏈接上移動(dòng),就產(chǎn)生mouseover事件等等。在JavaScript中,事件往往與事件處理程序配套使用。
而對(duì)事件的處理,W3C的方法是用addEventListener()函數(shù),它有三個(gè)參數(shù):事件,引發(fā)
的函數(shù),是否使用事件捕捉。為了安全性,建議將第三個(gè)參數(shù)始終設(shè)置為false;
傳統(tǒng)的方法就是定義元素的on...事件,它就是W3C的方法中的事件參數(shù)前加一個(gè)“on”。而IE的事件模型使用attachEvent和dettachEvent對(duì)事件進(jìn)行綁定和刪除。JavaScript中事件還分捕獲和冒泡兩個(gè)階段,但是傳統(tǒng)綁定只支持冒泡事件。
3.4.8變量
如varmyVariable="somevalue";
變量有它的類型,上例中myVariable的類型為string(字符串)javascript支持的常用類型還有:object:對(duì)象array:數(shù)組number:數(shù);
boolean:布爾值,只有true和false兩個(gè)值,是所有類型中占用內(nèi)存最少的;null:一個(gè)空值,唯一的值是null;undefined:沒(méi)有定義和賦值的變量
實(shí)際上JavaScript的變量是弱變量類型,你賦值給他的是字符串,他就是String.
是數(shù)字他就是整型。是true和false他就是boolean型(注意,不能加引號(hào),不然會(huì)被當(dāng)成字符串處理)。
3.5JSP(JavaServerPages)
3.5.1JSP簡(jiǎn)述
JSP技術(shù)使用JAVA編程語(yǔ)言編寫類XML的tags和scriptlets,來(lái)封裝產(chǎn)生動(dòng)態(tài)網(wǎng)頁(yè)的處理邏輯。網(wǎng)頁(yè)還能通過(guò)tags和scriptlets訪問(wèn)存在于服務(wù)端的資源的應(yīng)用邏輯。JSP將網(wǎng)頁(yè)邏輯與網(wǎng)頁(yè)設(shè)計(jì)和顯示分離,支持可重用的基于組件的設(shè)計(jì),使基于Web的應(yīng)用程序的開發(fā)變得迅速和容易。
Web服務(wù)器在遇到訪問(wèn)JSP網(wǎng)頁(yè)的請(qǐng)求時(shí),首先執(zhí)行其中的程序段,然后將執(zhí)行結(jié)果連同JSP文件中的HTML代碼一起返回給客戶。插入的Java程序段可以操作數(shù)據(jù)庫(kù)、重新定向網(wǎng)頁(yè)等,以實(shí)現(xiàn)建立動(dòng)態(tài)網(wǎng)頁(yè)所需要的功能。
JSP與JavaServlet一樣,是在服務(wù)器端執(zhí)行的,通常返回給客戶端的就是一個(gè)
HTML文本,因此客戶端只要有瀏覽器就能瀏覽。
3.5.2JSP技術(shù)的優(yōu)勢(shì)
(1)一次編寫,到處運(yùn)行。除了系統(tǒng)之外,代碼不用做任何更改。
(2)系統(tǒng)的多平臺(tái)支持;旧峡梢栽谒衅脚_(tái)上的任意環(huán)境中開發(fā),在任意環(huán)境中進(jìn)行系統(tǒng)部署,在任意環(huán)境中擴(kuò)展。相比ASP/.net的局限性是顯而易見的。
(3)強(qiáng)大的可伸縮性。從只有一個(gè)小的Jar文件就可以運(yùn)行Servlet/JSP,到由多臺(tái)服務(wù)器進(jìn)行集群和負(fù)載均衡,到多臺(tái)Application進(jìn)行事務(wù)處理,消息處理,一臺(tái)服務(wù)器到無(wú)數(shù)臺(tái)服務(wù)器,Java顯示了一個(gè)巨大的生命力。
(4)多樣化和功能強(qiáng)大的開發(fā)工具支持。這一點(diǎn)與ASP很像,Java已經(jīng)有了許多非常優(yōu)秀的開發(fā)工具,而且許多可以免費(fèi)得到,并且其中許多已經(jīng)可以順利的運(yùn)行于多種平臺(tái)之下。
(5)支持服務(wù)器端組件。web應(yīng)用需要強(qiáng)大的服務(wù)器端組件來(lái)支持,開發(fā)人員需要利用其他工具設(shè)計(jì)實(shí)現(xiàn)復(fù)雜功能的組件供web頁(yè)面調(diào)用,以增強(qiáng)系統(tǒng)性能。JSP可以使用成熟的JAVABEANS組件來(lái)實(shí)現(xiàn)復(fù)雜商務(wù)功能。
3.5.3JSP九大內(nèi)置對(duì)象
3.5.3.1request對(duì)象
該對(duì)象封裝了用戶提交的信息,通過(guò)調(diào)用該對(duì)象相應(yīng)的方法可以獲取封裝的信息,即使用該對(duì)象可以獲取用戶提交信息。它是HttpServletRequest的實(shí)例。
下面介紹request的常用方法:
1,getParameter();使用Stringstr=request.getParameter();2,setAttribute();和getAttribute();removeAttribute();3.getMethod();getProtocol();
4.getReqeustURI();getRemoteAddr();getServerPort();和getServerName();
3.5.3.2response對(duì)象
對(duì)客戶的請(qǐng)求做出動(dòng)態(tài)的響應(yīng),向客戶端發(fā)送數(shù)據(jù)。客戶端瀏覽器每訪問(wèn)一次Web
服務(wù)器的頁(yè)面都會(huì)提交一次請(qǐng)求,與request對(duì)象對(duì)應(yīng)的是response對(duì)象,response對(duì)象可以用來(lái)對(duì)客戶的請(qǐng)求作出響應(yīng),向客戶端發(fā)送數(shù)據(jù)。輸出的數(shù)據(jù)可以是各種數(shù)據(jù)類
型,甚至是文件,這可以通過(guò)page指令的contentType屬性或是response的setContentType()方法來(lái)設(shè)置。
response對(duì)象常用的方法:
3.5.3.3session對(duì)象
session對(duì)象是一個(gè)JSP內(nèi)置對(duì)象,它在第一個(gè)JSP頁(yè)面被裝載時(shí)自動(dòng)創(chuàng)建,完成會(huì)話期管理。
從一個(gè)客戶打開瀏覽器并連接到服務(wù)器開始,到客戶關(guān)閉瀏覽器離開這個(gè)服務(wù)器結(jié)束,被稱為一個(gè)會(huì)話。當(dāng)一個(gè)客戶訪問(wèn)一個(gè)服務(wù)器時(shí),可能會(huì)在這個(gè)服務(wù)器的幾個(gè)頁(yè)面之間反復(fù)連接,反復(fù)刷新一個(gè)頁(yè)面,服務(wù)器應(yīng)當(dāng)通過(guò)某種辦法知道這是同一個(gè)客戶,這就需要session對(duì)象。
2.session對(duì)象的ID:當(dāng)一個(gè)客戶首次訪問(wèn)服務(wù)器上的一個(gè)JSP頁(yè)面時(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èn)連接該服務(wù)器的其他頁(yè)面時(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í)間過(guò)期問(wèn)題,所以存在session中的名值對(duì)會(huì)在一定時(shí)間后失去,可以通過(guò)更改session有效時(shí)間來(lái)避免這種情況。同時(shí)編程時(shí)盡量避免將大量有效信息存儲(chǔ)在session中,request是一個(gè)不錯(cuò)的替代對(duì)象。
3.5.3.4application對(duì)象
服務(wù)器啟動(dòng)后就產(chǎn)生了這個(gè)application對(duì)象,當(dāng)客戶在所訪問(wèn)的網(wǎng)站的各個(gè)頁(yè)面之間瀏覽時(shí),這個(gè)application對(duì)象都是同一個(gè),直到服務(wù)器關(guān)閉。但是與session不同的是,所有客戶的application對(duì)象都是同一個(gè),即所有客戶共享這個(gè)內(nèi)置的application對(duì)象。
application對(duì)象常用方法:
(1)publicvoidsetAttribute(Stringkey,Objectobj):將參數(shù)Object指定的對(duì)象obj添加到application對(duì)象中,并為添加的對(duì)象指定一個(gè)索引關(guān)鍵字。
(2)publicObjectgetAttribute(Stringkey):獲取application對(duì)象中含有關(guān)鍵字的對(duì)象。
3.5.3.5out對(duì)象
out對(duì)象用于輸出數(shù)據(jù),它可以是javax.servlet.jsp.JspWriter的一個(gè)實(shí)例.out對(duì)象的范圍是page。
從java.io.Writer拓展而來(lái)的公共抽象類JspWriter效仿了java.io.BufferedWriter和java.io.PrintWriter中的某些功能.但是,不同之處在于它會(huì)在打印方法中拋出(throw)java.io.IOException異常,而PrintWriter不這樣做。
JSP中的out對(duì)象就是這種類型的.如果page指令選擇了autoflush="true",那么當(dāng)出現(xiàn)由于當(dāng)前的操作不清空緩存而造成緩沖區(qū)溢出的情況時(shí),這個(gè)類的所有I/O操作會(huì)自動(dòng)清空緩沖區(qū)的內(nèi)容.如果autoflush="false",那么當(dāng)操作造成了緩沖區(qū)溢出時(shí),這個(gè)類的所有的I/O操作將拋出一個(gè)IOException。
3.5.3.6page對(duì)象
page指令是針對(duì)當(dāng)前頁(yè)面的指令,常用的page指令有8個(gè):
1.設(shè)置jsp中用到的語(yǔ)言,用到的是java,也是目前唯一有效的設(shè)定。
2.設(shè)置目前jsp要繼承的父類,一般不需要設(shè)置,在默認(rèn)情況下,jsp頁(yè)面默認(rèn)的父類是HttpJspBase。
3.jsp頁(yè)面所用到的類。
4.設(shè)置該jsp頁(yè)面出現(xiàn)異常時(shí)所要轉(zhuǎn)到的頁(yè)面,如果沒(méi)設(shè)定,容器將使用當(dāng)前的頁(yè)面顯示錯(cuò)誤信息。
5.設(shè)置該jsp頁(yè)面是否作為錯(cuò)誤顯示頁(yè)面,默認(rèn)是false,如果設(shè)置為true,容器則會(huì)在當(dāng)前頁(yè)面生成一個(gè)exception對(duì)象。
6.設(shè)置頁(yè)面文件格式和編碼方式。
7.設(shè)置容器以多線程還是單線程運(yùn)行該jsp頁(yè)面,默認(rèn)是true,是多線程。設(shè)置為false,則以單線程的方式運(yùn)行該jsp頁(yè)面。
8.設(shè)置該jsp頁(yè)面是否可以用到session對(duì)象(jsp內(nèi)置對(duì)象,為web容器創(chuàng)建),默認(rèn)是true,能用到session.設(shè)置為false,則用不到。
3.5.3.7config對(duì)象
config對(duì)象是在一個(gè)servlet程序初始化時(shí),JSP引擎向它傳遞消息用的,此消息包括servlet程序初始化時(shí)所需要的參數(shù)及服務(wù)器的有關(guān)信息。Config對(duì)象其實(shí)是實(shí)現(xiàn)javax.servlet.ServletConfig接口的類的實(shí)例對(duì)象,它可以使用下面的3個(gè)方法。
1)getServletContext()
調(diào)用這個(gè)方法可以返回一個(gè)含有服務(wù)器相關(guān)信息的ServletContext對(duì)象,即JSP內(nèi)置對(duì)象application對(duì)象。
2)getInitParameter(Stringname)
調(diào)用這個(gè)方法可以返回servlet程序初始參數(shù)的值,參數(shù)名由name指定。3)getInitParameterNames()
調(diào)用這個(gè)方法可以返回一個(gè)枚舉對(duì)象,該對(duì)象由servlet程序初始化所需要的所有參數(shù)的名稱構(gòu)成。
通過(guò)如下所示的方式獲取JSP/Servlet程序初始化所需要的參數(shù)名稱和它們的值:”+config.getInitParameter(paraName)+””);}%>
config對(duì)象在Servlet程序中的作用很大,不過(guò)在Servlet程序中沒(méi)有內(nèi)置對(duì)象這一說(shuō),嚴(yán)格的說(shuō)法應(yīng)該是ServletConfig接口在servlet程序中作用很大。但是JSP頁(yè)面中的config對(duì)象的作用很小。其中的一個(gè)作用:它可以調(diào)用getServletContext()方法獲得application對(duì)象。
3.5.3.8exception對(duì)象
exception對(duì)象是一個(gè)例外對(duì)象,當(dāng)一個(gè)頁(yè)面在運(yùn)行過(guò)程中發(fā)生了例外,就產(chǎn)生這個(gè)對(duì)象。如果一個(gè)JSP頁(yè)面要應(yīng)用此對(duì)象,就必須把isErrorPage設(shè)為true,否則無(wú)法編譯。他實(shí)際上是java.lang.Throwable的對(duì)象
方法說(shuō)明:
1StringgetMessage()返回描述異常的消息2StringtoString()返回關(guān)于異常的簡(jiǎn)短描述消息3voidprintStackTrace()顯示異常及其棧軌跡
4ThrowableFillInStackTrace()重寫異常的執(zhí)行棧軌跡
3.5.3.9pageContext對(duì)象
javax.servlet.jsp.PageContext的實(shí)例,該對(duì)象代表該JSP頁(yè)面上下文,使用該對(duì)
象可以訪問(wèn)頁(yè)面中的共享數(shù)據(jù)。常用的方法有g(shù)etServletContext()和getServletConfig()等。
3.5.4JSP四種屬性范圍
在JSP中提供了四種屬性保存范圍----在一個(gè)頁(yè)面內(nèi):page
----在一次服務(wù)請(qǐng)求范圍內(nèi):request----在一次會(huì)話范圍內(nèi):session
----在一個(gè)應(yīng)用服務(wù)器范圍內(nèi):application最重要的概念:四種屬性保存范圍:
publicvoidsetAttribute(Stringname,Objectvalue)屬性名為字符串,屬性值可以為任意對(duì)象
publicObjectgetAttribute(Stringname)
page范圍:在JSP中設(shè)置一個(gè)頁(yè)的屬性范圍,必須通過(guò)pageContext完成,PageContext屬性范圍是最重要的JSP屬性之一,但是如果使用純粹的JSP代碼開發(fā),此屬性顯示不出用處,其發(fā)揮作用在Struts,WebWork中。
request將屬性保存在一次請(qǐng)求范圍之內(nèi),但必須使用服務(wù)器端跳轉(zhuǎn):應(yīng)用點(diǎn):MVC設(shè)計(jì)模式、Struts、Webwork。
session:只要設(shè)置上去,則不管是什么跳轉(zhuǎn),都可以取得屬性,主要用于驗(yàn)證用戶是否登陸。EMAIL--->用戶需要先進(jìn)行登陸,登陸成功后再編輯郵件。與session有關(guān)的任何打開的頁(yè)面都可以取得session
application屬性范圍,只要設(shè)置一次,則所有的頁(yè)面窗口都可以取得數(shù)據(jù)。application、session、request都與要跨多個(gè)頁(yè),屬性保存是有內(nèi)存開銷的,設(shè)置過(guò)多的application或每一個(gè)session保存過(guò)多的對(duì)象,性能就降低了。
原則:能用request就不要用session,能用session就不要用application
application應(yīng)用:在線人員統(tǒng)計(jì)、在線人員名單列表,要釋放application資源,只能重新啟動(dòng)服務(wù)器。
3.5.5JSP兩種跳轉(zhuǎn)方式的區(qū)別
1,
服務(wù)器端跳轉(zhuǎn),地址欄不改變;執(zhí)行到跳轉(zhuǎn)語(yǔ)句后無(wú)條件立刻跳轉(zhuǎn),之后的代碼不再被執(zhí)行;如果使用forward跳轉(zhuǎn),則一定要在跳轉(zhuǎn)之前釋放掉全部的資源;使用forward時(shí),request設(shè)置的屬性依然能保留在下一個(gè)頁(yè)面(setAttribute);通過(guò),傳遞參數(shù)。
2,response.sendRedirect("地址")
客戶端跳轉(zhuǎn),地址欄改變;所有代碼執(zhí)行完畢后再跳轉(zhuǎn);不能保存request屬性,因?yàn)榈刂犯淖兞。使用客戶端跳轉(zhuǎn),可以使用重寫URL將內(nèi)容傳遞。
轉(zhuǎn)發(fā)(也稱為服務(wù)器端跳轉(zhuǎn)):
重定向(也稱為客戶端跳轉(zhuǎn)):
3.5.6JSP執(zhí)行過(guò)程
JSP內(nèi)部執(zhí)行過(guò)程:
3.6Servlet
3.6.1Servlet簡(jiǎn)述
Servlet是一種服務(wù)器端的Java應(yīng)用程序,具有獨(dú)立于平臺(tái)和協(xié)議的特性,可以生成動(dòng)態(tài)的Web頁(yè)面。它擔(dān)當(dāng)客戶請(qǐng)求(Web瀏覽器或其他HTTP客戶程序)與服務(wù)器響應(yīng)(HTTP服務(wù)器上的數(shù)據(jù)庫(kù)或應(yīng)用程序)的中間層。Servlet是位于Web服務(wù)器內(nèi)部的服務(wù)器端的Java應(yīng)用程序,與傳統(tǒng)的從命令行啟動(dòng)的Java應(yīng)用程序不同,Servlet由Web服務(wù)器進(jìn)行加載,該Web服務(wù)器必須包含支持Servlet的Java虛擬機(jī)。
服務(wù)器上需要一些程序,常常是根據(jù)用戶輸入訪問(wèn)數(shù)據(jù)庫(kù)的程序。這些通常是使用公共網(wǎng)關(guān)接口(CGI(CommonGatewayInterface))應(yīng)用程序完成的。然而,在服務(wù)器上運(yùn)行Java,這種程序可使用Java編程語(yǔ)言實(shí)現(xiàn)。在通信量大的服務(wù)器上,Javaservlet的優(yōu)點(diǎn)在于它們的執(zhí)行速度更快于CGI程序。各個(gè)用戶請(qǐng)求被激活成單個(gè)程序中的一個(gè)線程,而無(wú)需創(chuàng)建單獨(dú)的進(jìn)程,這意味著服務(wù)器端處理請(qǐng)求的系統(tǒng)開銷將明顯降低。
最早支持Servlet技術(shù)的是JavaSoft的JavaWebServer。此后,一些其它的基于Java的WebServer開始支持標(biāo)準(zhǔn)的ServletAPI。Servlet的主要功能在于交互式地瀏覽和修改數(shù)據(jù),生成動(dòng)態(tài)Web內(nèi)容。這個(gè)過(guò)程為:
1.客戶端發(fā)送請(qǐng)求至服務(wù)器端;2.服務(wù)器將請(qǐng)求信息發(fā)送至Servlet;
3.Servlet生成響應(yīng)內(nèi)容并將其傳給Server。響應(yīng)內(nèi)容動(dòng)態(tài)生成,通常取決于客戶端的請(qǐng)求;
4.服務(wù)器將響應(yīng)返回給客戶端.
Servlet看起來(lái)像是通常的Java程序。Servlet導(dǎo)入特定的屬于JavaServletAPI的包。因?yàn)槭菍?duì)象字節(jié)碼,可動(dòng)態(tài)地從網(wǎng)絡(luò)加載,可以說(shuō)Servlet對(duì)Server就如同Applet對(duì)Client一樣,但是,由于Servlet運(yùn)行于Server中,它們并不需要一個(gè)圖形用戶界面。從這個(gè)角度講,Servlet也被稱為FacelessObject。
一個(gè)servlet就是Java編程語(yǔ)言中的一個(gè)類,它被用來(lái)擴(kuò)展服務(wù)器的性能,服務(wù)器上駐留著可以通過(guò)“請(qǐng)求-響應(yīng)”編程模型來(lái)訪問(wèn)的應(yīng)用程序。雖然servlet可以對(duì)任何類型的請(qǐng)求產(chǎn)生響應(yīng),但通常只用來(lái)擴(kuò)展Web服務(wù)器的應(yīng)用程序。
3.6.2Servlet生命周期
從Tomcat處理用戶請(qǐng)求,我們可以清晰的看到容器Servlet的生命周期管理過(guò)程:1、客戶發(fā)出請(qǐng)求>Web服務(wù)器轉(zhuǎn)發(fā)到Web容器Tomcat;
2、Tomcat主線程對(duì)轉(zhuǎn)發(fā)來(lái)用戶的請(qǐng)求做出響應(yīng)創(chuàng)建兩個(gè)對(duì)象:HttpServletRequest和HttpServletResponse;
3、從請(qǐng)求中的URL中找到正確Servlet,Tomcat為其創(chuàng)建或者分配一個(gè)線程,同時(shí)把2創(chuàng)建的兩個(gè)對(duì)象傳遞給該線程;
4、Tomcat調(diào)用Servlet的service()方法,根據(jù)請(qǐng)求參數(shù)的不同調(diào)用doGet()或者doPost()方法;
5、假設(shè)是HTTPGET請(qǐng)求,doGet()方法生成靜態(tài)頁(yè)面,并組合到響應(yīng)對(duì)象里;6、Servlet線程結(jié)束,Tomcat將響應(yīng)對(duì)象轉(zhuǎn)換為HTTP響應(yīng)發(fā)回給客戶,同時(shí)刪除請(qǐng)求和響應(yīng)對(duì)象。
從該過(guò)程中,我們可以理解Servlet的生命周期:Servlet類加載(對(duì)應(yīng)3步);Servlet實(shí)例化(對(duì)應(yīng)3步);調(diào)用init方法(對(duì)應(yīng)3步);調(diào)用service()方法(對(duì)應(yīng)4、5步);調(diào)用destroy()方法(對(duì)應(yīng)6步)。
3.6.3HttpServlet應(yīng)用編程接口
HttpServlet使用一個(gè)HTML表單來(lái)發(fā)送和接收數(shù)據(jù)。要?jiǎng)?chuàng)建一個(gè)HttpServlet,請(qǐng)擴(kuò)展HttpServlet類,該類是用專門的方法來(lái)處理HTML表單的GenericServlet的一個(gè)子類。HTML表單是由和標(biāo)記定義的。表單中典型地包含輸入字段(如文本輸入字段、復(fù)選框、單選按鈕和選擇列表)和用于提交數(shù)據(jù)的按鈕。當(dāng)提交信息時(shí),它們還指定服務(wù)器應(yīng)執(zhí)行哪一個(gè)Servlet(或其它的程序)。HttpServlet類包含init()、destroy()、service()等方法。其中init()和destroy()方法是繼承的。
(1)init()方法
在Servlet的生命期中,僅執(zhí)行一次init()方法。它是在服務(wù)器裝入Servlet時(shí)執(zhí)行的?梢耘渲梅⻊(wù)器,以在啟動(dòng)服務(wù)器或客戶機(jī)首次訪問(wèn)Servlet時(shí)裝入Servlet。無(wú)論有多少客戶機(jī)訪問(wèn)Servlet,都不會(huì)重復(fù)執(zhí)行init()。
缺省的init()方法通常是符合要求的,但也可以用定制init()方法來(lái)覆蓋它,典型的是管理服務(wù)器端資源。例如,可能編寫一個(gè)定制init()來(lái)只用于一次裝入GIF圖像,改進(jìn)Servlet返回GIF圖像和含有多個(gè)客戶機(jī)請(qǐng)求的性能。另一個(gè)示例是初始化數(shù)據(jù)庫(kù)連接。缺省的init()方法設(shè)置了Servlet的初始化參數(shù),并用它的ServletConfig對(duì)象參
數(shù)來(lái)啟動(dòng)配置,因此所有覆蓋init()方法的Servlet應(yīng)調(diào)用super.init()以確保仍然執(zhí)行這些任務(wù)。在調(diào)用service()方法之前,應(yīng)確保已完成了init()方法。
(2)service()方法
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)镠ttpServlet.service()方法會(huì)檢查請(qǐng)求方法是否調(diào)用了適當(dāng)?shù)奶幚矸椒,不必要覆蓋service()方法。只需覆蓋相應(yīng)的do方法就可以了。
Servlet的響應(yīng)可以是下列幾種類型:
一個(gè)輸出流,瀏覽器根據(jù)它的內(nèi)容類型(如text/HTML)進(jìn)行解釋。一個(gè)HTTP錯(cuò)誤響應(yīng),重定向到另一個(gè)URL、servlet、JSP。(3)doGet()方法
當(dāng)一個(gè)客戶通過(guò)HTML表單發(fā)出一個(gè)HTTPGET請(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()方法。
(4)doPost()方法
當(dāng)一個(gè)客戶通過(guò)HTML表單發(fā)出一個(gè)HTTPPOST請(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()方法。
(5)destroy()方法
destroy()方法僅執(zhí)行一次,即在服務(wù)器停止且卸裝Servlet時(shí)執(zhí)行該方法。典型的,將Servlet作為服務(wù)器進(jìn)程的一部分來(lái)關(guān)閉。缺省的destroy()方法通常是符合要求的,但也可以覆蓋它,典型的是管理服務(wù)器端資源。例如,如果Servlet在運(yùn)行時(shí)會(huì)累計(jì)統(tǒng)計(jì)數(shù)據(jù),則可以編寫一個(gè)destroy()方法,該方法用于在未裝入Servlet時(shí)將統(tǒng)計(jì)數(shù)字保存在文件中。另一個(gè)示例是關(guān)閉數(shù)據(jù)庫(kù)連接。
當(dāng)服務(wù)器卸裝Servlet時(shí),將在所有service()方法調(diào)用完成后,或在指定的時(shí)間間隔過(guò)后調(diào)用destroy()方法。一個(gè)Servlet在運(yùn)行service()方法時(shí)可能會(huì)產(chǎn)生其它的線程,因此請(qǐng)確認(rèn)在調(diào)用destroy()方法時(shí),這些線程已終止或完成。
(6)GetServletConfig()方法
GetServletConfig()方法返回一個(gè)ServletConfig對(duì)象,該對(duì)象用來(lái)返回初始化參數(shù)和ServletContext。ServletContext接口提供有關(guān)servlet的環(huán)境信息。
(7)GetServletInfo()方法
GetServletInfo()方法是一個(gè)可選的方法,它提供有關(guān)servlet的信息,如作者、版本、版權(quán)。
當(dāng)服務(wù)器調(diào)用sevlet的Service()、doGet()和doPost()這三個(gè)方法時(shí),均需要"請(qǐng)求"和"響應(yīng)"對(duì)象作為參數(shù)。"請(qǐng)求"對(duì)象提供有關(guān)請(qǐng)求的信息,而"響應(yīng)"對(duì)象提供了一個(gè)將響應(yīng)信息返回給瀏覽器的一個(gè)通信途徑。
javax.servlet軟件包中的相關(guān)類為ServletResponse和ServletRequest,而javax.servlet.http
軟件包中的相關(guān)類為
HttpServletRequest
和HttpServletResponse。Servlet通過(guò)這些對(duì)象與服務(wù)器通信并最終與客戶機(jī)通信。Servlet能通過(guò)調(diào)用"請(qǐng)求"對(duì)象的方法獲知客戶機(jī)環(huán)境,服務(wù)器環(huán)境的信息和所有由客戶機(jī)提供的信息。Servlet可以調(diào)用"響應(yīng)"對(duì)象的方法發(fā)送響應(yīng),該響應(yīng)是準(zhǔn)備發(fā)回客戶機(jī)的。
3.7MVC設(shè)計(jì)模式入門
MVC(Model-View-Controller)應(yīng)用程序結(jié)構(gòu)被用來(lái)分析分布式應(yīng)用程序的特征。這種抽象結(jié)構(gòu)能有助于將應(yīng)用程序分割成若干邏輯部件,使程序設(shè)計(jì)變得更加容易。
MVC結(jié)構(gòu)提供了一種按功能對(duì)各種對(duì)象進(jìn)行分割的方法(這些對(duì)象是用來(lái)維護(hù)和表現(xiàn)數(shù)據(jù)的),其目的是為了將各對(duì)象間的耦合程度減至最小。MVC結(jié)構(gòu)本來(lái)是為了將傳統(tǒng)的輸入(input)、處理(processing)、輸出(output)任務(wù)運(yùn)用到圖形化用戶交互模型中而設(shè)計(jì)的。但是,將這些概念運(yùn)用于基于Web的企業(yè)級(jí)多層應(yīng)用領(lǐng)域也是很適合的。
在MVC結(jié)構(gòu)中,模型(Model)代表應(yīng)用程序的數(shù)據(jù)(data)和用于控制訪問(wèn)和修改這些數(shù)據(jù)的業(yè)務(wù)規(guī)則(businessrule)。通常模型被用來(lái)作為對(duì)現(xiàn)實(shí)世界中一個(gè)處理過(guò)程的軟件近似,當(dāng)定義一個(gè)模型時(shí),可以采用一般的簡(jiǎn)單的建模技術(shù)。
當(dāng)模型發(fā)生改變時(shí),它會(huì)通知視圖(View),并且為視圖提供查詢模型相關(guān)狀態(tài)的能力。同時(shí),它也為控制器(Controller)提供訪問(wèn)封裝在模型內(nèi)部的應(yīng)用程序功能的能力。
一個(gè)視圖(View)用來(lái)組織模型的內(nèi)容。它從模型那里獲得數(shù)據(jù)并指定這些數(shù)據(jù)如何表現(xiàn)。當(dāng)模型變化時(shí),視圖負(fù)責(zé)維持?jǐn)?shù)據(jù)表現(xiàn)的一致性。視圖同時(shí)將用戶要求告知控制器(Controller)。
控制器(Controller)定義了應(yīng)用程序的行為;它負(fù)責(zé)對(duì)來(lái)自視圖的用戶要求進(jìn)行解釋,并把這些要求映射成相應(yīng)的行為,這些行為由模型負(fù)責(zé)實(shí)現(xiàn)。在獨(dú)立運(yùn)行的GUI客戶端,用戶要求可能是一些鼠標(biāo)單擊或是菜單選擇操作。在一個(gè)Web應(yīng)用程序中,它們的表現(xiàn)形式可能是一些來(lái)自客戶端的GET或POST的HTTP請(qǐng)求。模型所實(shí)現(xiàn)的行為包括處理業(yè)務(wù)和修改模型的狀態(tài)。根據(jù)用戶要求和模型行為的結(jié)果,控制器選擇一個(gè)視圖作為對(duì)用戶請(qǐng)求的應(yīng)答。通常一組相關(guān)功能集對(duì)應(yīng)一個(gè)控制器。
基于MVC結(jié)構(gòu)的框架中各組件的責(zé)任及相互關(guān)系:
3.8可擴(kuò)展標(biāo)記語(yǔ)言(XML)
3.8.1XML簡(jiǎn)介
可擴(kuò)展標(biāo)記語(yǔ)言(ExtensibleMarkupLanguage,XML),用于標(biāo)記電子文件使其具有結(jié)構(gòu)性的標(biāo)記語(yǔ)言,可以用來(lái)標(biāo)記數(shù)據(jù)、定義數(shù)據(jù)類型,是一種允許用戶對(duì)自己的標(biāo)記語(yǔ)言進(jìn)行定義的源語(yǔ)言。XML是標(biāo)準(zhǔn)通用標(biāo)記語(yǔ)言(SGML)的子集,非常適合Web傳輸。XML提供統(tǒng)一的方法來(lái)描述和交換獨(dú)立于應(yīng)用程序或供應(yīng)商的結(jié)構(gòu)化數(shù)據(jù)。
XML與Access,Oracle和SQLServer等數(shù)據(jù)庫(kù)不同,數(shù)據(jù)庫(kù)提供了更強(qiáng)有力的數(shù)據(jù)存儲(chǔ)和分析能力,例如:數(shù)據(jù)索引、排序、查找、相關(guān)一致性等,XML僅僅是展示數(shù)據(jù)。事實(shí)上XML與其他數(shù)據(jù)表現(xiàn)形式最大的不同是:他極其簡(jiǎn)單。這是一個(gè)看上去有點(diǎn)瑣細(xì)的優(yōu)點(diǎn),但正是這點(diǎn)使XML與眾不同。
XML與HTML的設(shè)計(jì)區(qū)別是:XML是用來(lái)存儲(chǔ)數(shù)據(jù)的,重在數(shù)據(jù)本身。而HTML是用來(lái)定義數(shù)據(jù)的,重在數(shù)據(jù)的顯示模式。
XML的簡(jiǎn)單使其易于在任何應(yīng)用程序中讀寫數(shù)據(jù),這使XML很快成為數(shù)據(jù)交換的唯一公共語(yǔ)言,雖然不同的應(yīng)用軟件也支持其它的數(shù)據(jù)交換格式,但不久之后他們都將支持XML,那就意味著程序可以更容易的與Windows、MacOS,Linux以及其他平臺(tái)下產(chǎn)生的信息結(jié)合,然后可以很容易加載XML數(shù)據(jù)到程序中并分析他,并以XML格式輸出結(jié)果。
3.8.2XML簡(jiǎn)明語(yǔ)法
SGML常用來(lái)定義針對(duì)HTML的文檔類型定義(DTD),同時(shí)它也常用于編寫XML的DTD。SGML的問(wèn)題就在于,它允許出現(xiàn)一些奇怪的語(yǔ)法,這讓創(chuàng)建HTML的解析器成為一個(gè)大難題:
1某些起始標(biāo)簽不允許出現(xiàn)結(jié)束標(biāo)簽,例如HTML中標(biāo)簽。包含了結(jié)束標(biāo)簽就會(huì)出現(xiàn)錯(cuò)誤。
2某些起始標(biāo)簽可以選擇性出現(xiàn)結(jié)束標(biāo)簽或者隱含了結(jié)束標(biāo)簽
3某些起始標(biāo)簽要求必須出現(xiàn)結(jié)束標(biāo)簽,例如HTML中標(biāo)簽。
4標(biāo)簽可以以任何順序嵌套。即使結(jié)束標(biāo)簽不按照起始標(biāo)簽的逆序出現(xiàn)也是允許的。5某些特性要求必須包含值,例如中的src特性。6某些特性不要求一定有值,例如中的nowrap特性。
7定義特性的兩邊有沒(méi)有加上雙引號(hào)都是可以的,所以和都是允許的。
這些問(wèn)題使建立一個(gè)SGML語(yǔ)言的解析器變成了一項(xiàng)艱巨的任務(wù)。判斷何時(shí)應(yīng)用以上規(guī)則的困難導(dǎo)致了SGML語(yǔ)言的定義一直停滯不前。以這些問(wèn)題作為出發(fā)點(diǎn),XML逐漸步入我們的視野。
XML去掉了之前令許多開發(fā)人員頭疼的SGML的隨意語(yǔ)法。在XML中,采用了如下的語(yǔ)法:
1任何的起始標(biāo)簽都必須有一個(gè)結(jié)束標(biāo)簽。
2可以采用另一種簡(jiǎn)化語(yǔ)法,可以在一個(gè)標(biāo)簽中同時(shí)表示起始和結(jié)束標(biāo)簽。這種語(yǔ)法是在大于符號(hào)之前緊跟一個(gè)斜線(/),例如。XML解析器會(huì)將其翻譯成。3標(biāo)簽必須按合適的順序進(jìn)行嵌套,所以結(jié)束標(biāo)簽必須按鏡像順序匹配起始標(biāo)簽,例如
thisisasamplestring。這好比是將起始和結(jié)束標(biāo)簽看作是數(shù)學(xué)中的左右括號(hào):在沒(méi)有關(guān)閉所有的內(nèi)部括號(hào)之前,是不能關(guān)閉外面的括號(hào)的。4所有的特性都必須有值。
5所有的特性都必須在值的周圍加上雙引號(hào)。
3.8.3Java中四種操作XML方式的比較
3.8.3.1介紹
1)dom(jaxpcrimson解析器)
dom是用與平臺(tái)和語(yǔ)言無(wú)關(guān)的方式表示xml文檔的官方w3c標(biāo)準(zhǔn)。dom是以層次結(jié)構(gòu)組織的節(jié)點(diǎn)或信息片斷的集合。這個(gè)層次結(jié)構(gòu)允許開發(fā)人員在樹中尋找特定信息。分析該結(jié)構(gòu)通常需要加載整個(gè)文檔和構(gòu)造層次結(jié)構(gòu),然后才能做任何工作。由于它是基于信息層次的,因而dom被認(rèn)為是基于樹或基于對(duì)象的。dom以及廣義的基于樹的處理具有幾個(gè)優(yōu)點(diǎn)。首先,由于樹在內(nèi)存中是持久的,因此可以修改它以便應(yīng)用程序能對(duì)數(shù)據(jù)和結(jié)構(gòu)作出更改。它還可以在任何時(shí)候在樹中上下導(dǎo)航,而不是像sax那樣是一次性的處理。dom使用起來(lái)也要簡(jiǎn)單得多。
2)sax
sax處理的優(yōu)點(diǎn)非常類似于流媒體的優(yōu)點(diǎn)。分析能夠立即開始,而不是等待所有的數(shù)據(jù)被處理。而且,由于應(yīng)用程序只是在讀取數(shù)據(jù)時(shí)檢查數(shù)據(jù),因此不需要將數(shù)據(jù)存儲(chǔ)在內(nèi)存中。這對(duì)于大型文檔來(lái)說(shuō)是個(gè)巨大的優(yōu)點(diǎn)。事實(shí)上,應(yīng)用程序甚至不必解析整個(gè)文檔;它可以在某個(gè)條件得到滿足時(shí)停止解析。一般來(lái)說(shuō),sax還比它的替代者dom快許多。
選擇dom還是選擇sax?對(duì)于需要自己編寫代碼來(lái)處理xml文檔的開發(fā)人員來(lái)說(shuō),選擇dom還是sax解析模型是一個(gè)非常重要的設(shè)計(jì)決策。dom采用建立樹形結(jié)構(gòu)的方式訪問(wèn)xml文檔,而sax采用的事件模型。
dom解析器把xml文檔轉(zhuǎn)化為一個(gè)包含其內(nèi)容的樹,并可以對(duì)樹進(jìn)行遍歷。用dom解析模型的優(yōu)點(diǎn)是編程容易,開發(fā)人員只需要調(diào)用建樹的指令,然后利用navigationapis訪問(wèn)所需的樹節(jié)點(diǎn)來(lái)完成任務(wù)。可以很容易的添加和修改樹中的元素。然而由于使用dom解析器的時(shí)候需要處理整個(gè)xml文檔,所以對(duì)性能和內(nèi)存的要求比較高,尤其是遇到很大的xml文件的時(shí)候。由于它的遍歷能力,dom解析器常用于xml文檔需要頻繁的改變的服務(wù)中。
sax解析器采用了基于事件的模型,它在解析xml文檔的時(shí)候可以觸發(fā)一系列的事件,
當(dāng)發(fā)現(xiàn)給定的tag的時(shí)候,它可以激活一個(gè)回調(diào)方法,告訴該方法制定的標(biāo)簽已經(jīng)找到。sax對(duì)內(nèi)存的要求通常會(huì)比較低,因?yàn)樗岄_發(fā)人員自己來(lái)決定所要處理的tag。特別是當(dāng)開發(fā)人員只需要處理文檔中所包含的部分?jǐn)?shù)據(jù)時(shí),sax這種擴(kuò)展能力得到了更好的體現(xiàn)。但用sax解析器的時(shí)候編碼工作會(huì)比較困難,而且很難同時(shí)訪問(wèn)同一個(gè)文檔中的多處不同數(shù)據(jù)。
3)jdom()
jdom的目的是成為java特定文檔模型,它簡(jiǎn)化與xml的交互并且比使用dom實(shí)現(xiàn)更快。由于是第一個(gè)java特定模型,jdom一直得到大力推廣和促進(jìn)。正在考慮通過(guò)“java規(guī)范請(qǐng)求jsr-102”將它最終用作“java標(biāo)準(zhǔn)擴(kuò)展”。從201*年初就已經(jīng)開始了jdom開發(fā)。jdom與dom主要有兩方面不同。首先,jdom僅使用具體類而不使用接口。這在某些方面簡(jiǎn)化了api,但是也限制了靈活性。第二,api大量使用了collections類,簡(jiǎn)化了那些已經(jīng)熟悉這些類的java開發(fā)者的使用。
jdom文檔聲明其目的是“使用20%(或更少)的精力解決80%(或更多)java/xml問(wèn)題”(根據(jù)學(xué)習(xí)曲線假定為20%)。jdom對(duì)于大多數(shù)java/xml應(yīng)用程序來(lái)說(shuō)當(dāng)然是有用的,并且大多數(shù)開發(fā)者發(fā)現(xiàn)api比dom容易理解得多。jdom還包括對(duì)程序行為的相當(dāng)廣泛檢查以防止用戶做任何在xml中無(wú)意義的事。然而,它仍需要您充分理解xml以便做一些超出基本的工作(或者甚至理解某些情況下的錯(cuò)誤)。這也許是比學(xué)習(xí)dom或jdom接口都更有意義的工作。
jdom自身不包含解析器。它通常使用sax2解析器來(lái)解析和驗(yàn)證輸入xml文檔(盡管它還可以將以前構(gòu)造的dom表示作為輸入)。它包含一些轉(zhuǎn)換器以將jdom表示輸出成sax2事件流、dom模型或xml文本文檔。jdom是在apache許可證變體下發(fā)布的開放源碼。
4)dom4j()
雖然dom4j代表了完全獨(dú)立的開發(fā)結(jié)果,但最初,它是jdom的一種智能分支。它合并了許多超出基本xml文檔表示的功能,包括集成的xpath支持、xmlschema支持以及用于大文檔或流化文檔的基于事件的處理。它還提供了構(gòu)建文檔表示的選項(xiàng),它通過(guò)dom4japi和標(biāo)準(zhǔn)dom接口具有并行訪問(wèn)功能。從201*下半年開始,它就一直處于開發(fā)之中。為支持所有這些功能,dom4j使用接口和抽象基本類方法。dom4j大量使用了api中的collections類,但是在許多情況下,它還提供一些替代方法以允許更好的性能或更直接的編碼方法。直接好處是,雖然dom4j付出了更復(fù)雜的api的代價(jià),但是它提供了比jdom大得多的靈活性。
在添加靈活性、xpath集成和對(duì)大文檔處理的目標(biāo)時(shí),dom4j的目標(biāo)與jdom是一樣的:針對(duì)java開發(fā)者的易用性和直觀操作。它還致力于成為比jdom更完整的解決方案,實(shí)現(xiàn)
在本質(zhì)上處理所有java/xml問(wèn)題的目標(biāo)。在完成該目標(biāo)時(shí),它比jdom更少?gòu)?qiáng)調(diào)防止不正確的應(yīng)用程序行為。
dom4j是一個(gè)非常非常優(yōu)秀的javaxmlapi,具有性能優(yōu)異、功能強(qiáng)大和極端易用使用的特點(diǎn),同時(shí)它也是一個(gè)開放源代碼的軟件。如今你可以看到越來(lái)越多的java軟件都在使用dom4j來(lái)讀寫xml,特別值得一提的是連sun的jaxm也在用dom4j。
3.8.3.2比較
1)dom4j性能最好,連sun的jaxm也在用dom4j。目前許多開源項(xiàng)目中大量采用dom4j,例如大名鼎鼎的hibernate也用dom4j來(lái)讀取xml配置文件。如果不考慮可移植性,那就采用dom4j.
2)jdom和dom在性能測(cè)試時(shí)表現(xiàn)不佳,在測(cè)試10m文檔時(shí)內(nèi)存溢出。在小文檔情況下還值得考慮使用dom和jdom。雖然jdom的開發(fā)者已經(jīng)說(shuō)明他們期望在正式發(fā)行版前專注性能問(wèn)題,但是從性能觀點(diǎn)來(lái)看,它確實(shí)沒(méi)有值得推薦之處。另外,dom仍是一個(gè)非常好的選擇。dom實(shí)現(xiàn)廣泛應(yīng)用于多種編程語(yǔ)言。它還是許多其它與xml相關(guān)的標(biāo)準(zhǔn)的基礎(chǔ),因?yàn)樗将@得w3c推薦(與基于非標(biāo)準(zhǔn)的java模型相對(duì)),所以在某些類型的項(xiàng)目中可能也需要它(如在javascript中使用dom)。
3)sax表現(xiàn)較好,這要依賴于它特定的解析方式-事件驅(qū)動(dòng)。一個(gè)sax檢測(cè)即將到來(lái)的xml流,但并沒(méi)有載入到內(nèi)存(當(dāng)然當(dāng)xml流被讀入時(shí),會(huì)有部分文檔暫時(shí)隱藏在內(nèi)存中)。
3.8.3.3四種xml操作方式的基本使用方法xml文件:
<?xmlversion="1.0"encoding="gb2312"?>
<result><value>
<no>a1234</no>
<addr>廣東省xx縣xx鎮(zhèn)xx路x段xx號(hào)</addr></value><value>
<no>b1234</no>
<addr>廣東省xx市xx鄉(xiāng)xx村xx組</addr></value></result>
1)dom
importjava.io.*;importjava.util.*;
importorg.w3c.dom.*;
importjavax.xml.parsers.*;
publicclassmyxmlreader{
publicstaticvoidmain(stringarge[]){
longlasting=system.currenttimemillis();try{
filef=newfile("data_10k.xml");documentbuilderfactoryfactory=documentbuilderfactory.newinstance();
documentbuilderbuilder=factory.newdocumentbuilder();documentdoc=builder.parse(f);
nodelistnl=doc.getelementsbytagname("value");for(inti=0;i<nl.getlength();i++){system.out.print("車牌號(hào)碼:"+doc.getelementsbytagname("no").item(i).getfirstchild().getnodevalue());system.out.println("車主地址:"+doc.getelementsbytagname("addr").item(i).getfirstchild().getnodevalue());}
}catch(exceptione){e.printstacktrace();}2)sax
importorg.xml.sax.*;
importorg.xml.sax.helpers.*;importjavax.xml.parsers.*;
publicclassmyxmlreaderextendsdefaulthandler{java.util.stacktags=newjava.util.stack();publicmyxmlreader(){super();}
publicstaticvoidmain(stringargs[]){
longlasting=system.currenttimemillis();try{
saxparserfactorysf=saxparserfactory.newinstance();saxparsersp=sf.newsaxparser();
myxmlreaderreader=newmyxmlreader();
sp.parse(newinputsource("data_10k.xml"),reader);}catch(exceptione){e.printstacktrace();}
system.out.println("運(yùn)行時(shí)間:"+(system.currenttimemillis()-lasting)+"毫秒");}
publicvoidcharacters(charch[],intstart,intlength)throwssaxexception{
stringtag=(string)tags.peek();if(tag.equals("no")){
system.out.print("車牌號(hào)碼:"+newstring(ch,start,length));}
if(tag.equals("addr")){
system.out.println("地址:"+newstring(ch,start,length));}}
publicvoidstartelement(stringuri,stringlocalname,stringqname,attributesattrs){
tags.push(qname);}}
3)jdom
importjava.io.*;importjava.util.*;importorg.jdom.*;
importorg.jdom.input.*;publicclassmyxmlreader{
publicstaticvoidmain(stringarge[]){
longlasting=system.currenttimemillis();try{
saxbuilderbuilder=newsaxbuilder();
documentdoc=builder.build(newfile("data_10k.xml"));elementfoo=doc.getrootelement();listallchildren=foo.getchildren();for(inti=0;i<allchildren.size();i++){system.out.print("車牌號(hào)碼((element)allchildren.get(i)).getchild("no").gettext());system.out.println("車主地址((element)allchildren.get(i)).getchild("addr").gettext());}
34:":"
++
}catch(exceptione){e.printstacktrace();}}
4)dom4j
importjava.io.*;importjava.util.*;importorg.dom4j.*;importorg.dom4j.io.*;publicclassmyxmlreader{
publicstaticvoidmain(stringarge[]){
longlasting=system.currenttimemillis();try{
filef=newfile("data_10k.xml");
saxreaderreader=newsaxreader();documentdoc=reader.read(f);
elementroot=doc.getrootelement();elementfoo;
for(iteratori=root.elementiterator("value");i.hasnext();){foo=(element)i.next();
system.out.print("車牌號(hào)碼:"+foo.elementtext("no"));system.out.println("車主地址:"+foo.elementtext("addr"));}
}catch(exceptione){e.printstacktrace();}}
3.9Ajax
3.9.1Ajax簡(jiǎn)介
Ajax不是一種新的編程語(yǔ)言,而是一種用于創(chuàng)建更好更快以及交互性更強(qiáng)的Web應(yīng)用程序的技術(shù)。
通過(guò)Ajax,您的JavaScript可使用JavaScript的XMLHttpRequest對(duì)象來(lái)直接與服務(wù)器進(jìn)行通信。通過(guò)這個(gè)對(duì)象,您的JavaScript可在不重載頁(yè)面的情況與Web服務(wù)
器交換數(shù)據(jù)。
Ajax在瀏覽器與Web服務(wù)器之間使用異步數(shù)據(jù)傳輸(HTTP請(qǐng)求),這樣就可使網(wǎng)頁(yè)從服務(wù)器請(qǐng)求少量的信息,而不是整個(gè)頁(yè)面。Ajax可使因特網(wǎng)應(yīng)用程序更小、更快,更友好。
Ajax是一種獨(dú)立于Web服務(wù)器軟件的瀏覽器技術(shù)。Ajax基于下列Web標(biāo)準(zhǔn):JavaScriptXMLHTMLCSS在Ajax中使用的Web標(biāo)準(zhǔn)已被良好定義,并被所有的主流瀏覽器支持。Ajax應(yīng)用程序獨(dú)立于瀏覽器和平臺(tái)。
Web應(yīng)用程序較桌面應(yīng)用程序有諸多優(yōu)勢(shì);它們能夠涉及廣大的用戶,它們更易安裝及維護(hù),也更易開發(fā)。
不過(guò),因特網(wǎng)應(yīng)用程序并不像傳統(tǒng)的桌面應(yīng)用程序那樣完善且友好。
通過(guò)Ajax,因特網(wǎng)應(yīng)用程序可以變得更完善,更友好。
如名字所示,Ajax的概念中最重要而最易被忽視的是它也是一種JavaScript編程語(yǔ)言。JavaScript是一種粘合劑使Ajax應(yīng)用的各部分集成在一起。在大部分時(shí)間,JavaScript通常被服務(wù)端開發(fā)人員認(rèn)為是一種企業(yè)級(jí)應(yīng)用不需要使用的東西應(yīng)該盡力避免。這種觀點(diǎn)來(lái)自以前編寫JavaScript代碼的經(jīng)歷:繁雜而又易出錯(cuò)的語(yǔ)言。類似的,它也被認(rèn)為將應(yīng)用邏輯任意地散布在服務(wù)端和客戶端中,這使得問(wèn)題很難被發(fā)現(xiàn)而且代碼很難重用。在Ajax中JavaScript主要被用來(lái)傳遞用戶界面上的數(shù)據(jù)到服務(wù)端并返回結(jié)果。XMLHttpRequest對(duì)象用來(lái)響應(yīng)通過(guò)HTTP傳遞的數(shù)據(jù),一旦數(shù)據(jù)返回到客戶端就可以立刻使用DOM將數(shù)據(jù)放到網(wǎng)頁(yè)上。
為了正確的瀏覽Ajax應(yīng)用,CSS是一種Ajax開發(fā)人員所需要的重要武器。CSS提供了從內(nèi)容中分離應(yīng)用樣式和設(shè)計(jì)的機(jī)制。雖然CSS在Ajax應(yīng)用中扮演至關(guān)重要的角色,但它也是構(gòu)建跨瀏覽器應(yīng)用的一大阻礙,因?yàn)椴煌臑g覽器廠商支持各種不同的CSS級(jí)別。
XMLHttpRequest對(duì)象在大部分瀏覽器上已經(jīng)實(shí)現(xiàn)而且擁有一個(gè)簡(jiǎn)單的接口允許數(shù)據(jù)從客戶端傳遞到服務(wù)端,但并不會(huì)打斷用戶當(dāng)前的操作。使用XMLHttpRequest傳送的數(shù)據(jù)可以是任何格式,雖然從名字上建議是XML格式的數(shù)據(jù)。
3.9.2Ajax實(shí)現(xiàn)
3.9.2.1.創(chuàng)建XMLHttpRequest方法:
在實(shí)際應(yīng)用中,為了兼容多種不同版本的瀏覽器,一般將創(chuàng)建XMLHttpRequest類的方法寫成如下形式:
//ProvidetheXMLHttpRequestclassforIE5.x-6.x://Otherbrowsers(includingIE7.x-8.x)ignorethis//whenXMLHttpRequestispredefinedvarxmlHttp;
if(typeofXMLHttpRequest!="undefined"){xmlHttp=newXMLHttpRequest();}elseif(window.ActiveXObject){
varaVersions=["Msxml2.XMLHttp.5.0","Msxml2.XMLHttp.4.0","Msxml2.XMLHttp.3.0","Msxml2.XMLHttp","Microsoft.XMLHttp"];for(vari=0;i
xmlHttp=newActiveXObject(aVersions[i]);break;
}catch(e){}}}
3.9.2.2發(fā)送請(qǐng)求
可以調(diào)用HTTP請(qǐng)求類的open()和send()方法,如下所示:xmlhttp_request.open("GET",URL,true);xmlhttp_request.send(null);
open()的第一個(gè)參數(shù)是HTTP請(qǐng)求方式GET,POST或任何服務(wù)器所支持的您想調(diào)用的方式。按照HTTP規(guī)范,該參數(shù)要大寫;否則,某些瀏覽器(如Firefox)可能無(wú)法處理請(qǐng)求。
第二個(gè)參數(shù)是請(qǐng)求頁(yè)面的URL。
第三個(gè)參數(shù)設(shè)置請(qǐng)求是否為異步模式。如果是TRUE,JavaScript函數(shù)將繼續(xù)執(zhí)行,而不等待服務(wù)器響應(yīng)。這就是"Ajax"中的"A"。
3.9.2.3服務(wù)器的響應(yīng)
這需要告訴HTTP請(qǐng)求對(duì)象用哪一個(gè)JavaScript函數(shù)處理這個(gè)響應(yīng)。可以將對(duì)象的onreadystatechange屬性設(shè)置為要使用的JavaScript的函數(shù)名,如下所示:xmlhttp_request.onreadystatechange=FunctionName;
FunctionName是用JavaScript創(chuàng)建的函數(shù)名,注意不要寫成FunctionName(),當(dāng)然我們也可以直接將JavaScript代碼創(chuàng)建在onreadystatechange之后,例如:xmlhttp_request.onreadystatechange=function(){//JavaScript代碼段
};首先要檢查請(qǐng)求的狀態(tài)。只有當(dāng)一個(gè)完整的服務(wù)器響應(yīng)已經(jīng)收到了,函數(shù)才可以處理該響應(yīng)。XMLHttpRequest提供了readyState屬性來(lái)對(duì)服務(wù)器響應(yīng)進(jìn)行判斷。readyState的取值如下:0(未初始化)1(正在裝載)2(裝載完畢)3(交互中)4(完成)
所以只有當(dāng)readyState=4時(shí),一個(gè)完整的服務(wù)器響應(yīng)已經(jīng)收到了,函數(shù)才可以處理該響應(yīng)。具體代碼如下:
if(http_request.readyState==4){//收到完整的服務(wù)器響應(yīng)}else{//沒(méi)有收到完整的服務(wù)器響應(yīng)}
當(dāng)readyState=4時(shí),一個(gè)完整的服務(wù)器響應(yīng)已經(jīng)收到了,接著,函數(shù)會(huì)檢查HTTP服務(wù)器響應(yīng)的狀態(tài)值。完整的狀態(tài)取值可參見W3C文檔。當(dāng)HTTP服務(wù)器響應(yīng)的值為200時(shí),表示狀態(tài)正常。
3.9.2.4處理從服務(wù)器得到的數(shù)據(jù)有兩種方式可以得到這些數(shù)據(jù):
(1)以文本字符串的方式返回服務(wù)器的響應(yīng)
(2)以XMLDocument對(duì)象方式返回響應(yīng)
3.9.3Ajax的優(yōu)勢(shì)與劣勢(shì)
優(yōu)點(diǎn):更迅捷的響應(yīng)速度
傳統(tǒng)的web應(yīng)用允許用戶填寫表單(form),當(dāng)提交表單時(shí)就向web服務(wù)器發(fā)送一個(gè)請(qǐng)求。服務(wù)器接收并處理傳來(lái)的表單,然後返回一個(gè)新的網(wǎng)頁(yè)。這個(gè)做法浪費(fèi)了許多帶寬,因?yàn)樵谇搬醿蓚(gè)頁(yè)面中的大部分HTML代碼往往是相同的。由于每次應(yīng)用的交互都需要向服務(wù)器發(fā)送請(qǐng)求,應(yīng)用的響應(yīng)時(shí)間就依賴于服務(wù)器的響應(yīng)時(shí)間。這導(dǎo)致了用戶界面的響應(yīng)比本地應(yīng)用慢得多。
與此不同,Ajax應(yīng)用可以僅向服務(wù)器發(fā)送并取回必需的數(shù)據(jù),它使用SOAP或其它一些基于XML的webservice接口,并在客戶端采用JavaScript處理來(lái)自服務(wù)器的響應(yīng)。
因此在服務(wù)器和瀏覽器之間交換的數(shù)據(jù)大量減少,結(jié)果我們就能看到響應(yīng)更快的應(yīng)用。同時(shí)很多的處理工作可以在發(fā)出請(qǐng)求的客戶端機(jī)器上完成,所以Web服務(wù)器的處理時(shí)間也減少了。
使用Ajax的最大優(yōu)點(diǎn),就是能在不更新整個(gè)頁(yè)面的前提下維護(hù)數(shù)據(jù)。這使得Web應(yīng)用程序更為迅捷地回應(yīng)用戶動(dòng)作,并避免了在網(wǎng)絡(luò)上發(fā)送那些沒(méi)有改變過(guò)的信息。
Ajax不需要任何瀏覽器插件,但需要用戶允許JavaScript在瀏覽器上執(zhí)行。就像DHTML應(yīng)用程序那樣,Ajax應(yīng)用程序必須在眾多不同的瀏覽器和平臺(tái)上經(jīng)過(guò)嚴(yán)格的測(cè)試。隨著Ajax的成熟,一些簡(jiǎn)化Ajax使用方法的程序庫(kù)也相繼問(wèn)世。同樣,也出現(xiàn)了另一種輔助程序設(shè)計(jì)的技術(shù),為那些不支持JavaScript的用戶提供替代功能。
缺點(diǎn)與其中一些問(wèn)題的對(duì)應(yīng)解決方案:
對(duì)應(yīng)用Ajax最主要的批評(píng)就是,它可能破壞瀏覽器后退按鈕的正常行為。在動(dòng)態(tài)更新頁(yè)面的情況下,用戶無(wú)法回到前一個(gè)頁(yè)面狀態(tài),這是因?yàn)闉g覽器僅能記下歷史記錄中的靜態(tài)頁(yè)面。一個(gè)被完整讀入的頁(yè)面與一個(gè)已經(jīng)被動(dòng)態(tài)修改過(guò)的頁(yè)面之間的差別非常微妙;用戶通常都希望單擊后退按鈕,就能夠取消他們的前一次操作,但是在Ajax應(yīng)用程序中,卻無(wú)法這樣做。不過(guò)開發(fā)者已想出了種種辦法來(lái)解決這個(gè)問(wèn)題,當(dāng)中大多數(shù)都是在用戶單擊后退按鈕訪問(wèn)歷史記錄時(shí),通過(guò)建立或使用一個(gè)隱藏的IFRAME來(lái)重現(xiàn)頁(yè)面上的變更。(例如,當(dāng)用戶在GoogleMaps中單擊后退時(shí),它在一個(gè)隱藏的IFRAME中進(jìn)行搜索,然后將搜索結(jié)果反映到Ajax元素上,以便將應(yīng)用程序狀態(tài)恢復(fù)到當(dāng)時(shí)的狀態(tài)。)
一個(gè)相關(guān)的觀點(diǎn)認(rèn)為,使用動(dòng)態(tài)頁(yè)面更新使得用戶難于將某個(gè)特定的狀態(tài)保存到收藏夾中。該問(wèn)題的解決方案也已出現(xiàn),大部分都使用URL片斷標(biāo)識(shí)符(通常被稱為錨點(diǎn),即URL中#后面的部分)來(lái)保持跟蹤,允許用戶回到指定的某個(gè)應(yīng)用程序狀態(tài)。(許多瀏覽器允許JavaScript動(dòng)態(tài)更新錨點(diǎn),這使得Ajax應(yīng)用程序能夠在更新顯示內(nèi)容的同時(shí)更新錨點(diǎn)。)這些解決方案也同時(shí)解決了許多關(guān)于不支持后退按鈕的爭(zhēng)論。
進(jìn)行Ajax開發(fā)時(shí),網(wǎng)絡(luò)延遲即用戶發(fā)出請(qǐng)求到服務(wù)器發(fā)出響應(yīng)之間的間隔需要慎重考慮。不給予用戶明確的回應(yīng),沒(méi)有恰當(dāng)?shù)念A(yù)讀數(shù)據(jù),或者對(duì)XMLHttpRequest的不恰當(dāng)處理,都會(huì)使用戶感到延遲,這是用戶不欲看到的,也是他們無(wú)法理解的。通常的解決方案是,使用一個(gè)可視化的組件來(lái)告訴用戶系統(tǒng)正在進(jìn)行后臺(tái)操作并且正在讀取數(shù)據(jù)和內(nèi)容。
一些手持設(shè)備(如手機(jī)、PDA等)現(xiàn)在還不能很好的支持Ajax;
用JavaScript作的Ajax引擎,JavaScript的兼容性和DeBug都是讓人頭痛的事;Ajax的無(wú)刷新重載,由于頁(yè)面的變化沒(méi)有刷新重載那么明顯,所以容易給用戶帶來(lái)困
擾——用戶不太清楚現(xiàn)在的數(shù)據(jù)是新的還是已經(jīng)更新過(guò)的;現(xiàn)有的解決有:在相關(guān)位置提示、數(shù)據(jù)更新的區(qū)域設(shè)計(jì)得比較明顯、數(shù)據(jù)更新后給用戶提示等。
Ajax是以異步的方式向服務(wù)器提交需求。對(duì)服務(wù)器而言,其與傳統(tǒng)的提交窗體需求并無(wú)不同,而且由于是以異步之方式提交,如果同時(shí)有多個(gè)Ajax需求及窗體提交需求,將無(wú)法保證哪一個(gè)需求先獲得服務(wù)器的響應(yīng)。這會(huì)造成應(yīng)用程序典型的多進(jìn)程(process)或多線程(thread)的競(jìng)爭(zhēng)(racing)問(wèn)題。程序員因此必須自行處理或在JavaScript里面動(dòng)手腳以避免這類競(jìng)爭(zhēng)問(wèn)題的發(fā)生(如Ajax需求未響應(yīng)之前,先disable送出按鈕),這又不必要的增加了程序員的負(fù)擔(dān)。
3.10JSTL
3.10.1JSTL介紹
JSP標(biāo)準(zhǔn)標(biāo)簽庫(kù)(JSPStandardTagLibrary,JSTL)是一個(gè)實(shí)現(xiàn)Web應(yīng)用程序中常見的通用功能的定制標(biāo)記庫(kù)集,這些功能包括迭代和條件判斷、數(shù)據(jù)管理格式化、XML操作以及數(shù)據(jù)庫(kù)訪問(wèn)。在developerWorks上其新系列的第一篇文章中,軟件工程師MarkKolb展示了如何使用JSTL標(biāo)記來(lái)避免在JSP頁(yè)面中使用腳本編制元素,如何通過(guò)從表示層刪除源代碼來(lái)簡(jiǎn)化軟件維護(hù)。JSTL經(jīng)過(guò)簡(jiǎn)化的表達(dá)式語(yǔ)言,它允許在不必使用功能齊全的編程語(yǔ)言的情況下對(duì)JSTL操作指定動(dòng)態(tài)屬性值。
JavaServerPages(JSP)是用于J2EE平臺(tái)的標(biāo)準(zhǔn)表示層技術(shù)。JSP技術(shù)提供了用于執(zhí)行計(jì)算(這些計(jì)算用來(lái)動(dòng)態(tài)地生成頁(yè)面內(nèi)容)的腳本編制元素和操作。腳本編制元素允許在JSP頁(yè)面中包括程序源代碼,在為響應(yīng)用戶請(qǐng)求而呈現(xiàn)頁(yè)面時(shí)可以執(zhí)行這些源代碼。操作將計(jì)算操作封裝到很象HTML或XML標(biāo)記的標(biāo)記中,JSP頁(yè)面的模板文本通常包含這些標(biāo)記。JSP規(guī)范只將幾種操作定義成了標(biāo)準(zhǔn),但從JSP1.1開始,開發(fā)人員已經(jīng)能夠以定制標(biāo)記庫(kù)的方式創(chuàng)建其自己的操作了。
JSP標(biāo)準(zhǔn)標(biāo)記庫(kù)(JSTL)是JSP1.2定制標(biāo)記庫(kù)集,這些標(biāo)記庫(kù)實(shí)現(xiàn)大量服務(wù)器端Java應(yīng)用程序常用的基本功能。通過(guò)為典型表示層任務(wù)(如數(shù)據(jù)格式化和迭代或條件內(nèi)容)提供標(biāo)準(zhǔn)實(shí)現(xiàn),JSTL使JSP作者可以專注于特定于應(yīng)用程序的開發(fā)需求,而不是為這些通用操作“另起爐灶”。
3.10.2JSTL隱式對(duì)象
JSP:
pageContextPageContext實(shí)例對(duì)應(yīng)于當(dāng)前頁(yè)面的處理作用域:
pageScope與頁(yè)面作用域?qū)傩缘拿Q和值相關(guān)聯(lián)的Map類requestScope與請(qǐng)求作用域?qū)傩缘拿Q和值相關(guān)聯(lián)的Map類sessionScope與會(huì)話作用域?qū)傩缘拿Q和值相關(guān)聯(lián)的Map類applicationScope與應(yīng)用程序作用域?qū)傩缘拿Q和值相關(guān)聯(lián)的Map類請(qǐng)求參數(shù):
param按名稱存儲(chǔ)請(qǐng)求參數(shù)的主要值的Map類
paramValues將請(qǐng)求參數(shù)的所有值作為String數(shù)組存儲(chǔ)的Map類請(qǐng)求頭:
header按名稱存儲(chǔ)請(qǐng)求頭主要值的Map類
headerValues將請(qǐng)求頭的所有值作為String數(shù)組存儲(chǔ)的Map類Cookiecookie按名稱存儲(chǔ)請(qǐng)求附帶的cookie的Map類初始化參數(shù):
initParam按名稱存儲(chǔ)Web應(yīng)用程序上下文初始化參數(shù)的Map類
盡管JSP和EL隱式對(duì)象中只有一個(gè)公共對(duì)象(pageContext),但通過(guò)EL也可以訪問(wèn)其它JSP隱式對(duì)象。原因是pageContext擁有訪問(wèn)所有其它八個(gè)JSP隱式對(duì)象的特性。實(shí)際上,這是將它包括在EL隱式對(duì)象中的主要理由。
其余所有EL隱式對(duì)象都是映射,可以用來(lái)查找對(duì)應(yīng)于名稱的對(duì)象。前四個(gè)映射表示先前討論的各種屬性作用域?梢杂盟鼈儊(lái)查找特定作用域中的標(biāo)識(shí)符,而不用依賴于EL在缺省情況下使用的順序查找過(guò)程。
接下來(lái)的四個(gè)映射用來(lái)獲取請(qǐng)求參數(shù)和請(qǐng)求頭的值。因?yàn)镠TTP協(xié)議允許請(qǐng)求參數(shù)和請(qǐng)求頭具有多個(gè)值,所以它們各有一對(duì)映射。每對(duì)中的第一個(gè)映射返回請(qǐng)求參數(shù)或頭的主要值,通常是恰巧在實(shí)際請(qǐng)求中首先指定的那個(gè)值。每對(duì)中第二個(gè)映射允許檢索參數(shù)或頭的所有值。這些映射中的鍵是參數(shù)或頭的名稱,但這些值是String對(duì)象的數(shù)組,其中的每個(gè)元素都是單一參數(shù)值或頭值。
cookie隱式對(duì)象提供了對(duì)由請(qǐng)求設(shè)置的cookie名稱的訪問(wèn)。這個(gè)對(duì)象將所有與請(qǐng)求相關(guān)聯(lián)的cookie名稱映射到表示那些cookie特性的Cookie對(duì)象。
最后一個(gè)EL隱式對(duì)象initParam是一個(gè)映射,它儲(chǔ)存與Web應(yīng)用程序相關(guān)聯(lián)的所有上下文的初始化參數(shù)的名稱和值。初始化參數(shù)是通過(guò)web.xml部署描述符文件指定的,該文件位于應(yīng)用程序的WEB-INF目錄中。
3.10.3常用函數(shù)
fn:contains(string,substring)
如果參數(shù)string中包含參數(shù)substring,返回truefn:containsIgnoreCase(string,substring)
如果參數(shù)string中包含參數(shù)substring(忽略大小寫),返回truefn:endsWith(string,suffix)
如果參數(shù)string以參數(shù)suffix結(jié)尾,返回truefn:escapeXml(string)
將有特殊意義的XML(和HTML)轉(zhuǎn)換為對(duì)應(yīng)的XML實(shí)體字符,并返回轉(zhuǎn)義后的字符fn:indexOf(string,substring)
返回參數(shù)substring在參數(shù)string中第一次出現(xiàn)的位置fn:join(array,separator)
將一個(gè)給定的數(shù)組array用給定的間隔符separator串在一起,組成一個(gè)新的字符串并返回。
fn:length(item)
返回參數(shù)item中包含元素的數(shù)量。
參數(shù)Item類型是普通對(duì)象、數(shù)組、Collection、Map、Iterator迭代器、Enumeration枚舉對(duì)象、或者String。
如果是String類型,返回值是String中的字符數(shù)。如果是數(shù)組類型,返回值是數(shù)組的長(zhǎng)度。
如果是Collection容器類的子類,返回值是該容器類的包含元素的個(gè)數(shù)。如果是Map類型,返回值是此映射中的鍵-值映射關(guān)系數(shù)。如果是Iterator類型,返回值是Iterator中的元素個(gè)數(shù)。
如果是Enumeration類型,返回值是Enumeration中的元素個(gè)數(shù)fn:replace(string,before,after)
返回一個(gè)String對(duì)象。
用參數(shù)after字符串替換參數(shù)string中所有出現(xiàn)參數(shù)before字符串的地方,并返回替換后的結(jié)果
fn:split(string,separator)
返回一個(gè)數(shù)組,以參數(shù)separator為分割符分割參數(shù)string,分割后的每一部分就是數(shù)組的一個(gè)元素
fn:startsWith(string,prefix)
如果參數(shù)string以參數(shù)prefix開頭,返回truefn:substring(string,begin,end)
返回參數(shù)string部分字符串,從參數(shù)begin開始到參數(shù)end位置,包括end位置的字符
fn:substringAfter(string,substring)
返回參數(shù)substring在參數(shù)string中后面的那一部分字符串fn:substringBefore(string,substring)
返回參數(shù)substring在參數(shù)string中前面的那一部分字符串fn:toLowerCase(string)
將參數(shù)string所有的字符變?yōu)樾,并將其返回fn:toUpperCase(string)
將參數(shù)string所有的字符變?yōu)榇髮,并將其返回fn:trim(string)
去除參數(shù)string首尾的空格,并將其返回
四、實(shí)習(xí)總結(jié)
Java是一種可以撰寫跨平臺(tái)應(yīng)用軟件的面向?qū)ο蟮某绦蛟O(shè)計(jì)語(yǔ)言,是由Sun公司于1995年5月推出的Java程序設(shè)計(jì)語(yǔ)言和Java平臺(tái)(即JavaSE,JavaEE,JavaME)的總稱。Java技術(shù)具有卓越的通用性、高效性、平臺(tái)移植性和安全性,廣泛應(yīng)用于個(gè)人PC、數(shù)據(jù)中心、游戲控制臺(tái)、科學(xué)超級(jí)計(jì)算機(jī)、移動(dòng)電話和互聯(lián)網(wǎng),同時(shí)擁有全球最大的開發(fā)者專業(yè)社群。在全球云計(jì)算和移動(dòng)互聯(lián)網(wǎng)的產(chǎn)業(yè)環(huán)境下,Java更具備了顯著優(yōu)勢(shì)和廣闊前景。
在本次實(shí)習(xí)中,我們主要學(xué)習(xí)了前臺(tái)方面例如Html、js、div、css等技術(shù),后臺(tái)主要是JavaWeb方面的技術(shù),例如jsp、servlet、jstl、mvc+dao技術(shù)等等。在實(shí)習(xí)接近尾聲時(shí),每個(gè)小組都做了一個(gè)基于MVC+DAO的團(tuán)購(gòu)網(wǎng)進(jìn)行答辯,以鞏固所學(xué)知識(shí)點(diǎn)。
總的來(lái)說(shuō),這次實(shí)習(xí)讓我明白了在學(xué)習(xí)過(guò)程中必須邊總結(jié)邊學(xué)習(xí),遇到一個(gè)知識(shí)點(diǎn)必須學(xué)會(huì)舉一反三。非常感謝實(shí)習(xí)的指導(dǎo)老師,在老師的幫助和指導(dǎo)下,我攻克了學(xué)習(xí)上的一道道難關(guān),課上認(rèn)真聽講,做好必要的筆記,并且通過(guò)自己課后的不斷消化學(xué)習(xí),對(duì)所學(xué)的這些知識(shí)點(diǎn)可以算是牢固掌握,并且能獨(dú)立的開發(fā)出系統(tǒng)。我相信,只要我秉持艱苦奮斗、為理想拼搏的精神,我一定可以披荊斬棘,度過(guò)重重難關(guān),實(shí)現(xiàn)自己未來(lái)的理想。
友情提示:本文中關(guān)于《特殊教育081實(shí)習(xí)總結(jié)》給出的范例僅供您參考拓展思維使用,特殊教育081實(shí)習(xí)總結(jié):該篇文章建議您自主創(chuàng)作。
來(lái)源:網(wǎng)絡(luò)整理 免責(zé)聲明:本文僅限學(xué)習(xí)分享,如產(chǎn)生版權(quán)問(wèn)題,請(qǐng)聯(lián)系我們及時(shí)刪除。