第6章 JSP

1. JSP基礎(chǔ)理論

JSP全稱是Java Server Pages卤唉,它和servle技術(shù)一樣抖剿,都是SUN公司定義的
一種用于開發(fā)動態(tài)web資源的技術(shù)苦蒿。
JSP技術(shù)的特點:

  • JSP是一種服務(wù)器端腳本語言预伺,其出現(xiàn)降低了Servlet編寫頁面的難度茬故。JSP本質(zhì)上就是Servlet职祷,實際上JSP是首先被翻譯成Servlet后才編譯運行的氏涩,因此JSP能夠?qū)崿F(xiàn)Servlet所能夠?qū)崿F(xiàn)的所有功能。
  • 相比html而言有梆,html只能為用戶提供靜態(tài)數(shù)據(jù)是尖,而Jsp技術(shù)允許在頁面中嵌套java代碼,為用戶提供動態(tài)數(shù)據(jù)泥耀。

第一次訪問JSP

第一次訪問JSP

后續(xù)訪問JSP

后續(xù)訪問JSP

2. JSP的組成元素

2.1 DHTML靜態(tài)內(nèi)容

包含HTML靜態(tài)網(wǎng)頁饺汹,CSS樣式表,Javascript客戶端腳本等靜態(tài)資源


2.2 JSP腳本
2.2.1 Java腳本

在JSP頁面上以<% %>表現(xiàn)痰催,在其中編寫Java代碼兜辞,實現(xiàn)動態(tài)效果。其中包含了9個隱式對象夸溶,不用聲明即可直接使用

<%
  Object o = request.getAttribute("key");
%>

9個隱式對象分別如下:

  • pageContext page作用域
  • request request作用域和請求對象
  • session session作用域
  • application application作用域
  • response 響應(yīng)對象
  • page 相當(dāng)于JSP翻譯成Java文件中的this
  • config web服務(wù)器配置對象
  • out Java文件中輸出動態(tài)網(wǎng)頁的out對象
  • exception JSP中的異常對象逸吵,僅限于JSP定義為isErrorPage=true時使用
2.2.2 輸出腳本

在JSP頁面上以<%= %>表現(xiàn),用于將變量或者表達(dá)式的值顯示在網(wǎng)頁上

<%
  int a = 3;
  int b = 4;
%>
值:<%= a+b %>
2.2.3 聲明腳本

在JSP頁面上以<%! %>表現(xiàn)蜘醋,用于聲明類級別的屬性或者方法

<%
   x = 3;
   int x = 5;    //jsp_service方法中聲明的局部變量
%>
<%!
    int x = 10; //JSP翻譯成Java文件中聲明屬性變量
%>
<%= x %> //5
<%= this.x %> //3

翻譯成Java代碼

public class XXX_jsp{
  int x = 10;
  public void jsp_service(){
    x = 3;  //相當(dāng)于this.x = 3;
    int x = 5;  //局部變量
    out.println(x);   //局部變量的優(yōu)先級高 5
    out.println(this.x);   //屬性變量  3
  }
}
2.2.4 注釋腳本

在JSP頁面上以<%-- --%>表現(xiàn)為JSP的注釋胁塞。
在JSP頁面上,常見有3中注釋方式

  • <%-- --%> JSP注釋
    JSP注釋在JSP翻譯成Java過程中被忽略
  • <% // %> Java注釋
    Java注釋在Java文件編譯成class文件過程中被忽略
  • <!-- -- > HTML注釋
    始終不會被忽略压语,會被響應(yīng)給客戶端

在實際工作中盡量不要使用HTML注釋啸罢,這部分實際上會響應(yīng)給客戶端,它會占用網(wǎng)絡(luò)資源胎食,同時如果客戶端的使用者了解原理扰才,可以通過“查看源”方式獲取這部分被注釋掉的代碼,如果其中包含了敏感鏈接信息等內(nèi)容厕怜,可能會造成一些商業(yè)風(fēng)險衩匣。


2.3 JSP指令

在JSP頁面上以<%@ %>表現(xiàn)。

2.3.1 page指令

page指令可以出現(xiàn)多次(僅限在引入Java文件時)粥航,用于表示JSP頁面的一些基本設(shè)置信息琅捏,

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8" %>

常用的屬性

常用屬性 用途 取值 必要項
language 服務(wù)器腳本語言的類型 只能是java
contentType 靜態(tài)資源的響應(yīng)類型 text/html; charset=UTF-8
pageEncoding JSP的字符集 各種字符集,比如UTF-8
import Java語言的引包 相當(dāng)于Java代碼中的import递雀,可以出現(xiàn)多次
errorPage JSP的錯誤頁指向 其他JSP頁面(必須是isErrorPage=true)
isErrorPage 聲明JSP自身是否為一個錯誤頁柄延,允許該JSP使用exception隱式對象 true或false
2.3.2 taglib指令

taglib指令可以出現(xiàn)多次,用于引入第三方的標(biāo)簽庫缀程,比如JSTL標(biāo)簽庫和自定義標(biāo)簽庫

<%@ taglib prefix="" uri="" %>   

常用的屬性

常用屬性 用途 取值 必要項
prefix 被引入標(biāo)簽庫在JSP頁面上使用的前綴名 字符串
uri 被引入標(biāo)簽庫聲明的uri 表示url的字符串
tagdir 用于指定tag文件目錄 絕對路徑
2.3.3 include指令

include指令可以出現(xiàn)多次搜吧,在頁面上引入另一個JSP的內(nèi)容市俊。比如菜單這種在很多JSP頁面都出現(xiàn)的內(nèi)容就可以使用include指令來引入,一次修改處處生效滤奈。

<%@ include file="" %>   
常用屬性 用途 取值 必要項
file 引入JSP文件的站內(nèi)地址 表示站內(nèi)地址的url的字符串

2.4 JSP動作
2.4.1 include動作

與JSP指令的功能實際效果是一致的摆昧,在頁面上引入另一個JSP的內(nèi)容。

<jsp:include page="/x.jsp"></jsp:include>

include指令與include動作的區(qū)別
include指令:將兩個JSP的代碼融合至一起蜒程。
include動作:兩個JSP有各自獨立的編譯和輸出

2.4.2 forward動作

相當(dāng)于在JSP頁面上進行請求轉(zhuǎn)發(fā)绅你,當(dāng)JSP執(zhí)行到這句代碼時,立即進行請求轉(zhuǎn)發(fā)

<jsp:forward page="站內(nèi)路徑"></jsp:forward>
2.4.3 param動作

在請求轉(zhuǎn)發(fā)的過程中傳遞數(shù)據(jù)搞糕,通過getParameter可以取得這些數(shù)據(jù)

<jsp:forward page="站內(nèi)路徑">
  <jsp:param value="abc" name="haha"/>
  <jsp:param value="123" name="xixi"/>
</jsp:forward>
2.4.4 useBean動作

從某個作用域中取得數(shù)據(jù)

<jsp:useBean id="online" class="com.neuedu.po.EmployeesPO" scope="session"></jsp:useBean>
常用屬性 用途 取值 必要項
id 作用域中的key和變量名 字符串
class 取出變量的類型 表示類路徑的字符串
scope 作用域 page,request,session,application

在JSP頁面中聲明某個變量


3. EL表達(dá)式

3.1 在作用域中取值

取得的是某個屬性的值勇吊,要求該屬性必須有相應(yīng)的set和get方法

${sessionScope.online}  //取得session作用域中key是online的對象的值
${sessionScope.online.ename} //取得session作用域中key是online的對象的ename屬性的值
${haha} //取得request作用域中key是haha的對象的值
${requestScope.haha} //取得request作用域中key是haha的對象的值

EL表達(dá)式中作用域的隱式對象

EL表達(dá)式隱式對象 作用域
pageScope page作用域
requestScope(默認(rèn)) request作用域
sessionScope session作用域
applicationScope application作用域
3.2 基礎(chǔ)的運算

EL表達(dá)式可以進行基礎(chǔ)的運算,比如:四則運算和比較運算

${sessionScope.online.sex == 1}  //顯示sex屬性的值是否為1
${2+3}  //計算2+3的結(jié)果并顯示
${2+3 > 4} //顯示2+3>4的比較結(jié)果
3.3 web的基礎(chǔ)信息
${pageContext.request.contextPath}  //系統(tǒng)的root的名字

4. JSTL標(biāo)簽

在工程中導(dǎo)入jstl的jar包窍仰,在JSP頁面上使用taglib指令引入標(biāo)簽庫

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>    
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>  

著重介紹下面三種常用的標(biāo)簽汉规,其他的略過

4.1 迭代標(biāo)簽(core庫)

for...each

<c:forEach var="po" items="${elist}">
</c:forEach>

相當(dāng)于

for(EmployeesPO po : (List<EmployeesPO>)request.getAttribute("elist")){
}

for

<c:forEach begin="0" end="5" step="1">
</c:forEach>

相當(dāng)于

for(int i = 0; i < 5; i++){
}
4.2 條件標(biāo)簽(core庫)

單獨if

<c:if test="${5 > 2}">
</c:if>

相當(dāng)于

if(5 > 2){
}

多重分支

<c:choose>
    <c:when test="${po.sex == 1}">
        男
    </c:when>
    <c:when test="${po.sex == 2}">
        女
    </c:when>
    <c:otherwise>
        保密
    </c:otherwise>
</c:choose>

相當(dāng)于

if(po.getSex() == 1){
  男
}else if(po.getSex() == 2){
  女
}else{
  保密
}
4.3 日期格式標(biāo)簽(fmt庫)

用于日期格式化的顯示
將po.getBirthday()表示的date對象,按照yyyy年MM月dd日的格式進行顯示

<fmt:formatDate value="${po.birthday}" pattern="yyyy年MM月dd日"/>
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末驹吮,一起剝皮案震驚了整個濱河市针史,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌碟狞,老刑警劉巖啄枕,帶你破解...
    沈念sama閱讀 217,277評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異族沃,居然都是意外死亡频祝,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,689評論 3 393
  • 文/潘曉璐 我一進店門脆淹,熙熙樓的掌柜王于貴愁眉苦臉地迎上來常空,“玉大人,你說我怎么就攤上這事盖溺±觳冢” “怎么了?”我有些...
    開封第一講書人閱讀 163,624評論 0 353
  • 文/不壞的土叔 我叫張陵烘嘱,是天一觀的道長昆禽。 經(jīng)常有香客問我,道長蝇庭,這世上最難降的妖魔是什么醉鳖? 我笑而不...
    開封第一講書人閱讀 58,356評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮哮内,結(jié)果婚禮上盗棵,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好漾根,可當(dāng)我...
    茶點故事閱讀 67,402評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著鲫竞,像睡著了一般辐怕。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上从绘,一...
    開封第一講書人閱讀 51,292評論 1 301
  • 那天寄疏,我揣著相機與錄音,去河邊找鬼僵井。 笑死陕截,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的批什。 我是一名探鬼主播农曲,決...
    沈念sama閱讀 40,135評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼驻债!你這毒婦竟也來了乳规?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,992評論 0 275
  • 序言:老撾萬榮一對情侶失蹤合呐,失蹤者是張志新(化名)和其女友劉穎暮的,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體淌实,經(jīng)...
    沈念sama閱讀 45,429評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡冻辩,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,636評論 3 334
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了拆祈。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片恨闪。...
    茶點故事閱讀 39,785評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖缘屹,靈堂內(nèi)的尸體忽然破棺而出凛剥,到底是詐尸還是另有隱情,我是刑警寧澤轻姿,帶...
    沈念sama閱讀 35,492評論 5 345
  • 正文 年R本政府宣布犁珠,位于F島的核電站,受9級特大地震影響互亮,放射性物質(zhì)發(fā)生泄漏犁享。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,092評論 3 328
  • 文/蒙蒙 一豹休、第九天 我趴在偏房一處隱蔽的房頂上張望炊昆。 院中可真熱鬧,春花似錦、人聲如沸凤巨。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,723評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽敢茁。三九已至佑淀,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間彰檬,已是汗流浹背伸刃。 一陣腳步聲響...
    開封第一講書人閱讀 32,858評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留逢倍,地道東北人捧颅。 一個月前我還...
    沈念sama閱讀 47,891評論 2 370
  • 正文 我出身青樓,卻偏偏與公主長得像较雕,于是被迫代替她去往敵國和親碉哑。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,713評論 2 354

推薦閱讀更多精彩內(nèi)容

  • JSP總結(jié)(經(jīng)典) day1 JSP 定義: 1)Java Server Page, Java EE 組件亮蒋,本...
    java日記閱讀 3,442評論 0 13
  • 其他更多java基礎(chǔ)文章:java基礎(chǔ)學(xué)習(xí)(目錄) 本章內(nèi)容較多谭梗,全部認(rèn)真看完可能需要一小時以上,建議邊看邊做筆記...
    Hiwayz閱讀 1,314評論 0 10
  • 一、jsp介紹 jsp作用jsp全稱java server pages(java服務(wù)器頁面),本質(zhì)是一個servl...
    圣賢與無賴閱讀 1,248評論 0 14
  • 1.學(xué)習(xí)內(nèi)容 JSP技術(shù)入門和常用指令 JSP的內(nèi)置對象&標(biāo)簽介紹 EL表達(dá)式&EL的內(nèi)置對象 2.JSP技術(shù)入門...
    WendyVIV閱讀 2,136評論 1 18
  • Jsp技術(shù)總結(jié) 1. 什么是JSP JSP即Java Server Pages凄吏,它和servlet技術(shù)一樣...
    java日記閱讀 1,654評論 0 18