1.概述 JSP文件是通過三大指令,九大對象以及JSP表達式等與HTML語句結合形成的一個文件,其本質為Servlet。簡單來說,即Java代碼+HTML語句。 2.運行原理 每個JSP頁面被訪問時,即被JSP引擎翻譯為一個Servlet源程式,該源程式再被編譯成Servlet的class類文件。之 ...
1.概述
JSP文件是通過三大指令,九大對象以及JSP表達式等與HTML語句結合形成的一個文件,其本質為Servlet。簡單來說,即Java代碼+HTML語句。
2.運行原理
每個JSP頁面被訪問時,即被JSP引擎翻譯為一個Servlet源程式,該源程式再被編譯成Servlet的class類文件。之後的執行流程與普通Servlet的執行一致。Servlet引擎將class類文件裝載並翻譯執行。
3.九大對象
JSP有9個內置對象,不需要聲明就可以使用。
(1)request:實際就是HTTPServletRequest。
(2)response:實際就是HTTPServletResponse。
(3)pageContext:代表當前JSP頁面,幾乎包含了當前JSP頁面的所以信息,也可以從該對象中獲取其它八個對象。
(4)session:代表瀏覽器和伺服器的一次會話,是HttpSession的一個對象。
(5)out:可以直接通過該對象的方法在頁面輸出文字信息或者HTML代碼。
(6)application:代表當前WEB應用,是ServletContext對象。
(7)exception:在聲明瞭<%@page isErrorPage="true"%>後可以通過該對象輸出異常信息。
(8)config:當前JSP對應的Servlet的ServletConfig對象,若要訪問當前JSP的配置參數,需要映射訪問才可以。(9)page:指向當前Jsp對應的Servlet對象的引用 ,但是為object類型。
其中最為常用也最為重要的四個對象按作用域範圍如下:
pageContext:作用域為當前JSP頁面。通過<%@ include file=""%>引入的文件中的變數等當前頁面也可以訪問。但是通過pageContext.include("file")引入文件的變數和參數並不能直接在當前頁面使用和修改,該方法的實質是將file中的內容原封不動地添加在當前頁面,可以理解為將HTML頁面直接拼接在該位置。
request:作用範圍在請求轉發的過程中一直有效。
session:作用域為瀏覽器和伺服器的一次會話。直觀表現在瀏覽器的一次打開與關閉。應用案例如購物網站中購物車的實現。
application:當前應用裝載在伺服器中時有效。該應用從伺服器卸載或者重新裝載,以及伺服器關閉等都會導致該對象失效。應用案例如網站統計訪問人數。
和屬性相關的方法:
Object getAttribute(String name)獲取指定的屬性
Enumerration getAttributeNames()獲取所有屬性組成的Enumeration對象
removeAttribute(String name)移除指定的屬性
setAttribute(String name, Object o)設置屬性
4.三大指令
(1)page:聲明頁面信息或導入內容
① 導入文件所需的jar包。外部添加的jar包一般存放在Web項目下 WEB-INF\lib、
<%@ page import="java.util.*"%>
② 關閉session,session預設打開。
<%@ pagesession="false" %>
③ 當前頁面出錯則跳轉到"file"頁面。並且該跳轉方式為請求轉發。
<%@ page errorPage="file"%>
④ 上文的"file"頁面,可以對頁面錯誤做處理或說明,可以配合exception對象使用。
<%@ page isErrorPage="true"%>
⑤ 當前JSP頁面的字元編碼(JSP文件編碼)
<%@ page pageEncoding="utf-8"%>
⑥ 當前JSP頁面的響應類型(伺服器發送給瀏覽器的內容編碼)
<%@ page contentType="text/html; charset=utf-8"%>
⑦ 是否使用EL表達式,通常為false
<%@ page isELInored="false" %>
⑧ 指定JSP頁面的信息,可以使用getServletInfo()方法獲取到該字元串
<%@page info="this JSP info" %>
(2)include指令:將其它文件包含進來與當前頁面進行合併。這類文件通常包括文本、JSP或其他格式的文件。
① 靜態引入:通知JSP引擎在翻譯JSP頁面時,將其他源文件合併到當前JSP頁面轉換成的Servlet源文件中。兩個源文件合併為一個Servlet源文件。"file"為相對路徑。
<%@ include page="file"%>
②動態引入:該句被執行時程式通過請求轉發跳轉到"file",執行當中的內容之後再返回執行當前頁面的剩餘部分,實際是兩個Servlet源文件。
<jsp:include page="file"></jsp:include>
(3) taglib: 能夠讓用戶根據需求自定義新的標簽,便於功能的實現,但因此也導致了代碼易讀性不高。
5.其它
(1) JSP表達式:可以直接將表達式中的內容顯示在瀏覽器中
<%= "Hello World!" %>
(2) 聲明函數
<%! pulic void function(){ out.println("Hello World!"); } %>
(3)註釋
<!-- 客戶端註釋,客戶端查看源可以看到 -->
<%-- 服務端註釋,客戶端查看不到 --%>