JSP入門

一、引入

JSP(Java Server Pages):以Java語言爲基礎的動態網頁開發技術。在html代碼中嵌套Java代碼。JSP的目的是將數據處理與頁面顯示分離。

二、工作原理

當一個JSP頁面被第一次請求是,服務器首先將JSP文件轉換爲一個實現了HttpServlet接口的Java源代碼,然後編譯該Java源代碼,生成.class 的字節碼文件,之後服務器將class文件加載到內存。然後服務器會創建該Servlet的實例,對該JSP頁面的請求會有該Servlet來完成響應。
JSP本質上還是一個Servlet

三、JSP語法

1、 腳本元素

(1)、聲明標籤

用途:成員變量和成員方法的聲明,聲明的變量是全局變量,聲明的方法將轉換爲Servlet的方法,此標籤中的內容在JSP引擎產生Servlet文件是直接拷貝到當前Servlet類中,Java類中可以放置的內容均可以放置在此處

<%! 
    private int num = 10;
    public static String getName(){
        return "jingxin";
    }
    public void print(){
        System.out.println("hello");
    }
%>

(2)、表達式標籤

用途:表達式的計算結果轉換成字符串,使用隱含對象out進行輸出,結果顯示在頁面中標籤所在的位置,等價於out.print(表達式)

<%= num1+num2 %>

(3)、代碼塊標籤

用途:一個JSP頁面可以有許多代碼塊,這些代碼塊將被JSP服務器按照順序執行,JSP引擎會將此標籤中的內容直接拷貝到Servlet的service方法中,此標籤中只能放置可以在一個方法中放置的內容,聲明的變量是局部變量,不能定義方法

<%
    int a = 100;
    out.print(a);
    out.print(getName());
    this.method();
%>

2、JSP註釋

JSP有兩種註釋

(1)、JSP註釋

註釋內容不會被髮送至瀏覽器甚至不會被編譯

<%--註釋 --%>

(2)、HTML註釋

通過瀏覽器查看源代碼時可以看見註釋內容

<!-- 註釋 -->

四、JSP指令

(一)、作用

配置頁面信息,提供給JSP引擎生成Java代碼

(二)、格式

指令可以放置在JSP頁面的任何位置,但建議放在頁面頭部

<%@ 指令名 attribute="value"  %>

(三)、page 指令

定義網頁依賴屬性,比如腳本語言、error頁面、緩存需求等等。
1. pageEncoding:JSP頁面的字符編碼,優先權高於contentType

<%@page pageEncoding="utf-8"%>

2. contentType: 配置當前頁面的MIME類型和字符編碼

<%@page contentType="text/html; charset=utf-8" %>

3. import:用來導入Java的包或類,多個包之間用”,”分隔,也可寫多條指令

<%@page import="java.util.Date,java.sql.*,java.io.File"%>

4. language:定義當前JSP頁面所使用的腳本語言,默認爲Java

<%@page language="java" %>

5. info:確定當前頁面的描述信息,getServletInfo()方法的返回信息

<%@page info="my first jsp" %>

6. session:確定當前頁面是否使用session,默認值爲true,當值爲false時,如果在當前頁面中使用了session對象,則會拋出異常

<%@page session="true" %>

7. extends:指定servlet從哪一個類繼承,默認值爲HttpJspBase,一般不使用

<%@page extends="com.manongsushe.JSPDemo" %>

8. isErrorPage:指定當前頁面是否可以作爲另一個JSP頁面的錯誤處理頁面,默認值爲false,只有當值爲true時,纔可以使用exception的內置對象

<%@page isErrorPage="true" %>

9. errorPage:指定當JSP頁面發生異常時需要轉向的錯誤處理頁面

<%@page errorPage="error.jsp" %>

10. buffer:指定out對象使用緩衝區的大小,默認爲8KB

<%@page buffer="8kb" %>

11. autoFlush:表示是否自動刷新緩衝區,true表示自動刷新,若設置爲false,需要手動編碼刷新,默認值爲true

<%@page autoFlush="true" %>

12. isThreadSafe:指定對JSP頁面的訪問是否爲線程安全,用來設置當前JSP頁面是否能夠同時響應超過一個以上的用戶請求,當值爲true時,是線程不安全的,可以有一個以上的用戶同時訪問,當值爲false時,同時只能有一個用戶訪問,Servlet類實現了一個標記接口SingleThreadModel

<%@page isThreadSafe="true" %>

13. isELIgnored:指定是否忽略EL表達式,默認值爲false,若爲true,則不執行JSP頁面中的EL表達式

<%@page isELIgnored="false" %>

(四)、include指令

JSP可以通過include指令來包含其他文件。被包含的文件可以是JSP文件、HTML文件或文本文件。包含的文件就好像是該JSP文件的一部分,會被同時編譯執行。被引入的文件可以有任意的拓展名。

<%@ include file="文件相對 url 地址" %>

(五)、Taglib指令

JSP API允許用戶自定義標籤,一個自定義標籤庫就是自定義標籤的集合。
Taglib指令引入一個自定義標籤集合的定義,包括庫路徑、自定義標籤。

<%@ taglib uri="uri" prefix="prefixOfTag" %>

uri:確定標籤庫的位置,prefix:指定標籤庫的前綴

五、JSP的九大內置對象

  1. pageContext
    類型:PageContext
    作用:當前JSP頁面的上下文對象,管理當前JSP頁面的,域對象之一,具有其他隱式對象的引用,可以爲其他域對象設置值,也可進行全域查找。
    作用範圍:當前JSP頁面
  2. request
    類型:HttpServletRequest
    作用:封裝請求信息,域對象之一
    作用範圍:一次請求
  3. session
    類型:HttpSession
    作用:域對象之一
    作用範圍:一次會話
  4. application
    類型:ServletContext
    作用:域對象之一
    作用範圍:整個Web應用
  5. config
    類型:ServletConfig
    作用:當前Servlet的配置信息(初始化參數)
  6. response
    類型:HttpServletResponse
    作用:封裝響應信息,由於JSP已經使用了Writer,所以不能利用response。getO utputStream()獲得字節輸出流,只能使用response.getWriter();
  7. exception
    類型:Throwable
    作用:錯誤頁面中獲得異常信息,只有錯誤頁面才能使用這個對象
  8. out
    類型:JSPWriter
    作用:用來向瀏覽器輸出信息,是字符流
  9. page
    類型:Object
    作用:當前類的引用(this)

六、JSP常用標籤

只要支持JSP文件,常用標籤就可以直接使用

1、jsp:forward

完成頁面轉發
page 屬性指定轉發的資源
內部可以使用標籤設置請求參數

<jsp:forward page="forward.jsp">
    <jsp:param value="張三" name="name"/>
</jsp:forward>

注意:
被forward轉發的資源必須與發送請求的頁面處於相同的上下文環境中,每當遇到此標籤時,容器就會停止執行當前的JSP,轉而執行被轉發的資源

2、jsp:include

完成在當前JSP頁面的執行期間引入被引入資源的輸出內容,當前JSP頁面與被動態引入的資源是兩個彼此獨立的執行實體,被動態引入的資源必須是一個能夠獨立被web容器調用和執行的資源。
內部同樣可以使用標籤設置請求參數

<jsp:include page="include.jsp">
    <jsp:param value="張三" name="name"/>
</jsp:include>
發佈了29 篇原創文章 · 獲贊 18 · 訪問量 8445
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章