06- JSP & EL & JSTL

jsp

Java Server Page

  • 什么是jsp

從用戶角度看待 ,就是是一個網(wǎng)頁 , 從程序員角度看待 , 其實是一個java類, 它繼承了servlet,所以可以直接說jsp 就是一個Servlet.

  • 為什么會有jsp?

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

怎么用JSP

1. 1 指令寫法

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

1.1.1 page指令-用于配置JSP頁面

  • language

表明jsp頁面中可以寫java代碼

  • contentType

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

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

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

  • errorPage

指的是錯誤的頁面。當(dāng)前頁面發(fā)生異常,會自動跳轉(zhuǎn)到指定的錯誤頁面, 值需要給錯誤的頁面路徑

  • isErrorPage

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

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

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

包含另外一個jsp的內(nèi)容進來。

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

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

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

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

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

2 注釋-失效

  2. requestScope --> request
  3. sessionScope --> session
  4. applicationScope --> application
 * 舉例 在request域中存儲了name= 張三
 * 獲?。篳${requestScope.name}`
2.  ${鍵名}:表示依次從最小的域中查找是否有該鍵對應(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表達式取出作用域中的值<br>
${ pageScope.name }
${ requestScope.name }
${ sessionScope.name }
${ applicationScope.name }

4.1.2 取出4個作用域中存放的對象、數(shù)組、集合

  1. 獲取對象
    //本質(zhì)上回去調(diào)用對象的getter方法
    ${域名稱.鍵名.屬性名};
存儲:
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表達式取出作用域中數(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表達式取出作用域中Map的值
 //方式一      
${map.name } , ${map.age } , ${map.address } 、
//方式二
${map["address.aa"] }

取值細節(jié):

  1. 從域中取值。 得先存值。
    <%

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


    直接指定說了,到這個作用域里面去找這個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表達式,用的比較多的,都是從一個對象中取出它的屬性值,比如取出某一個學(xué)生的姓名。

EL表達式 的11個內(nèi)置對象。

${ 對象名.成員 }

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

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

  • pageScope
  • requestScope
  • sessionScope
  • applicationScope

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

  • header
  • headerValues

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

  • param

  • paramValues

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

  • initParam

5 JSTL

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

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

怎么使用

  1. 導(dǎo)入jar文件 到工程的WebContent/Web-Inf/lib jstl.jar standard.jar
  2. 在jsp頁面上,使用taglib 指令,來引入標(biāo)簽庫
    注意: 如果想支持 EL表達式,那么引入的標(biāo)簽庫必須選擇1.1的版本,1.0的版本不支持EL表達式。
<%@ 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
    <!-- 聲明一個對象name, 對象的值 zhangsan , 存儲到了page(默認(rèn)) , 指定是session -->
    <c:set var="name" value="zhangsan" scope="session"></c:set>
    
    ${sessionScope.name }
  • c:if
  1. 屬性 test必須寫,接受的實boolean表達式
<c:set var="age" value="18" ></c:set>
<c:if test="${ age > 26 }">
    年齡大于了26歲...
</c:if>

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

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

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

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

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

    <!-- items : 表示遍歷哪一個對象,注意,這里必須寫EL表達式。 
    var: 遍歷出來的每一個元素用user 去接收。 varStatus="s" 可以獲得索引和位置 從0和1開始-->
    <c:forEach var="user" items="${list }">
        ${user.name } 
    </c:forEach>
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容