目錄
- JSP
- 怎麼用JSP
- JSP動作标簽
- JSP内置對象
- EL表達式
- 使用:
- EL表達式的11個内置對象
- JSTL
- 使用
- 常用标簽
JSP
- Java Server Page
- 什麼是jsp
從使用者角度看待 ,就是是一個網頁 , 從程式員角度看待 , 其實是一個java類, 它繼承了servlet,是以可以直接說jsp 就是一個Servlet.
- 為什麼會有jsp?
html 多數情況下用來顯示靜态内容 , 一成不變的。 但是有時候我們需要在網頁上顯示一些動态資料, 比如: 查詢所有的學生資訊, 根據姓名去查詢具體某個學生。 這些動作都需要去查詢資料庫,然後在網頁上顯示。 html是不支援寫java代碼 , jsp裡面可以寫java代碼。
怎麼用JSP
- 指令寫法
<%@ 指令名字%>
- page指令
- language
表明jsp頁面可以寫java代碼
- contentType
其實即使說這個檔案是什麼類型,告訴浏覽器我是什麼内容類型,以及使用什麼編碼
contentType="text/html; charset=UTF-8" text/html MIMEType 這是一個文本,html網頁
- pageEncoding jsp内容編碼
- extends 用于指定jsp翻譯成java檔案後,繼承的父類是誰,一般不用改。
- import 導包使用的,一般不用手寫。
- 在eclipse中使用 : 使用
不過要在剛寫完類名後敲alt+/ ;如Person (alt+/) person=newPerson();即在寫完Person後敲alt+/ 才生效。alt+/
- 在eclipse中使用 : 使用
- session
可選的有true or false .
用于控制在這個jsp頁面裡面,能夠直接使用session對象。
具體的差別是,請看翻譯後的java檔案 如果該值是true , 那麼在代碼裡面會有getSession()的調用,如果是false : 那麼就不會有該方法調用,也就是沒有session對象了。在頁面上自然也就不能使用session了。
- errorPage:指的是錯誤的頁面,值需要給錯誤的頁面路徑
- isErrorPage:上面的errorPage用于指定錯誤的時候跑到哪一個頁面去,name這個isErrorPage,就是聲明某一個頁面到底是不是錯誤的頁面.
- include : 包含另一個jsp的内容進來
<%@ include file="other02.jsp"%>
- 細節:
把另外一個頁面的所有内容拿過來一起輸出.所有的标簽元素都包含進來.
- taglib
<%@ taglib prefix="" uri=""%> uri: 标簽庫路徑 prefix : 标簽庫的别名
JSP動作标簽
<jsp:include page=""></jsp:include> <jsp:param value="" name=""/> <jsp:forward page=""></jsp:forward>
- language
- jsp:include
<jsp:include page="other02.jsp"></jsp:include>
<!--包含指定的頁面, 這裡是動态包含。 也就是不把包含的頁面所有元素标簽全部拿過來輸出,而是把它的運作結果拿過來 -->
- jsp:forward
<jsp:forward page=""></jsp:forward>
<!-- 前往哪一個頁面 -->
- jsp:param
<jsp:forward page="other02.jsp">
<jsp:param value="beijing" name="address"/>
</jsp:forward>
在other02.jsp中擷取參數
<br>收到的參數是:<br>
<%= request.getParameter("address")%>
JSP内置對象
- 所謂的内置對象,就是我們可以直接在jsp的頁面中使用這些對象,不用建立.
- pageContext
- request
- session
- application
- 作用域
- 表示這些對象可以存值,他們的取值範圍有限定.setAttribute和getAttribute
使用作用域來存儲資料<br> <% 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")%>
- 作用域範圍大小:
pageContext -- request --- session -- application
- 四個作用域的差別
- pageContext 【PageContext】
作用域僅限于目前的頁面。
還可以擷取到其他八個内置對象.
- request 【HttpServletRequest】
作用域僅限于一次請求, 隻要伺服器對該請求做出了響應。 這個域中存的值就沒有了。
- session 【HttpSession】
作用域限于一次會話(多次請求與響應) 當中。
- application 【ServletContext】
整個工程都可以用通路,伺服器關閉後就不能通路了...
- out【JspWriter】
- exception 【Throwable】page
- 【Object】 ---就是這個jsp翻譯成的java類的執行個體對象
- config 【ServletConfig】
EL表達式
- 是為了簡化咱們的jsp代碼,具體一點就是為了簡化在jsp裡面寫的那些java代碼。
- 寫法格式
${表達式 }
如果從作用域中取值,會先從小的作用域開始取,如果沒有,就往下一個作用域取。 一直把四個作用域取完都沒有, 就沒有顯示。
使用:
- 取出4個作用域中存放的值。
<%
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 }
- 如果域中所存的是數組
<%
String [] a = {"aa","bb","cc","dd"};
pageContext.setAttribute("array", a);
%>
使用EL表達式取出作用域中數組的值<br>
${array[0] } , ${array[1] },${array[2] },${array[3] }
- 如果域中所存的是集合
使用EL表達式取出作用域中集合的值<br>
${li[0] } , ${li[1] },${li[2] },${li[3] }
<br>-------------Map資料----------------<br>
<%
Map map = new HashMap();
map.put("name", "zhangsna");
map.put("age",18);
map.put("address","北京..");
map.put("address.aa","深圳..");
pageContext.setAttribute("map", map);
%>
- 取出Map集合的值
<% Map map = new HashMap(); map.put("name", "zhangsna"); map.put("age",18); map.put("address","北京..");
map.put("address.aa","深圳..");
pageContext.setAttribute("map", map);
%> 使用EL表達式取出作用域中Map的值
${map.name } , ${map.age } , ${map.address } , ${map["address.aa"] }
- 取值細節:
- 從域中取值。 得先存值。
<% //pageContext.setAttribute("name", "zhangsan"); session.setAttribute("name", "lisi..."); %> 直接指定說了,到這個作用域裡面去找這個name ${ pageScope.name } //先從page裡面找,沒有去request找,去session,去application ${ name } 指定從session中取值 ${ sessionScope.name }
- 取值方式
如果沒有下标,那麼使用.的方式去取<% String [] array = {"aa","bb","cc"} session.setAttribute("array",array); %> ${ array[1] } --> 這裡array說的是attribute的nam
<% User user = new User("zhangsan",18); session.setAttribute("u", user); %> ${ u.name } , ${ u.age }
一般使用EL表達式,用的比較多的,都是從一個對象中取出它的屬性值,比如取出某一個學生的姓名
EL表達式的11個内置對象
${ 對象名.成員 }
- ${ 對象名.成員 }
作用域相關對象 - pageScope - requestScope - sessionScope - applicationScope
頭資訊相關對象 - header - headerValues
參數資訊相關對象 - param - paramValues
- cookie 全局初始化參數
- initParagm
JSTL
全稱: JSP Standard Tag Library jsp标準标簽庫
簡化jsp的代碼編寫。 替換 <%%> 寫法。 一般與EL表達式配合
使用
- 導入jar檔案到工程的WebContent/Web-Inf/lib jstl.jar standard.jar
- 導入jar檔案到工程的WebContent/Web-Inf/lib jstl.jar standard.jar
- 注意: 如果想支援 EL表達式,那麼引入的标簽庫必須選擇1.1的版本,1.0的版本不支援EL表達式。
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
常用标簽
<c:set></c:set> <c:if test=""></c:if> <c:forEach></c:forEach>
- c:set
<!-- 聲明一個對象name, 對象的值 zhangsan , 存儲到了page(預設) , 指定是session -->
<c:set var="name" value="zhangsan" scope="session"></c:set>
${sessionScope.name }
- s:if
<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 ,得到的結果 ,指派給 i ,并且會存儲到page域中, step , 增幅為2,
<c:forEach begin="1" end="10" var="i" step="2">
${i }
</c:forEach>
-----------------------------------------------
<!-- items : 表示周遊哪一個對象,注意,這裡必須寫EL表達式。
var: 周遊出來的每一個元素用user 去接收。 -->
<c:forEach var="user" items="${list }">
${user.name } ----${user.age }
</c:forEach>