06- JSP & EL & JSTL

jsp

Java Server Page

  • 什么是jsp

從用戶角度看待 供汛,就是是一個(gè)網(wǎng)頁(yè) 纸镊, 從程序員角度看待 被去, 其實(shí)是一個(gè)java類, 它繼承了servlet仇箱,所以可以直接說jsp 就是一個(gè)Servlet.

  • 為什么會(huì)有jsp?

html 多數(shù)情況下用來顯示靜態(tài)內(nèi)容 县恕, 一成不變的。 但是有時(shí)候我們需要在網(wǎng)頁(yè)上顯示一些動(dòng)態(tài)數(shù)據(jù)剂桥, 比如: 查詢所有的學(xué)生信息忠烛, 根據(jù)姓名去查詢具體某個(gè)學(xué)生。 這些動(dòng)作都需要去查詢數(shù)據(jù)庫(kù)权逗,然后在網(wǎng)頁(yè)上顯示美尸。 html是不支持寫java代碼 , jsp里面可以寫java代碼斟薇。

怎么用JSP

1. 1 指令寫法

<%@ 指令名字 %>
作用:用于配置JSP頁(yè)面火惊,導(dǎo)入資源

1.1.1 page指令-用于配置JSP頁(yè)面

  • language

表明jsp頁(yè)面中可以寫java代碼

  • contentType

其實(shí)即使說這個(gè)文件是什么類型,告訴瀏覽器我是什么內(nèi)容類型奔垦,以及使用什么編碼

contentType="text/html; charset=UTF-8"
text/html  MIMEType 這是一個(gè)文本,html網(wǎng)頁(yè)尸疆,**響應(yīng)體**的類型及字符集編碼
  • pageEncoding jsp界面編碼
  • extends 用于指定jsp翻譯成java文件后椿猎,繼承的父類是誰惶岭,一般不用改。
  • import 導(dǎo)包使用的犯眠,一般不用手寫按灶。
  • session

值可選的有true or false .
用于控制在這個(gè)jsp頁(yè)面里面,能夠直接使用session對(duì)象筐咧。
具體的區(qū)別是鸯旁,請(qǐng)看翻譯后的java文件 如果該值是true , 那么在代碼里面會(huì)有g(shù)etSession()的調(diào)用,如果是false : 那么就不會(huì)有該方法調(diào)用量蕊,也就是沒有session對(duì)象了铺罢。在頁(yè)面上自然也就不能使用session了。

  • errorPage

指的是錯(cuò)誤的頁(yè)面残炮。當(dāng)前頁(yè)面發(fā)生異常韭赘,會(huì)自動(dòng)跳轉(zhuǎn)到指定的錯(cuò)誤頁(yè)面, 值需要給錯(cuò)誤的頁(yè)面路徑

  • isErrorPage

上面的errorPage 用于指定錯(cuò)誤的時(shí)候跑到哪一個(gè)頁(yè)面去势就。 那么這個(gè)isErroPage , 就是聲明某一個(gè)頁(yè)面到底是不是錯(cuò)誤的頁(yè)面泉瞻,如果標(biāo)識(shí)為true,那么可以使用exeception內(nèi)置對(duì)象

<% 
String message = exeception.getMessage();
out.print(message);
 %>

1.1.2 include-頁(yè)面包含的苞冯,用于導(dǎo)入資源

包含另外一個(gè)jsp的內(nèi)容進(jìn)來袖牙。

    <%@ include file="other02.jsp"%>
  • 背后細(xì)節(jié):

把另外一個(gè)頁(yè)面的所有內(nèi)容拿過來一起輸出。 所有的標(biāo)簽元素都包含進(jìn)來舅锄。

1.1.3 taglib-導(dǎo)入資源(標(biāo)簽庫(kù)

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

uri: 標(biāo)簽庫(kù)路徑
prefix : 標(biāo)簽庫(kù)的別名  

2 注釋-失效

  2. requestScope --> request
  3. sessionScope --> session
  4. applicationScope --> application
 * 舉例 在request域中存儲(chǔ)了name= 張三
 * 獲缺薮铩:`${requestScope.name}`
2.  ${鍵名}:表示依次從最小的域中查找是否有該鍵對(duì)應(yīng)的值,直到找到為止
    `${name}`;
<%
    pageContext.setAttribute("name", "page");
    request.setAttribute("name", "request");
    session.setAttribute("name", "session");
    application.setAttribute("name", "application");
%>

按普通手段取值<br>
<%= pageContext.getAttribute("name")%>
<%= request.getAttribute("name")%>
<%= session.getAttribute("name")%>
<%= application.getAttribute("name")%>

<br>使用EL表達(dá)式取出作用域中的值<br>
${ pageScope.name }
${ requestScope.name }
${ sessionScope.name }
${ applicationScope.name }

4.1.2 取出4個(gè)作用域中存放的對(duì)象巧娱、數(shù)組碉怔、集合

  1. 獲取對(duì)象
    //本質(zhì)上回去調(diào)用對(duì)象的getter方法
    ${域名稱.鍵名.屬性名}
存儲(chǔ):
User u = new User();
u.setName("hhh");
request.setAttribute("u",user)

//User中定義了getBirStr
${requsetScope.u.birStr}
  1. 如果域中所存的是數(shù)組禁添、List集合
    ${域名稱.鍵名[索引]}撮胧;
<%
    String [] a = {"aa","bb","cc","dd"};
    pageContext.setAttribute("array", a);
%>

使用EL表達(dá)式取出作用域中數(shù)組的值<br>           
${array[0] } , ${array[1] },${array[2] },${array[3] }
  1. 如果域中鎖存的是Map集合
  • ${域名稱.鍵名.key名字}
  • ${域名稱.鍵名["key名稱"]}
    <%
        Map map = new HashMap();
        map.put("name", "zhangsna");
        map.put("age",18);
        map.put("address","北京..");
        pageContext.setAttribute("map", map);
    %>
使用EL表達(dá)式取出作用域中Map的值
 //方式一      
${map.name } , ${map.age } , ${map.address } 、
//方式二
${map["address.aa"] }

取值細(xì)節(jié):

  1. 從域中取值老翘。 得先存值芹啥。
    <%

    //pageContext.setAttribute("name", "zhangsan");
    session.setAttribute("name", "lisi...");
    %>


    直接指定說了,到這個(gè)作用域里面去找這個(gè)name

    ${ pageScope.name }


//先從page里面找铺峭,沒有去request找墓怀,去session,去application

${ name }


指定從session中取值

${ sessionScope.name }

  1. 取值方式

如果這份值是有下標(biāo)的卫键,那么直接使用[]

<%
    String [] array = {"aa","bb","cc"}
    session.setAttribute("array",array);
%>


${ array[1] } --> 這里array說的是attribute的name 

如果沒有下標(biāo)傀履, 直接使用 .的方式去取

<%
    User user = new User("zhangsan",18);
    
    session.setAttribute("u", user);
%>

${ u.name }  , ${ u.age } 

一般使用EL表達(dá)式,用的比較多的莉炉,都是從一個(gè)對(duì)象中取出它的屬性值钓账,比如取出某一個(gè)學(xué)生的姓名碴犬。

EL表達(dá)式 的11個(gè)內(nèi)置對(duì)象。

${ 對(duì)象名.成員 }

  • pageContext 梆暮,獲取jsp其它八個(gè)內(nèi)置對(duì)象
  • ${pageContext.request.contextPath}:動(dòng)態(tài)獲取虛擬目錄

作用域相關(guān)對(duì)象

  • pageScope
  • requestScope
  • sessionScope
  • applicationScope

頭信息相關(guān)對(duì)象

  • header
  • headerValues

參數(shù)信息相關(guān)對(duì)象

  • param

  • paramValues

  • cookie
    全局初始化參數(shù)

  • initParam

5 JSTL

全稱 : JSP Standard Tag Library jsp標(biāo)準(zhǔn)標(biāo)簽庫(kù)

簡(jiǎn)化jsp的代碼編寫服协。 簡(jiǎn)化和替換 java代碼(<%%> java代碼) 寫法。 一般與EL表達(dá)式配合

怎么使用

  1. 導(dǎo)入jar文件 到工程的WebContent/Web-Inf/lib jstl.jar standard.jar
  2. 在jsp頁(yè)面上啦粹,使用taglib 指令偿荷,來引入標(biāo)簽庫(kù)
    注意: 如果想支持 EL表達(dá)式,那么引入的標(biāo)簽庫(kù)必須選擇1.1的版本唠椭,1.0的版本不支持EL表達(dá)式跳纳。
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

常用標(biāo)簽

<c:set></c:set>
<c:if test=""></c:if>
<c:forEach></c:forEach>
  • c:set
    <!-- 聲明一個(gè)對(duì)象name, 對(duì)象的值 zhangsan , 存儲(chǔ)到了page(默認(rèn)) 泪蔫, 指定是session -->
    <c:set var="name" value="zhangsan" scope="session"></c:set>
    
    ${sessionScope.name }
  • c:if
  1. 屬性 test必須寫棒旗,接受的實(shí)boolean表達(dá)式
<c:set var="age" value="18" ></c:set>
<c:if test="${ age > 26 }">
    年齡大于了26歲...
</c:if>

<c:if test="${ age <= 26 }">
    年齡小于了26歲...
</c:if>

------------------------------

定義一個(gè)變量名 flag  去接收前面表達(dá)式的值,然后存在session域中

<c:if test="${ age > 26 }" var="flag" scope="session">
    年齡大于了26歲...
</c:if>
  • c:forEach
從1 開始遍歷到10 撩荣,得到的結(jié)果 铣揉,賦值給臨時(shí)變量 i , step , 增幅為2餐曹, 
    <c:forEach begin="1" end="10" var="i" step="2">
        ${i }
    </c:forEach>

    -----------------------------------------------

    <!-- items : 表示遍歷哪一個(gè)對(duì)象逛拱,注意,這里必須寫EL表達(dá)式台猴。 
    var: 遍歷出來的每一個(gè)元素用user 去接收朽合。 varStatus="s" 可以獲得索引和位置 從0和1開始-->
    <c:forEach var="user" items="${list }">
        ${user.name } 
    </c:forEach>
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市饱狂,隨后出現(xiàn)的幾起案子曹步,更是在濱河造成了極大的恐慌,老刑警劉巖休讳,帶你破解...
    沈念sama閱讀 217,084評(píng)論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件讲婚,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡俊柔,警方通過查閱死者的電腦和手機(jī)筹麸,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,623評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來雏婶,“玉大人物赶,你說我怎么就攤上這事×敉恚” “怎么了酵紫?”我有些...
    開封第一講書人閱讀 163,450評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我奖地,道長(zhǎng)状蜗,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,322評(píng)論 1 293
  • 正文 為了忘掉前任鹉动,我火速辦了婚禮,結(jié)果婚禮上宏邮,老公的妹妹穿的比我還像新娘泽示。我一直安慰自己,他們只是感情好蜜氨,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,370評(píng)論 6 390
  • 文/花漫 我一把揭開白布械筛。 她就那樣靜靜地躺著,像睡著了一般飒炎。 火紅的嫁衣襯著肌膚如雪埋哟。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,274評(píng)論 1 300
  • 那天郎汪,我揣著相機(jī)與錄音赤赊,去河邊找鬼。 笑死煞赢,一個(gè)胖子當(dāng)著我的面吹牛抛计,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播照筑,決...
    沈念sama閱讀 40,126評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼吹截,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了凝危?” 一聲冷哼從身側(cè)響起波俄,我...
    開封第一講書人閱讀 38,980評(píng)論 0 275
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎蛾默,沒想到半個(gè)月后懦铺,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,414評(píng)論 1 313
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡趴生,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,599評(píng)論 3 334
  • 正文 我和宋清朗相戀三年阀趴,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片苍匆。...
    茶點(diǎn)故事閱讀 39,773評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡刘急,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出浸踩,到底是詐尸還是另有隱情叔汁,我是刑警寧澤,帶...
    沈念sama閱讀 35,470評(píng)論 5 344
  • 正文 年R本政府宣布,位于F島的核電站据块,受9級(jí)特大地震影響码邻,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜另假,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,080評(píng)論 3 327
  • 文/蒙蒙 一像屋、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧边篮,春花似錦己莺、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,713評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至思杯,卻和暖如春胜蛉,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背色乾。 一陣腳步聲響...
    開封第一講書人閱讀 32,852評(píng)論 1 269
  • 我被黑心中介騙來泰國(guó)打工誊册, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人杈湾。 一個(gè)月前我還...
    沈念sama閱讀 47,865評(píng)論 2 370
  • 正文 我出身青樓解虱,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親漆撞。 傳聞我的和親對(duì)象是個(gè)殘疾皇子殴泰,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,689評(píng)論 2 354

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

  • 1.學(xué)習(xí)內(nèi)容 JSP技術(shù)入門和常用指令 JSP的內(nèi)置對(duì)象&標(biāo)簽介紹 EL表達(dá)式&EL的內(nèi)置對(duì)象 2.JSP技術(shù)入門...
    WendyVIV閱讀 2,136評(píng)論 1 18
  • 一悍汛、jsp介紹 jsp作用jsp全稱java server pages(java服務(wù)器頁(yè)面),本質(zhì)是一個(gè)servl...
    圣賢與無賴閱讀 1,248評(píng)論 0 14
  • JSP總結(jié)(經(jīng)典) day1 JSP 定義: 1)Java Server Page, Java EE 組件,本...
    java日記閱讀 3,442評(píng)論 0 13
  • Jsp技術(shù)總結(jié) 1. 什么是JSP JSP即Java Server Pages至会,它和servlet技術(shù)一樣...
    java日記閱讀 1,654評(píng)論 0 18
  • 一.JSP Java Server Page:從用戶角度看,就是一個(gè)網(wǎng)頁(yè),從程序員角度看待,其實(shí)就是一個(gè)java類...
    愛樂之農(nóng)閱讀 242評(píng)論 0 0