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ù)組、集合
- 獲取對象
//本質(zhì)上回去調(diào)用對象的getter方法
${域名稱.鍵名.屬性名};
存儲:
User u = new User();
u.setName("hhh");
request.setAttribute("u",user)
//User中定義了getBirStr
${requsetScope.u.birStr}
- 如果域中所存的是數(shù)組、List集合
${域名稱.鍵名[索引]};
<%
String [] a = {"aa","bb","cc","dd"};
pageContext.setAttribute("array", a);
%>
使用EL表達式取出作用域中數(shù)組的值<br>
${array[0] } , ${array[1] },${array[2] },${array[3] }
- 如果域中鎖存的是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é):
-
從域中取值。 得先存值。
<%//pageContext.setAttribute("name", "zhangsan");
session.setAttribute("name", "lisi...");
%>
直接指定說了,到這個作用域里面去找這個name
${ pageScope.name }
//先從page里面找,沒有去request找,去session,去application
${ name }
指定從session中取值
${ sessionScope.name }
- 取值方式
如果這份值是有下標(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表達式配合
怎么使用
- 導(dǎo)入jar文件 到工程的WebContent/Web-Inf/lib jstl.jar standard.jar
- 在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
- 屬性 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>