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