web技術:動態頁面技術jsp和html有啥不同?在編程能有哪些應用?

jsp運行原理,jsp本質就是servlet

jsp在被訪問時會在去Tomcat的work目錄下找servlet文件,如果有則訪問,如果沒有則將jsp翻譯成servlet,然後再訪問,被翻譯的servlet可以在Tomcat的work目錄中可以找到(servlethelloServlet.jsp---->helloServlet_jsp.java---->編譯運行)

jsp腳本

1) ----- 內部的java代碼翻譯到service方法的內部,那就說明在這裡面輸出(System。out。print)不會輸出到頁面而是和會輸出到控制檯2) ----- 會被翻譯成service方法內部out.print(),會將變量在頁面輸出,只要是有結果(變量或者表達式)的東西,都可以用%=輸出3) ---- 會被翻譯成servlet的成員的內容,就是說可以通過這種方式來定義成員變量,和成員方法

我們在jsp中寫代碼,要想讓其在頁面中顯示有多種方式

web技術:動態頁面技術jsp和html有啥不同?在編程能有哪些應用?

上面有四種寫法,除了response.getwriter之外,剩下三種翻譯成servlet都是out.write(),都是寫到out緩衝區,然後再刷到response緩衝區,這就說明他們三種都會比response.getwriter寫到頁面慢

web技術:動態頁面技術jsp和html有啥不同?在編程能有哪些應用?

可以看出response.getwriter輸出的cccc先輸出了,所以可以證明一點是response.getwriter輸出的快,因為其它的要先輸出到out緩衝區,我們可以把out緩衝區設置為0,這樣輸出就直接輸出到response緩衝區了,使用buffer標籤

web技術:動態頁面技術jsp和html有啥不同?在編程能有哪些應用?

web技術:動態頁面技術jsp和html有啥不同?在編程能有哪些應用?

不使用buffer標籤時的大概過程

web技術:動態頁面技術jsp和html有啥不同?在編程能有哪些應用?

jsp註釋,不同的註釋可見範圍是不同

1)Html註釋:可見範圍 jsp源碼、翻譯後的servlet(在servlet是out 。write(註釋)的形式存在的)、頁面顯示html源碼2)java註釋://單行註釋 /*多行註釋*/可見範圍 jsp源碼 翻譯後的servlet(//)3)jsp註釋:可見範圍 jsp源碼可見

jsp指令,jsp的指令是指導jsp翻譯和運行的命令

page指令(實際開發中page指令默認),根據不同的屬性,指導整個頁面特性,下面是常用屬性

language:jsp腳本中可以嵌入的語言種類,一般值為javapageEncoding:當前jsp文件的本身編碼,pageEncoding更改的話,在本頁面的window的properties編碼也會發生變化 ,二者是一致的,實質就是文件另存為時文件的編碼格式,設置好它之後,它內部把contentType也設置好了contentType:實質是response.setContentType(text/html;charset=UTF-8)session:是否jsp在翻譯時自動創建session,默認為true,自動創建之後可以直接session.setAttributeimport:導入java的包,在jsp寫Java代碼時,使用的java類如果需要導包,那麼可以使用這二個屬性errorPage:指定當前jsp頁面出錯後(狀態碼為500的錯誤)跳轉到哪個頁面,地址應該寫web端地址,不是給瀏覽器訪問的,狀態碼為500isErrorPage:表示當前頁面是一個處理錯誤的頁面,一般errpage跳過去的頁面上寫這個isErrorPage=true

errorpage是指定出現500錯誤時會跳轉到哪個頁面,如果出現404錯誤時將不會跳轉,那麼怎樣可以設置出現404錯誤時也可以跳轉呢?再web。xml

web技術:動態頁面技術jsp和html有啥不同?在編程能有哪些應用?

include指令

頁面包含(靜態包含)指令,可以將一個jsp頁面包含到另一個jsp頁面中

格式:

比如本頁面寫那麼效果就是demo.Jsp的頁面在本頁面顯示,比如有些網站很多頁面頭和尾代碼一樣,完全可以把頭和尾抽出來,誰用誰就引入就ok了,而且如果要更改只需更改一個就ok了

taglib指令

在jsp頁面中引入標籤庫(jstl標籤庫、struts2標籤庫)格式:

指定前綴之後,使用標籤就的格式使用

jsp內置/隱式對象

這些對象不需要我們手動創建,jsp被翻譯成servlet之後,service方法中有9個對象定義並初始化完畢,我們在jsp腳本中可以直接使用這9個對象

web技術:動態頁面技術jsp和html有啥不同?在編程能有哪些應用?

web技術:動態頁面技術jsp和html有啥不同?在編程能有哪些應用?

其中request,response,config,session,appliaction和我們在servlet中學到的那些域對象用法一樣,可能就是某些對象的nama更改了

out對象

out的類型:JspWriter

out作用就是想客戶端輸出內容----out.write()默認寫到out緩衝區,然後在刷到response緩衝區,然後才能被客戶端獲取到,

out緩衝區默認8kb ,可以設置成0 ,代表關閉out緩衝區,這樣以後寫內容直接寫到respons緩衝區

web技術:動態頁面技術jsp和html有啥不同?在編程能有哪些應用?

使用page指令的buffer屬性可以設置out緩衝區的大小

pageContext對象(jsp頁面的上下文對象)

首先需要明白,page對象與pageContext對象不是一回事,page表示本servlet對象,是this,pageContext表示這個該頁面的上下文對象,pageContext是一個域對象

setAttribute(String name,Object obj)getAttribute(String name)removeAttrbute(String name)pageContext可以向指定的其他域中存取數據setAttribute(String name,Object obj,int scope)getAttribute(String name,int scope)removeAttrbute(String name,int scope)
web技術:動態頁面技術jsp和html有啥不同?在編程能有哪些應用?

第一個是存到request,第二個是通過pageContext將數據存到request,第三個是通過pageContext將數據存到session,第四個是通過pageContext將數據存到application這整個應用中

然後獲取代碼,第一個是直接使用request從request域中獲取name數據,第二個是通過pageContext獲取request中的數據。

findAttribute(String name)這個方法會依次從pageContext域,request域,session域,application域中獲取屬性,範圍從小到大,直到找到或者找不到


page域:當前jsp頁面範圍,從a頁面存的,在其它頁面就獲取不到了,只能在a頁面獲取到數據request域:一次請求(轉發)session域:一次會話(默認)application域:整個web應用

pageContext可以獲得其他8大隱式對象,只要有pageContext引用就可以獲取其它8大對象

pageContext.getRequest()pageContext.getSession()

jsp標籤(動作)

1)頁面包含(動態包含):2)請求轉發:

這個是動態包含,上面還有一個是靜態包含,這兩個都是包含是有區別的,總結一點就是說靜態包含是兩個jsp融合成一個jsp然後被翻譯成servlet,動態包含是兩個jsp分別翻譯成servlet,然後通過一第一個servlet通過一段Java代碼引用另外一個servlet

web技術:動態頁面技術jsp和html有啥不同?在編程能有哪些應用?


分享到:


相關文章: