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ù)組碉怔、集合
- 獲取對(duì)象
//本質(zhì)上回去調(diào)用對(duì)象的getter方法
${域名稱.鍵名.屬性名}
;
存儲(chǔ):
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表達(dá)式取出作用域中數(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表達(dá)式取出作用域中Map的值
//方式一
${map.name } , ${map.age } , ${map.address } 、
//方式二
${map["address.aa"] }
取值細(xì)節(jié):
-
從域中取值老翘。 得先存值芹啥。
<%//pageContext.setAttribute("name", "zhangsan");
session.setAttribute("name", "lisi...");
%>
直接指定說了,到這個(gè)作用域里面去找這個(gè)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表達(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á)式配合
怎么使用
- 導(dǎo)入jar文件 到工程的WebContent/Web-Inf/lib jstl.jar standard.jar
- 在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
- 屬性 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>