一.JSP注釋
1、顯式注釋
在客戶端可以看到的注釋
1、繼承HTML風(fēng)格的注釋? ? <!-- HTML注釋 --> <!-- 這是HTML注釋 -->
2、隱式注釋
在客戶端不可以看到的注釋
1、JSP自己的注釋? ? <%-- JSP注釋-- % >? <%-- 這是JSP注釋 --%>
2、繼承Java風(fēng)格的注釋 // 單行注釋? ? /*多行注釋*/
二.scriptlet
Scriptlet(腳本小程序),所有嵌入在 HTML 代碼中的 Java 程序。
在 JSP 中一共有三種 Scriptlet 代碼:都必須使用 Scriptlet 標記出來
1、java腳本段
語法:<% // java腳本段? %>
特點:可以定義局部變量,編寫java語句;被編譯之后會生成在service方法體中
2、聲明
語法:<%! // 聲明全局變量? %>
特點:可以聲明全局變量,方法等;被編譯之后生成在servlet類體中
3、輸出
語法:<%= %>
特點:可以輸出變量、表達式或字面量;被編譯之后生成在service方法體中;相當(dāng)于out.print()輸出
三.page指令
格式:<%@page 屬性="屬性值" 屬性="屬性值"? %>
常用屬性:
language:支持的語言,當(dāng)前只支持java
contentType:響應(yīng)類型及編碼格式
pageEncoding:編碼
import:導(dǎo)包,只有import這個屬性可以多次設(shè)置,其他屬性只能設(shè)置一次
isErrorPage:當(dāng)前頁面是否是處理報錯的頁面,默認是false
errorPage:當(dāng)頁面報錯時該跳轉(zhuǎn)到什么頁面
注:JSP頁面的編碼以contentType中的charset的值為準,如果未設(shè)置charset值,則以pageEncoding的屬性值為準;如果都沒有,則默認ISO-8859-1
四.include
1.include 靜態(tài)包含
格式:<%@include file="文件的路徑" %>
特點:相當(dāng)于將包含的頁面中的內(nèi)容直接直接非復(fù)制粘貼;最終只會生成一個java文件;不能有同名變量。
優(yōu)缺點:運行效率高一點點。耦合性較高,不夠靈活。
2.include動態(tài)包含
無參:
格式:<jsp:include page="包含的頁面路徑"></jsp:include>
有參
<jsp:include page="包含的頁面路徑">
<jsp:param value="參數(shù)值" name="參數(shù)名"/>
</jsp:include>
特點:相當(dāng)于方法的調(diào)用,會生成多個java文件;可以出現(xiàn)同名變量
注:
1、<jsp:include>雙標簽中不能包含任何內(nèi)容,包括換行和空格,除非有參數(shù)
2、<jsp:param>的value屬性值支持表達式,name屬性值不支持
The name attribute of the jsp:param standard action does not accept any expressions
五.九大內(nèi)置對象
request:用于獲取請求信息,比如請求參數(shù)及客戶端信息。
response:用于響應(yīng)客戶端請求。
out:用于輸出響應(yīng)信息。
session:代表瀏覽器與服務(wù)器的一次會話。HTTP協(xié)議是無狀態(tài)協(xié)議,響應(yīng)結(jié)束后,會話終斷,不會保存會話信息,session
就是為了保存會話信息產(chǎn)生的。
application:代表應(yīng)用程序,主要用于保存整個應(yīng)用層面的信息。
page:代表當(dāng)前頁面。
pageContext:頁面上下文,通過該對象可以獲取其他對象,比如request/session/application等。
config:用于獲取服務(wù)器的配置信息,初始化Servlet。
exception:用于獲取頁面的錯誤信息。
1.JSP四大域?qū)ο?/p>
pageContext.setAttribute("uname", "zhangsan");
request.setAttribute("uname", "lisi");
session.setAttribute("uname", "wangwu");
application.setAttribute("uname", "zhaoliu");
2.兩個輸出對象
out.print("Hello");
response.getWriter().write("Hello!");
3. 配置對象
out.print(config.getServletName());
// 當(dāng)前jsp本身
//page
// 異常信息對象 (只有jsp頁面設(shè)置屬性isErrorPage="true"才能使用)
out.print(exception.getMessage());
六.EL表達式
語法:${域?qū)ο蟮膋ey值}
注意:
1、el表達式一般操作的是域?qū)ο笾械闹?,無法操作局部變量
2、el的取值范圍有4個:pageContext、request、session、application,分別代表當(dāng)前頁、一次請求、一次會話、整個應(yīng)用程序
3、el表達式默認從小范圍到大范圍取值,如果取到值則顯示,未取到則繼續(xù)往大范圍找,找到即止;如果最終未找到,則顯示空字符串""
4、獲取指定域?qū)ο蠓秶闹?,可以通過pageScope、requestScope、sessionScope、applicationScope
5、el表達式獲取JavaBean中的屬性時,屬性需要提供get方法(javax.el.PropertyNotFoundException: Property 'uname' not readable on type com.shsxt.po.User)

七.jstl
1.jstl的使用
1、導(dǎo)入jstl標簽庫所需要的jar包 (jstl.jar、standard.jar)
2、在jsp頁面引入指定的庫
<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
3、使用標簽庫
<c:標簽名? 屬性名="屬性值" ></c:標簽名>
2.if 標簽
if 標簽先對某個條件進行測試,如果該條件運算結(jié)果為 true, 則處理它的主體內(nèi)容.
測試結(jié)果保存在一個 Boolean 對象中,并創(chuàng)建一個限域變量來引用 Boolean 對象。
可以利用 var 屬性設(shè)置限域變量名,利用 scope 屬性來指定其作用范圍。
if 的語法有兩種形式:
沒有主體內(nèi)容
<c:if test="返回boolean類型的條件" var="設(shè)置限域變量名的,用來接收返回值的" scope="限域?qū)ο蟮姆秶?></c:if>
有主體內(nèi)容
<c:if test="返回boolean類型的條件" var="設(shè)置限域變量名的,用來接收返回值的" scope="限域?qū)ο蟮姆秶?>
要執(zhí)行的代碼
</c:if>
常用屬性:
test:返回boolean類型的條件,一般操作的都是域?qū)ο笾械闹?/p>
var:用來定義接收返回值的變量,但是該變量是存在域?qū)ο笾械?/p>
scope:var設(shè)置的變量名所存放的域范圍page\request\session\application
注:在jstl中沒有else標簽,如果出現(xiàn)需要else的情況,可以使用兩個if,設(shè)置相反的;兩個條件來實現(xiàn)
3. choose、when 和 otherwise 標簽
1、choose標簽中至少包含一個when標簽,可以沒有otherwise標簽 (Illegal "choose" without child "when" tag)
2、choose標簽中只能有when標簽和otherwise標簽(Illegal child tag in "c:choose" tag: "c:if" tag)
3、when標簽和otherwise標簽可以包含其他標簽
4、choose標簽和otherwise標簽沒有屬性,when標簽必須有test屬性
5、otherwise標簽必須放在最后一個when標簽之后 (Illegal "c:when" after "c:otherwise" tag in "c:choose" tag.)
6、當(dāng)所有的when標簽的條件不成立時,才會執(zhí)行otherwise標簽
4.forEach標簽
1、遍歷主體內(nèi)容多次
<c:forEach begin="開始的數(shù)" end="結(jié)束的數(shù)" var="接收當(dāng)前被循環(huán)的成員" step="循環(huán)的間隔數(shù)"></c:forEach>
2、遍歷集合、map等
<c:forEach items="被循環(huán)的對象" var="接收當(dāng)前被循環(huán)的成員" varStatus="當(dāng)前成員的相關(guān)信息"></c:forEach>
常用屬性:
items:需要被遍歷的對象(可以是集合、map等,都是存放在域?qū)ο笾械臄?shù)據(jù))
var:限域變量名,用來每次被遍歷到的成員
5.formatNumber 標簽
formatNumber 標簽 該標簽用指定的格式或精度來格式化數(shù)字.
<fmt:formatNumber>標簽有如下屬性:
使用該標簽時,有兩種語法:
無主體內(nèi)容
<fmt:formatNumber value="要被格式化的數(shù)值" type="被格式化的類型"/> <br>
常用屬性:
value:要被格式化的數(shù)值
type:被格式化的類型
number數(shù)值型
percent百分比類型
currency貨幣類型
var:限域變量名,用來接收格式化好的返回值;如果設(shè)置var屬性,則值不會再輸出,需要使用el表達式輸出var設(shè)置的值
6.formatDate 標簽
使用指定的風(fēng)格或模式格式化日期和時間,<fmt:formatDate>標簽有如下屬性:
<fmt:formatDate value="${mydate }"/><br>
<fmt:formatDate value="${mydate }" type="date"/><br>
<fmt:formatDate value="${mydate }" type="time"/><br>
<fmt:formatDate value="${mydate }" type="both"/><br>
? <fmt:formatDate value="${mydate }" type="both" dateStyle="long" timeStyle="full"/><br>
? <fmt:formatDate value="${mydate }" pattern="yyyy/MM/dd HH:mm:ss"/><br>
? <fmt:formatDate value="${mydate }" pattern="HH:mm:ss yyyy/MM/dd" var="date1"/>${date1 }<br>
7.parseDate 標簽
此標簽為指定區(qū)域解析日期和時間的字符串表示法。即解析一個代表著日期或時間的字 符串。兩種形式:
<fmt:parseDate value="${date3 }"></fmt:parseDate><br>
<fmt:parseDate value="${date1 }" type="both"></fmt:parseDate><br>
<fmt:parseDate value="${date2 }" pattern="dd-MM-yyyy"></fmt:parseDate><br>
<fmt:parseDate value="${date3 }" pattern="yyyy-MM-dd"></fmt:parseDate><br>
8.parseNumber 標簽
利用 parseNumber 標簽可以將數(shù)字、貨幣或百分比的字符串表示法解析成指定語言環(huán) 境的數(shù)字。即解析一個代表著數(shù)字,貨幣或百分比的字符串。兩種語法形式:
<fmt:parseNumber value="¥100.00" type="currency"></fmt:parseNumber> <br>
<fmt:parseNumber value="100%" type="percent"></fmt:parseNumber> <br>