1. 程式人生 > >JSP初級學習總結

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拼湊前端頁面,而專注於處理客戶端傳來的資訊。