一、JSP的介紹和生成
JSP的全名是Java Server Pages。換句話說,Java的服務(wù)器頁面JSP的主要作用是代表servlet程序右鍵單擊返回HTML頁面的數(shù)據(jù)web目錄(或其他)。- new - JSP/JSPX -輸入文件名-選擇jj
默認(rèn)情況下,第一次訪問JSP頁面時(shí)(運(yùn)行Tomcat服務(wù)器后,在瀏覽器地址欄中輸入路徑),Tomcat服務(wù)器會將JSP頁面轉(zhuǎn)換為Java源文件。class字節(jié)代碼文件(.Java
另一方面,HttpJspBase類直接從http servlet類繼承。換句話說,JSP翻譯的Java類間接繼承自http servlet類,證明JSP頁是servlet程序
三、JSP語法
JSP頭的page命令:
JSP標(biāo)頭中的page指令可以修改JSP頁上的一些重要屬性或行為
以下所有屬性都記錄在page指令中,未出現(xiàn)在默認(rèn)page指令中的所有屬性都使用默認(rèn)值。
(1) contentType屬性:表示JSP返回的數(shù)據(jù)類型,即re()的參數(shù)值
(2) language屬性:表示JSP翻譯后的哪些語言文件(當(dāng)前僅支持Java)
(3) pageEncoding屬性:表示當(dāng)前JSP文件本身的字符集(顯示在IDEA右下角)
(4) import屬性:表示與Java匹配的指南包(指南類)
(5) autoFlush屬性:設(shè)置out輸出流緩沖區(qū)滿后是否自動刷新緩沖區(qū)。默認(rèn)值為true
(6) buffer屬性:設(shè)置out緩沖區(qū)的大小。默認(rèn)值為8kb
注意:如果out緩沖區(qū)已滿,無法自動刷新,則會報(bào)告錯(cuò)誤
(7) errorPage屬性:設(shè)置在JSP頁執(zhí)行錯(cuò)誤時(shí)自動轉(zhuǎn)到的頁(錯(cuò)誤消息頁)的路徑。此路徑通常以斜線開頭,表示請求地址為http://IP 3360 port/engineering path/相應(yīng)的代碼web目錄
(8) isErrorPage屬性:設(shè)置當(dāng)前JSP頁是否為錯(cuò)誤信息頁。默認(rèn)值為false,如果為true,則可以獲取錯(cuò)誤信息
(9)會話屬性:設(shè)置在訪問當(dāng)前JSP頁時(shí)是否創(chuàng)建HttpSession對象。默認(rèn)值為true
(10) extends屬性:設(shè)置默認(rèn)情況下由JSP頁翻譯的Java類繼承的人員
注意:除非有特殊要求,否則建議不要修改上面的默認(rèn)值
四、JSP中常用的腳本
1.腳本聲明
格式:%!聲明Java代碼%
功能:您可以為JSP可以翻譯的Java類定義屬性、方法、靜態(tài)代碼塊、內(nèi)部類等。
功能:不出現(xiàn)在瀏覽器頁面上,僅存在于翻譯的Java類中
代碼演示:聲明使用腳本(此JSP文件在web目錄中稱為Fir)
% @ page content type=' text/HTML;Charset=UTF-8' language='java'%
% @ page import=' java.u%
% @ page import=' java.u%
Html
頭(電影)
標(biāo)題標(biāo)題/標(biāo)題
/head
菩提
%-1。聲明類屬性- %
%!
私有字符串name
Private static mapstring、object map
%
%-2。類方法聲明- %
%!
公共intsum () {
Return 12
}
%
%-3。靜態(tài)代碼塊聲明- %
<%!static {
Map = new HashMap<String, Object>();
map.put("key1", "value1");
}
%>
</body>
</html>
對應(yīng)的翻譯后的java源文件:
2. 表達(dá)式腳本
格式:<%=表達(dá)式 %>
作用:在瀏覽器的JSP頁面上輸出數(shù)據(jù)(只有此腳本可以在瀏覽器的頁面上輸出數(shù)據(jù))
特點(diǎn):
(1) 所有的表達(dá)式腳本都會被翻譯到對應(yīng)的Java類的_jspService()方法中,故表達(dá)式腳本可以 直接使用_jspService()方法參數(shù)中的對象
(2) 表達(dá)式腳本都會被編譯后的Java類中的out.print()方法輸出到瀏覽器頁面上
(3) 表達(dá)式腳本中的表達(dá)式不能以分號結(jié)束
代碼演示:表達(dá)式腳本的使用(此JSP文件在web目錄下,名為Fir)
<%=22 %> <br/>
<%="可以輸出字符串" %> <br/>
<%=map %> <br/>
<%--使用_jspService方法中的對象--%>
<%=reque("username") %>
啟動Tomcat服務(wù)器后瀏覽器的運(yùn)行結(jié)果:
對應(yīng)的翻譯后的Java源文件(在_jspService方法中):
注意:
1.write方法中的標(biāo)簽、轉(zhuǎn)義字符自動識別為對應(yīng)的
功能,不在頁面輸出,執(zhí)行各自代表的功能
2.out的兩個(gè)方法也在_jspService方法中,也都是java語言
3.只有print、write方法、表達(dá)式腳本中的內(nèi)容才可在瀏覽器中顯示,其余Java代碼的sout在控制臺輸出
3. 代碼腳本
格式:<% Java語句 %>
作用:在JSP頁面中可以編寫需要的Java代碼
特點(diǎn):
(1) 代碼腳本翻譯后都在_jspService方法中,故代碼腳本可以直接使用此方法參數(shù)中的對象
(2) 可以由多個(gè)代碼腳本塊組合完成一個(gè)完整的Java語句
(3) 代碼腳本還可以和表達(dá)式腳本一起組合使用,在JSP頁面上輸出數(shù)據(jù)
代碼演示:代碼腳本的使用(此JSP文件在web目錄下,名為Fir)
<%--1.if語句--%>
<%
int i = 1;
if (i == 1) {
Sy("我愛祖國!");
} else {
Sy("我很愛祖國!");
}
%> <br/>
<%--2.for循環(huán)語句--%>
<%
for (int j = 0 ; j < 3; j++) {
Sy("第" + j + "次循環(huán)");
}
%> <br/>
<%--3.使用_jspService方法參數(shù)中的對象--%>
<%
String username = reque("username");
Sy("username對應(yīng)的值為:" + username);
%>
運(yùn)行結(jié)果:
啟動Tomcat服務(wù)器后在地址欄輸入:http://localhost:8080/MyTest/Fir?username=Jaychou
在控制臺顯示:
對應(yīng)的翻譯后的Java源文件(在_jspService方法中):
五、JSP三種注釋
1.HTML注釋:<!--HTML注釋-->
HTML注釋會被翻譯到JSP文件對應(yīng)的Java類的_jspService方法中,以out.write()輸出到客戶端,
write方法會自動識別標(biāo)簽,執(zhí)行標(biāo)簽對應(yīng)的功能,不會在瀏覽器的頁面上輸出注釋
2.Java注釋:(1) //單行注釋 (2) /*多行注釋*/
Java注釋要寫在聲明腳本和代碼腳本中才被認(rèn)為是Java注釋,會被翻譯到JSP文件對應(yīng)的Java類的_jspService方法中,在對應(yīng)的Java類中也是注釋
3.JSP注釋:<%- -這是JSP注釋- -%>
JSP注釋中的內(nèi)容不會在JSP文件翻譯后的Java類中出現(xiàn),即注釋中的內(nèi)容沒有任何功能
六、JSP九大內(nèi)置對象
JSP的內(nèi)置對象指的是Tomcat服務(wù)器將JSP頁面翻譯為Java類之后內(nèi)部提供的九大對象:
(將page指令的isErrorPage屬性寫成true可以出現(xiàn)exception對象)
request:請求對象
response:響應(yīng)對象
pageContext:JSP的上下文對象
session:會話對象
application:servletContext對象
config:ServletConfig對象
out:JSP輸出流對象
page:指向當(dāng)前JSP的對象
exception:異常對象
七、JSP四大域?qū)ο?/p>
域?qū)ο笫侵缚梢韵馦ap一樣存取數(shù)據(jù)的對象,四個(gè)域?qū)ο蠊δ芤粯?,只是對?shù)據(jù)的存取范圍不同
代碼演示1:四個(gè)域?qū)ο蟠嫒?shù)據(jù)的范圍的不同(在web目錄下創(chuàng)建)
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>scope1</title>
</head>
<body>
<h1>頁面</h1>
<%
//向四個(gè)域?qū)ο笾蟹謩e保存數(shù)據(jù)
("key", "pageContext");
reque("key", "request");
("key", "session");
a("key", "application");
%>
<%-- <jsp:forward page=""></jsp:forward>是請求轉(zhuǎn)發(fā)標(biāo)簽,
page屬性設(shè)置請求轉(zhuǎn)發(fā)的路徑 --%>
<jsp:forward page=";></jsp:forward>
</body>
代碼演示2:在web目錄下創(chuàng)建
<head>
<title>Title</title>
</head>
<body>
<h1>頁面</h1>
<%-- JSP頁面中不加任何標(biāo)簽直接輸入的內(nèi)容被write方法輸出在瀏覽器的頁面上 --%>
pageContext域是否有值:<%=("key")%> <br>
request域是否有值:<%=reque("key")%> <br>
session域是否有值:<%=("key")%> <br>
application域是否有值:<%=a("key")%> <br>
</body>
運(yùn)行結(jié)果1:
運(yùn)行結(jié)果2:
注意:若四個(gè)域?qū)ο笤谑褂脮r(shí)范圍都可滿足要求,則使用的優(yōu)先順序是(范圍從小到大):
pageContext --> request --> session --> application
八、JSP的out輸出和re輸出的異同
1.相同點(diǎn):response表示響應(yīng),用于給客戶端(瀏覽器)返回內(nèi)容
out同樣也是用于給客戶端(瀏覽器)輸出內(nèi)容
2.不同點(diǎn):
3.注意:由于官方的代碼中翻譯后的Java代碼底層都是使用out進(jìn)行輸出,故一般都使用out進(jìn)行 輸出,out又分為write方法和print方法:
(1) out.print():會將任何內(nèi)容轉(zhuǎn)換成字符串后調(diào)用write方法輸出
(2) out.write():輸出字符串沒有問題,但輸出int型時(shí)會將int轉(zhuǎn)換成char輸出,導(dǎo)致輸出的并非是想要的數(shù)字而是數(shù)字對應(yīng)的ASCII碼
結(jié)論:JSP頁面的代碼腳本中任何要輸出在瀏覽器的內(nèi)容均使用out.print()方法
九、JSP的常用標(biāo)簽
1. 靜態(tài)包含
(1)使用場景:
(2)使用方法:
<%@include file=""%>
其中file屬性設(shè)置要包含的JSP頁面,以/打頭,代表http://ip:port/工程路徑/,對應(yīng)web目錄
代碼演示1:在web目錄下創(chuàng)建body.jsp
<body>
頭部信息 <br>
主體信息 <br>
<%@include file=";%>
</body>
代碼演示2:在web目錄下創(chuàng)建
<body>
頁腳信息 <br>
</body>
運(yùn)行結(jié)果:
(3)靜態(tài)包含的特點(diǎn):
①靜態(tài)包含不會將被包含的JSP頁面翻譯成.java.class文件
②靜態(tài)包含是把被包含的頁面的代碼拷貝到body.jsp對應(yīng)的Java文件的對應(yīng)位置執(zhí)行輸出
2. 動態(tài)包含
(1)使用方法:
<jsp:include page=””></jsp:include>
其中page屬性設(shè)置要包含的JSP頁面,與靜態(tài)包含一致
(2)動態(tài)包含的特點(diǎn):
①動態(tài)包含將被包含的JSP頁面翻譯成.java.class文件
②動態(tài)包含還可以傳遞參數(shù)
③動態(tài)包含底層使用如下代碼調(diào)用被包含的JSP頁面執(zhí)行輸出:
org.a(request, response, “/”, out, false);
代碼演示1:在web目錄下創(chuàng)建body.jsp
<body>
頭部信息 <br>
主體信息 <br>
<jsp:include page=";>
<jsp:param name="username" value="Jaychou"/>
<jsp:param name="password" value="root"/>
</jsp:include>
</body>
注意:
- 設(shè)置參數(shù)的標(biāo)簽要寫在動態(tài)包含之中
- 出現(xiàn)Expecting “jsp:param” standard action with “name” and “value” attributes異常,兩個(gè)原因:
①動態(tài)包含中未設(shè)置參數(shù)但沒有把<jsp:include page=””></jsp:include>放在一行上
②動態(tài)包含中加了注釋
代碼演示2:在web目錄下創(chuàng)建
<body>
頁腳信息 <br>
<%=reque("username")%>
</body>
運(yùn)行結(jié)果:
(3)動態(tài)包含的底層原理:
十、ServletContextListener監(jiān)聽器
1. Listener監(jiān)聽器的介紹
(1) Listener監(jiān)聽器是JavaWeb的三大組件之一
(2) Listener監(jiān)聽器是JavaEE的規(guī)范(接口)
(3) Listener監(jiān)聽器的作用是監(jiān)聽某件事物的變化,然后通過回調(diào)函數(shù)反饋給程序做一些處理
2. ServletContextListener監(jiān)聽器
ServletContextListener監(jiān)聽器可以監(jiān)聽ServletContext對象的創(chuàng)建和銷毀(web工程啟動時(shí)創(chuàng)建,停止時(shí)銷毀),監(jiān)聽到創(chuàng)建和銷毀之后都會調(diào)用ServletContextListener監(jiān)聽器的方法進(jìn)行反饋:
public interface ServletContextListener extends EventListener {
//在ServletContext對象創(chuàng)建之后調(diào)用
public void contextInitialized(ServletContextEvent sce);
//在ServletContext對象銷毀之后調(diào)用
public void contextDestroyed(ServletContextEvent sce);
}
3. ServletContextListener監(jiān)聽器的使用步驟
(1) 編寫一個(gè)類實(shí)現(xiàn)ServletContextListener接口
(2) 重寫兩個(gè)方法
(3) 在web.xml文件中配置監(jiān)聽器
代碼演示1:創(chuàng)建一個(gè)類
ublic class ListenerTest implements ServletContextListener {
@Override
public void contextInitialized(ServletContextEvent servletContextEvent) {
Sy("ServletContext對象創(chuàng)建");
}
@Override
public void contextDestroyed(ServletContextEvent servletContextEvent) {
Sy("ServletContext對象銷毀");
}
}
代碼演示2:在web.xml中配置
<listener>
<!-- <listener-class>標(biāo)簽中寫上述程序的全類名 -->
<listener-class>com.qizegao.;/listener-class>
</listener>
運(yùn)行結(jié)果:
Tomcat服務(wù)器啟動之后控制臺輸出ServletContext對象創(chuàng)建
Tomcat服務(wù)器停止之后控制臺輸出ServletContext對象銷毀
注意:
- 查看翻譯后的Java源文件的方法:啟動Tomcat服務(wù)器訪問到JSP頁面之后在控制臺輸出的信息的前端找到Using CATALINA_BASE中的路徑,在硬盤中打開此目錄,點(diǎn)擊work --> Catalina --> localhost,找到對應(yīng)的工程文件夾尋找即可
- 訪問JSP頁面其實(shí)是在執(zhí)行對應(yīng)的翻譯后的Java代碼的_jspService方法:翻譯后的Java類中沒有service方法,而是重寫了父類的_jspService方法,這個(gè)方法會被父類的service方法調(diào)用
[機(jī)智]點(diǎn)擊獲取資料
1.《jsp入門教程看這里!JSP的基本使用總結(jié)》援引自互聯(lián)網(wǎng),旨在傳遞更多網(wǎng)絡(luò)信息知識,僅代表作者本人觀點(diǎn),與本網(wǎng)站無關(guān),侵刪請聯(lián)系頁腳下方聯(lián)系方式。
2.《jsp入門教程看這里!JSP的基本使用總結(jié)》僅供讀者參考,本網(wǎng)站未對該內(nèi)容進(jìn)行證實(shí),對其原創(chuàng)性、真實(shí)性、完整性、及時(shí)性不作任何保證。
3.文章轉(zhuǎn)載時(shí)請保留本站內(nèi)容來源地址,http://f99ss.com/gl/2494261.html