JSP初級學習總結
1.JSP:Java Server Pages。可以理解為:JSP=HTML+JAVA程式碼片段
2.設定Eclipse中JSP的編碼為UTF-8,以及換行符為unix格式。
3.JSP編譯執行。當第一次載入JSP頁面時,因為要將JSP檔案轉換為Servlet類,所以響應速度較慢。
當再次請求時,JSP容器就會直接執行第一次請求時產生的Servlet,而不會再重新轉換JSP檔案,所以其執行速度較快。
4.JSP頁面組成
JSP程式碼放在特定的標籤中,然後嵌入到HTML程式碼中。
開始標籤、結束標籤和元素內容 三部分統稱為JSP 元素(Elements)
JSP元素可分成三種不同的型別:
◦指令碼元素(Scripting)
◦指令元素(Directive)
◦動作元素(Action)
注意:JSP的標籤必須要完結。
5.三種元素的說明:
A.指令碼元素 規範JSP 網頁所使用的Java 程式碼,
包括:HTML註釋、隱藏註釋、宣告、表示式和指令碼段。
B.指令元素 是針對JSP引擎的,並不會直接產生任何看得見的輸出。
包括:inc1ude指令、page指令和taglib指令。
C.動作元素 利用XML語法格式的標記來控制Servlet引擎的行為。
6.JSP註釋:
A.html的註釋 ----傳送到客戶端,在瀏覽器右鍵原始碼中可見
<!--
B.jsp隱藏的註釋 ----不傳送到客戶端,不可見
<%--註釋--%>
C.java隱藏註釋 ----客戶端也看不見
存在於<% %>標籤中的Java單行註釋和多行註釋
7.在JSP程式中用到的變數和方法是需要宣告的,宣告的語法如下:核心格式:<%! ....%>
<%! 宣告;[宣告;]…%> //必須以;結尾
例如:
<%! int i=6;%>
<%! int a,b,c;double d=6.0;%>
<%! Date d=new Date(); %>
8.JSP的表示式
是由變數、常量組成的算式,它將JSP生成的數值嵌入HTML頁面,用來直接輸出Java程式碼的值。
表示式的語法規則如下: <%= 表示式 %>
注意:
A.不能用一個分號(“;”)來作為表示式的結束符。
B.“<%=”是一個完整的標記,中間不能有空格。
C.表示式元素包含任何在Java語言規範中有效的表示式。
說明,在開發中要儘量使用表示式輸出代替out.println()輸出!
9.JSP指令碼段(Scriplet)是一段Java程式碼。可以包含任意行合法的指令碼語句,指令碼段是一個程式碼片斷,在伺服器處理請求過程中被執行。其語法規則如下:
<% 程式碼 %>
10.會在Eclispe中調出這些片段小提示。在游標處插入對應的標籤。
11.include指令:
在JSP網頁中插入其他的檔案,有兩種方式:
◦include指令
include指令稱為檔案載入指令,可以將其他的檔案插入JSP網頁,被插入的檔案可以是JSP檔案、HTML檔案或者其他文字檔案,但是必須保證插入後形成的新檔案符合JSP頁面的語法規則。
其指令形式如下:
<%@ include file=”相對地址”%>
include指令只有一個屬性:file。
◦jsp:include動作。
12.page指令稱為頁面指令,幾乎在所有JSP頁面頂部都會看到page指令。
<%@ page language=”指令碼語言”
extends=”繼承的父類名稱”
import=”匯入的java包或類的名稱”
session=”true/false”
buffer=”none/8kB/自定義緩衝區大小”
autoflush=”true/false”
isThreadSafe=” true/false”
info=”頁面資訊”
errorPage=”發生錯誤時所轉向的頁面相對地址”
isErrorPage=”true/false”
contentType=”MIME型別和字符集”
%>
import
◦用來匯入將要用到的一個或多個包/類,例如:
<%@ page import=”java.util.Date”%>
<%@ page import=”java.util.*”%>
isErrorPage:這個屬性的預設值為“false”
isErrorPage用來指定目前的JSP網頁是否是另一個JSP網頁的錯誤處理頁,通常與errorPage屬性配合使用。特別說明:如果頁面錯誤的提示內容沒有使用exception物件,值為false也是可以的,但是要使用exception物件,必須為true。
注意:
A.在一個頁面中可以使用多個<%@ page %>指令,分別描述不同的屬性
B.每個屬性只能用一次,但是import指令可以多次使用。
C.<%@ page%>指令區分大小寫。
可以在Tomcat的安裝目錄/conf/web.xml中檢視到所有已知的MIME型別。
13.taglib指令
用來定義一個標記庫以及標記的字首,其語法規則如下:
<%@ taglib uri=”URIToLibrary” prefix=”標記字首”%>
14.JSP動作:
JSP動作功能:
A.JSP動作元素用來控制JSP引擎的行為
B.可以動態插入檔案、重用JavaBean元件、導向另一個頁面等。
JSP動作元素:----注意大小寫敏感
jsp:include動作:在頁面得到請求時包含一個檔案。
jsp:forward動作:引導請求者進入新的頁面。
jsp:plugin動作:連線客戶端的Applet或Bean外掛。
jsp:useBean動作:應用JavaBean元件。
jsp:setProperty動作:設定JavaBean的屬性。
jsp:getProperty動作:獲取JavaBean的屬性並輸出。
15.jsp:include動作
在即將生成的頁面上動態的插入檔案,它在頁面執行時才將檔案插入,對被插入檔案進行處理。也就是說它是在頁面產生時插入檔案,其語法如下:
<jsp:include page=”檔案相對路徑” flush=”true”/>或
<jsp:include page=“檔案相對路徑” flush=“true”>
<jsp:param name=“引數名1” value=“引數值1”/>
<jsp:param name=“引數名2” value=“引數值2”/>
…
</jsp:include>
說明:flush屬性值為布林型,若值為false表示這個網頁全部讀進來之後才輸出,使用者體驗就不好;通常設為true,buffer滿了就輸出。
被包含頁面可以使用request.getParameter()方法進行引數接收!
16.include指令和jsp:include動作區別:
A.include指令是靜態的,是在JSP檔案被轉換成Servlet的時候引入檔案,它把被插入檔案插到當前位置後再進行編譯
B.jsp:include動作是動態的,插入檔案的時間是在頁面被請求的時候。JSP引擎不把插入檔案和原JSP檔案合併成一個新的JSP檔案,而是在執行時把被插入檔案包含進來。
注意:如果包含頁面時需要傳遞引數,則只能使用jsp:include動作
特別說明:被包含的頁面如果有圖片等標籤,當圖片不能顯示時,要特別注意,當前路徑的基準是外面的JSP頁面,而不是被包含頁面的位置基準!
建議優先使用動態包含!
17.jsp:forward動作 ----伺服器跳轉
用於停止當前頁面的執行,轉向另一個HTML或JSP頁面。
在執行中JSP引擎不再處理當前頁面剩下的內容,緩衝區被清空。
在客戶端看到的是原頁面的地址,而實際顯示的是另一個頁面的內容。
<jsp:forward page=“檔名”/>或
<jsp:forward page=“檔名”>
<jsp:param name=“引數名1” value=“引數值1”/>
<jsp:param name=“引數名2” value=“引數值2”/>
…
</jsp:forward>
伺服器跳轉:客戶端瀏覽器的位址列顯示路徑不變!
18.jsp:useBean動作
◦jsp:useBean動作用來裝載一個將要在JSP頁面中使用的JavaBean。
它建立一個JavaBean例項並指定其名字和作用範圍。
◦實際工程中常用JavaBean做元件開發,而在JSP中只需要宣告並使用這個元件,這樣可以較大限度地實現靜態內容和動態內容的分離,這也是JSP的優點之一。
在JSP中例項化一個bean的最簡單的方法如下:
<jsp:useBean id=“bean的名稱” scope=”有效範圍” class=“包名.類名” />
scope屬性的取值有四種: page, request, session和application,預設值是page。或者:
<jsp:useBean id=“bean的名稱” scope=”有效範圍” class=“包名.類名”>
實體
< /jsp:useBean >
實體的內容可以是:
◦合法的JSP程式程式碼
◦ <jsp:setProperty>和<jsp:getProperty>標籤
◦一般的HTML程式碼
注意:這種例項化形式下,只有當第一次例項化bean時才執行實體部分,如果是利用現有的bean例項則不執行實體部分。
jsp:useBean並非總是意味著建立一個新的bean例項。
----------------------------------------------------------
JSP引擎根據useBean中id屬性指定的名字,在一個同步塊中,查詢內建物件pageContext中是否包含該id指定的名字和scope指定的作用域的物件。
如果該物件存在,JSP引擎把這樣一個物件分配給使用者。
如果不存在則建立新的bean例項。
19.一個類作為JavaBean需要符合的要求:
A.類必須放在包中,在web中沒有包的類是不存在的;
B.類必須宣告為public的;
C.必須要有無參構造方法,無參構造方法可以是顯示定義或者隱式繼承;
D.對類的屬性使用private封裝,提供setter和getter方法;特殊情況下可以不提供setter方法!
20.jsp:setProperty動作
用來設定已經例項化的bean物件的屬性, jsp:setProperty動作的幾種語法規則
第一種是直接將屬性值設定為字串或表示式,形如:
<jsp:setProperty name=“bean的名稱” property=“bean的屬性名稱” value= “屬性值”/>
第二種方法用request的引數值來設定JavaBean的屬性值,request引數的名字和JavaBean屬性的名字可以不同,其語法規則如下:
<jsp:setProperty name=“bean的名稱” property=“bean的屬性名稱”
param= “request引數的名字”/>
第三種方式:使用名稱自動匹配
<jsp:setProperty name="book" property="bookName" />
<jsp:setProperty name="book" property="bookNum" />
第四種方式:使用*萬用字元:
<jsp:setProperty name="book" property="*" />
21.jsp:setProperty動作的用法
A.可以在jsp:useBean元素的外面使用jsp:setProperty:
<jsp:useBean id="myName" ... />
...
<jsp:setProperty name="myName" property="someProperty" ... />
此時,不管jsp:useBean是找到了一個現有的bean,還是新建立了一個bean例項,jsp:setProperty都會執行。
B.把jsp:setProperty放入jsp:useBean元素的內部,如下所示:
<jsp:useBean id="myName" ... >
...
<jsp:setProperty name="myName" property="someProperty" ... />
</jsp:useBean>
此時,jsp:setProperty只有在新建bean例項時才會執行,如果是使用現有例項則不執行jsp:setProperty。
22.jsp:getProperty動作
用來獲取beans的屬性值,將其轉換成字串,然後輸出。其語法規則如下:
<jsp:getProperty name=“bean的名稱” property=“bean的屬性名稱”/>
注意:jsp:setProperty動作和jsp:getProperty動作必須與jsp:useBean動作一起使用,不能單獨使用。
23.在Eclispe中執行使用JavaBean的JSP,不一定需要將編譯後的Bean的class檔案放在WEB-INF/classes下;見下圖:
JavaBean的刪除:JavaBean屬於哪個範圍物件就呼叫哪個範圍的內建物件的removeAttribute()方法刪除!
24.如何處理JSP頁面中的程式碼<% %>包裹問題?即何時包裹,何時不包裹。
可以認為是:
A.輸出指令不用包裹;B.<jsp:... 指令不需要包裹。C.HTML的標籤不需要包裹;
25.JSP的9個內建物件:---容器自動例項化,不需要使用者去例項化,可以直接使用。
pageContext---JSP頁面容器、request---得到使用者的請求資訊、
response---伺服器向客戶端的響應資訊、session---用來儲存一個使用者的資訊
application---表示所有使用者的共享資訊、config---伺服器配置,可以取得web.xml中的初始化引數
out---頁面輸出、page---表示從頁面中表示出來的一個Servlet例項
exception---表示JSP頁面所發生的異常,在錯誤頁中才起作用,且錯誤頁的isErrorPage的屬性必須為true! pageContext request response session application config out page exception
page request session application response pageContext out config exception
26.JSP提供的4種屬性儲存範圍:
A.page 只在頁面中儲存屬性,跳轉之後則無效;---使用pageContext表示
B.request 只在一次請求中儲存屬性,客戶端跳轉無效,但是伺服器跳轉後依然有效;
C.session 在一次會話中儲存,無論何種跳轉都可以使用,但是新開的瀏覽器無法使用;
D.application 在整個伺服器上儲存,所有使用者都可以使用。
27.request的常用方法:
28.response的常用方法:
說明: response. setHeader("",2 );
A.response.setHeader("refresh","2”); //設定兩秒一重新整理
B.response.setHeader("refresh”,”3;URL=hello.htm”) ; // 3 秒後跳轉到 hello.htm
定時的時間如果為0 則為立刻跳轉。----定時跳轉為客戶端跳轉
超連結跳轉也是客戶端跳轉!
C.response.sendRedirect(”hello.htm”); //直接跳轉到hello.htm
----此跳轉也是客戶端跳轉!
29.Cookie的常用方法:
Cookie c1 = new Cookie(”name",”zhangsan”); //定義新的Cookie 物件
Cookie c2 = new Cookie(”age”,"25"); // 定義新的Cookie 物件
c1.setMaxAge(60) ; //Cookie 儲存60 秒
c2.setMaxAge(60) ; //Cookie 儲存60 秒
response.addCookie(c1) ; //向客戶端增加Cookie
response.addCookie(c2) ; //向客戶端增加Cookie
30.session 物件是javax.servlet.http.HttpSession 介面的例項化物件,
31.application 物件是javax.servlet.ServletContext 介面的例項化物件,從單詞上翻譯表示的
是整個Servlet 的上下文, ServletContext 代表了整個容器的操作
例如:
String path = application.getRealPath(”/”); //得到當前虛擬目錄下對應的真實路徑
String path= this.getServletContext().getRealPath("/"); //得到當前虛擬目錄下對應的真實路徑-----儘量使用this.getServletContext()來代替application 物件。
32.config 物件是javax.servlet.ServletConfig 介面的例項化物件,主要的功能是取得一些初
始化的配置資訊。
所有的初始化引數必須在web.xml 中配置,即如果一個JSP 檔案要想通過初始化引數取得一些資訊, 則一定要在web.xml 檔案中完成對映。
33.out 物件是javax.servlet.jsp.JspWriter 類的例項化物件, 主要功能就是完成頁面的輸出操作,使用println()或print()方法輸出,但是從實際的開發來看,直接使用out 物件的機率較小,
34.pageContext 物件是javax.servlet.PageContext 類的例項,主要表示一個JSP 頁面的上下文,在此類中除了之前講解過的屬性操作外,還定義瞭如表6-15 所示的一些方法。
例子:
// 執行頁面跳轉
pageContext.forward("pagecontext_forward_demo02 .jsp?info=AABB") ;
// 從session 屬性範圍中取出屬性, 並執行向下轉型操作
String info = pageContext.getRequest().getParameter("info”);
2.27補充:
先有servlet 後有jsp servlet是客戶端服務小程式 後開發出jsp不再用繁瑣的servlet拼湊前端頁面,而專注於處理客戶端傳來的資訊。