1.jsp的作用
* servlet:
- 缺點(diǎn):不適合設(shè)置HTML,需要大量的 response.getwriter().print("html")
- 優(yōu)點(diǎn):動(dòng)態(tài)資源,可以編程。
* HTML:
- 缺點(diǎn):HTML是靜態(tài)頁(yè)面瓤鼻,不包含動(dòng)態(tài)信息
- 優(yōu)點(diǎn):不用為輸出HTML標(biāo)簽而發(fā)愁。
* jsp:
- 優(yōu)點(diǎn):在原有 HTML 的基礎(chǔ)上添加 Java 腳本,構(gòu)成 jsp 頁(yè)面深啤。
2. jsp和servlet的分工
jsp:
- 作為請(qǐng)求發(fā)起頁(yè)面,例如顯示表單路星、超鏈接溯街。
- 作為請(qǐng)求結(jié)束頁(yè)面,例如顯示數(shù)據(jù)洋丐。
* servlet:
- 作為請(qǐng)求中處理數(shù)據(jù)的環(huán)節(jié)呈昔。
3. jsp 的組成
* jsp = HTML + Java腳本 + jsp標(biāo)簽(指令)
* jsp中無(wú)需創(chuàng)建即可使用的對(duì)象一共有9個(gè),被稱之為9大內(nèi)置對(duì)象友绝。例如:request對(duì)象堤尾、out對(duì)象。
* 3中Java腳本:
- <%......%> : Java代碼片段(常用)迁客,用于定義0~N條Java語(yǔ)句郭宝!
- <%=......%>:Java表達(dá)式辞槐,用于輸出(常用),用于輸出一條表達(dá)式(或變量)的結(jié)果粘室。
- <%!......%>:聲明催蝗,用來(lái)創(chuàng)建類的成員變量和成員方法(基本不用,但容易被考到)
4.jsp指令概述
一個(gè) jsp 中可以有 0~N 個(gè)指令育特。
jsp指令的格式:<%@指令名 attr1=" " attr2=" "%>丙号,一般會(huì)把jsp指令放到 jsp 文件的最上方,但這不是必須的缰冤。
jsp 中有三大指令:page犬缨、include、taglib棉浸,最為常用怀薛,也最為復(fù)雜的就是 page 指令了。
5. jsp三大指令
(1)page 指令
page 指令是最為常用的指令迷郑,也是屬性最多的指令枝恋!
page 指令沒(méi)有必須屬性,都是可選屬性嗡害。例如 <%@page %>焚碌,沒(méi)有給出任何屬性也是可以的!
在 jsp 頁(yè)面中霸妹,任何指令都可以重復(fù)出現(xiàn)十电!
<%@page language = "java"%>
<%@page import = "java.util.*"%>
<%@page pageEncoding = "utf-8"%>
這也是可以的!
*? pageEncoding和contentType:
- pageEnconding 他指定當(dāng)前 jsp 頁(yè)面的編碼叹螟,只要不說(shuō)謊鹃骂,就不會(huì)有亂碼!在服務(wù)器要把jsp編譯成 .jsp 時(shí)要使用 pageEnconding罢绽!
- contentType:他表示添加一個(gè)響應(yīng)頭畏线;
content-Type!等同于? response.setContentType("text/html;charset=utf-8")良价;
- 如果兩個(gè)屬性只設(shè)置一個(gè)寝殴,那么另一個(gè)的默認(rèn)值為設(shè)置那一個(gè)。如果兩個(gè)屬性都沒(méi)有設(shè)置棚壁,那么默認(rèn)為ISO 杯矩;
* import:導(dǎo)包!可以出現(xiàn)多次袖外;
* errorpage 和 isErrorpage
- errorPage:當(dāng)前頁(yè)面如果拋出異常史隆,那么要轉(zhuǎn)發(fā)到哪一個(gè)頁(yè)面,由errorPage來(lái)指定曼验。
- isErrorPage:它指定當(dāng)前頁(yè)面是否為處理錯(cuò)誤的頁(yè)面泌射,當(dāng)該屬性為 true 時(shí)粘姜,這個(gè)頁(yè)面會(huì)設(shè)置狀態(tài)碼為 500!而且這個(gè)頁(yè)面可以使用 9 大內(nèi)置對(duì)象中的 exception 熔酷。
(2)include? ? -->靜態(tài)包含
* 與 RequestDispatcher的include() 方法的功能相似孤紧!
* <%@include%> 它是在 jsp 編譯成 Java 文件時(shí)完成的!他們共同生成一個(gè) Java(就是一個(gè)servlet)文件拒秘,然后再生成一個(gè) class号显!
* RequestDispatcher 的 include() 是一個(gè)方法,包含與被包含是兩個(gè) servlet躺酒,即兩個(gè) .class押蚤!他們只是把響應(yīng)的內(nèi)容在運(yùn)行時(shí)合并了!
* 作用:把頁(yè)面分解了羹应,使用包含的方式組合在一起揽碘,這樣一個(gè)頁(yè)面中不變的部分,就是一個(gè)獨(dú)立的 jsp园匹,而我們只需要處理變化的頁(yè)面雳刺。
(3)taglib? -->導(dǎo)入標(biāo)簽庫(kù)
* 兩個(gè)屬性:
- prefix:指定標(biāo)簽庫(kù)在本頁(yè)面中的前綴!有我們自己來(lái)氣起名字裸违!
- uri:指定標(biāo)簽庫(kù)的位置掖桦!
- <%@taglib prefix="pre" uri="/標(biāo)簽庫(kù)路徑"%>
使用:
6.九大內(nèi)置對(duì)象
* out --> jsp的輸出流,用來(lái)向客戶端響應(yīng)
* page -->當(dāng)前 jsp 對(duì)象累颂,相當(dāng)于 this
* request -->HttpServletRequest
* response -->HttpServletResponse
* session --> HttpSession
* application -->HttpservletContext
* pageContext
* exception
* config -->它對(duì)應(yīng)真身中的 ServletConfig 對(duì)象滞详!
7. JSP動(dòng)作標(biāo)簽
這些 jsp 的動(dòng)作標(biāo)簽凛俱,與 html 提供的標(biāo)簽有本質(zhì)的區(qū)別紊馏。
* 動(dòng)作標(biāo)簽由 tomcat(服務(wù)器)來(lái)解釋執(zhí)行!它與 Java 代碼一樣蒲犬,都是在服務(wù)器端執(zhí)行朱监!
* html 由瀏覽器執(zhí)行!
* :轉(zhuǎn)發(fā)原叮!它與 requestDispatcher 的 forward 方法是一樣的赫编,一個(gè)是在 servlet 中使用,另一個(gè)是在 jsp 中使用奋隶!
* :包含擂送!它與 requestDispatcher 的 include 方法是一樣的,一個(gè)是在 servlet 中使用唯欣,另一個(gè)是在 jsp 中使用嘹吨!
* :他用來(lái)作為 forward 和 include 的子標(biāo)簽!用來(lái)給轉(zhuǎn)發(fā)或包含的頁(yè)面?zhèn)鬟f參數(shù)境氢!