1. JSP基礎(chǔ)理論
JSP全稱是Java Server Pages卤唉,它和servle技術(shù)一樣抖剿,都是SUN公司定義的
一種用于開發(fā)動態(tài)web資源的技術(shù)苦蒿。
JSP技術(shù)的特點:
- JSP是一種服務(wù)器端腳本語言预伺,其出現(xiàn)降低了Servlet編寫頁面的難度茬故。JSP本質(zhì)上就是Servlet职祷,實際上JSP是首先被翻譯成Servlet后才編譯運行的氏涩,因此JSP能夠?qū)崿F(xiàn)Servlet所能夠?qū)崿F(xiàn)的所有功能。
- 相比html而言有梆,html只能為用戶提供靜態(tài)數(shù)據(jù)是尖,而Jsp技術(shù)允許在頁面中嵌套java代碼,為用戶提供動態(tài)數(shù)據(jù)泥耀。
第一次訪問JSP
后續(xù)訪問JSP
2. JSP的組成元素
2.1 DHTML靜態(tài)內(nèi)容
包含HTML靜態(tài)網(wǎng)頁饺汹,CSS樣式表,Javascript客戶端腳本等靜態(tài)資源
2.2 JSP腳本
2.2.1 Java腳本
在JSP頁面上以<% %>
表現(xiàn)痰催,在其中編寫Java代碼兜辞,實現(xiàn)動態(tài)效果。其中包含了9個隱式對象夸溶,不用聲明即可直接使用
<%
Object o = request.getAttribute("key");
%>
9個隱式對象分別如下:
- pageContext
page作用域
- request
request作用域和請求對象
- session
session作用域
- application
application作用域
- response
響應(yīng)對象
- page
相當(dāng)于JSP翻譯成Java文件中的this
- config
web服務(wù)器配置對象
- out
Java文件中輸出動態(tài)網(wǎng)頁的out對象
- exception
JSP中的異常對象逸吵,僅限于JSP定義為isErrorPage=true時使用
2.2.2 輸出腳本
在JSP頁面上以<%= %>
表現(xiàn),用于將變量或者表達(dá)式的值顯示在網(wǎng)頁上
<%
int a = 3;
int b = 4;
%>
值:<%= a+b %>
2.2.3 聲明腳本
在JSP頁面上以<%! %>
表現(xiàn)蜘醋,用于聲明類級別的屬性或者方法
<%
x = 3;
int x = 5; //jsp_service方法中聲明的局部變量
%>
<%!
int x = 10; //JSP翻譯成Java文件中聲明屬性變量
%>
<%= x %> //5
<%= this.x %> //3
翻譯成Java代碼
public class XXX_jsp{
int x = 10;
public void jsp_service(){
x = 3; //相當(dāng)于this.x = 3;
int x = 5; //局部變量
out.println(x); //局部變量的優(yōu)先級高 5
out.println(this.x); //屬性變量 3
}
}
2.2.4 注釋腳本
在JSP頁面上以<%-- --%>
表現(xiàn)為JSP的注釋胁塞。
在JSP頁面上,常見有3中注釋方式
- <%-- --%> JSP注釋
JSP注釋在JSP翻譯成Java過程中被忽略 - <% // %> Java注釋
Java注釋在Java文件編譯成class文件過程中被忽略 - <!-- -- > HTML注釋
始終不會被忽略压语,會被響應(yīng)給客戶端
在實際工作中盡量不要使用HTML注釋啸罢,這部分實際上會響應(yīng)給客戶端,它會占用網(wǎng)絡(luò)資源胎食,同時如果客戶端的使用者了解原理扰才,可以通過“查看源”方式獲取這部分被注釋掉的代碼,如果其中包含了敏感鏈接信息等內(nèi)容厕怜,可能會造成一些商業(yè)風(fēng)險衩匣。
2.3 JSP指令
在JSP頁面上以<%@ %>
表現(xiàn)。
2.3.1 page指令
page指令可以出現(xiàn)多次(僅限在引入Java文件時)粥航,用于表示JSP頁面的一些基本設(shè)置信息琅捏,
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8" %>
常用的屬性
常用屬性 | 用途 | 取值 | 必要項 |
---|---|---|---|
language | 服務(wù)器腳本語言的類型 | 只能是java | 是 |
contentType | 靜態(tài)資源的響應(yīng)類型 | text/html; charset=UTF-8 | 是 |
pageEncoding | JSP的字符集 | 各種字符集,比如UTF-8 | 是 |
import | Java語言的引包 | 相當(dāng)于Java代碼中的import递雀,可以出現(xiàn)多次 | 否 |
errorPage | JSP的錯誤頁指向 | 其他JSP頁面(必須是isErrorPage=true) | 否 |
isErrorPage | 聲明JSP自身是否為一個錯誤頁柄延,允許該JSP使用exception隱式對象 | true或false | 否 |
2.3.2 taglib指令
taglib指令可以出現(xiàn)多次,用于引入第三方的標(biāo)簽庫缀程,比如JSTL標(biāo)簽庫和自定義標(biāo)簽庫
<%@ taglib prefix="" uri="" %>
常用的屬性
常用屬性 | 用途 | 取值 | 必要項 |
---|---|---|---|
prefix | 被引入標(biāo)簽庫在JSP頁面上使用的前綴名 | 字符串 | 是 |
uri | 被引入標(biāo)簽庫聲明的uri | 表示url的字符串 | 是 |
tagdir | 用于指定tag文件目錄 | 絕對路徑 | 否 |
2.3.3 include指令
include指令可以出現(xiàn)多次搜吧,在頁面上引入另一個JSP的內(nèi)容市俊。比如菜單這種在很多JSP頁面都出現(xiàn)的內(nèi)容就可以使用include指令來引入,一次修改處處生效滤奈。
<%@ include file="" %>
常用屬性 | 用途 | 取值 | 必要項 |
---|---|---|---|
file | 引入JSP文件的站內(nèi)地址 | 表示站內(nèi)地址的url的字符串 | 是 |
2.4 JSP動作
2.4.1 include動作
與JSP指令的功能實際效果是一致的摆昧,在頁面上引入另一個JSP的內(nèi)容。
<jsp:include page="/x.jsp"></jsp:include>
include指令與include動作的區(qū)別
include指令:將兩個JSP的代碼融合至一起蜒程。
include動作:兩個JSP有各自獨立的編譯和輸出
2.4.2 forward動作
相當(dāng)于在JSP頁面上進行請求轉(zhuǎn)發(fā)绅你,當(dāng)JSP執(zhí)行到這句代碼時,立即進行請求轉(zhuǎn)發(fā)
<jsp:forward page="站內(nèi)路徑"></jsp:forward>
2.4.3 param動作
在請求轉(zhuǎn)發(fā)的過程中傳遞數(shù)據(jù)搞糕,通過getParameter可以取得這些數(shù)據(jù)
<jsp:forward page="站內(nèi)路徑">
<jsp:param value="abc" name="haha"/>
<jsp:param value="123" name="xixi"/>
</jsp:forward>
2.4.4 useBean動作
從某個作用域中取得數(shù)據(jù)
<jsp:useBean id="online" class="com.neuedu.po.EmployeesPO" scope="session"></jsp:useBean>
常用屬性 | 用途 | 取值 | 必要項 |
---|---|---|---|
id | 作用域中的key和變量名 | 字符串 | 是 |
class | 取出變量的類型 | 表示類路徑的字符串 | 是 |
scope | 作用域 | page,request,session,application | 否 |
在JSP頁面中聲明某個變量
3. EL表達(dá)式
3.1 在作用域中取值
取得的是某個屬性的值勇吊,要求該屬性必須有相應(yīng)的set和get方法
${sessionScope.online} //取得session作用域中key是online的對象的值
${sessionScope.online.ename} //取得session作用域中key是online的對象的ename屬性的值
${haha} //取得request作用域中key是haha的對象的值
${requestScope.haha} //取得request作用域中key是haha的對象的值
EL表達(dá)式中作用域的隱式對象
EL表達(dá)式隱式對象 | 作用域 |
---|---|
pageScope | page作用域 |
requestScope(默認(rèn)) | request作用域 |
sessionScope | session作用域 |
applicationScope | application作用域 |
3.2 基礎(chǔ)的運算
EL表達(dá)式可以進行基礎(chǔ)的運算,比如:四則運算和比較運算
${sessionScope.online.sex == 1} //顯示sex屬性的值是否為1
${2+3} //計算2+3的結(jié)果并顯示
${2+3 > 4} //顯示2+3>4的比較結(jié)果
3.3 web的基礎(chǔ)信息
${pageContext.request.contextPath} //系統(tǒng)的root的名字
4. JSTL標(biāo)簽
在工程中導(dǎo)入jstl的jar包窍仰,在JSP頁面上使用taglib指令引入標(biāo)簽庫
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
著重介紹下面三種常用的標(biāo)簽汉规,其他的略過
4.1 迭代標(biāo)簽(core庫)
for...each
<c:forEach var="po" items="${elist}">
</c:forEach>
相當(dāng)于
for(EmployeesPO po : (List<EmployeesPO>)request.getAttribute("elist")){
}
for
<c:forEach begin="0" end="5" step="1">
</c:forEach>
相當(dāng)于
for(int i = 0; i < 5; i++){
}
4.2 條件標(biāo)簽(core庫)
單獨if
<c:if test="${5 > 2}">
</c:if>
相當(dāng)于
if(5 > 2){
}
多重分支
<c:choose>
<c:when test="${po.sex == 1}">
男
</c:when>
<c:when test="${po.sex == 2}">
女
</c:when>
<c:otherwise>
保密
</c:otherwise>
</c:choose>
相當(dāng)于
if(po.getSex() == 1){
男
}else if(po.getSex() == 2){
女
}else{
保密
}
4.3 日期格式標(biāo)簽(fmt庫)
用于日期格式化的顯示
將po.getBirthday()表示的date對象,按照yyyy年MM月dd日
的格式進行顯示
<fmt:formatDate value="${po.birthday}" pattern="yyyy年MM月dd日"/>