什麼是Java Server Pages?
JSP全稱Java Server Pages,是一種動態網頁開發技術。它使用JSP標籤在HTML網頁中插入Java代碼。標籤通常以<%開頭以%>結束。
JSP是一種Java servlet,主要用於實現Java web應用程序的用戶界面部分。網頁開發者們通過結合HTML代碼、XHTML代碼、XML元素以及嵌入JSP操作和命令來編寫JSP。
JSP通過網頁表單獲取用戶輸入數據、訪問數據庫及其他數據源,然後動態地創建網頁。
JSP標籤有多種功能,比如訪問數據庫、記錄用戶選擇信息、訪問JavaBeans組件等,還可以在不同的網頁中傳遞控制信息和共享信息。
JSP的優勢
與純 Servlet 相比:JSP可以很方便的編寫或者修改HTML網頁而不用去面對大量的println語句。
JSP的處理過程
- 就像其他普通的網頁一樣,您的瀏覽器發送一個 HTTP 請求給服務器。
- Web 服務器識別出這是一個對 JSP 網頁的請求,並且將該請求傳遞給 JSP 引擎。通過使用 URL或者 .jsp 文件來完成。
- JSP 引擎從磁盤中載入 JSP 文件,然後將它們轉化為 Servlet。這種轉化只是簡單地將所有模板文本改用 println() 語句,並且將所有的 JSP 元素轉化成 Java 代碼。
- JSP 引擎將 Servlet 編譯成可執行類,並且將原始請求傳遞給 Servlet 引擎。
- Web 服務器的某組件將會調用 Servlet 引擎,然後載入並執行 Servlet 類。在執行過程中,Servlet 產生 HTML 格式的輸出並將其內嵌於 HTTP response 中上交給 Web 服務器。
- Web 服務器以靜態 HTML 網頁的形式將 HTTP response 返回到您的瀏覽器中。
- 最終,Web 瀏覽器處理 HTTP response 中動態產生的HTML網頁,就好像在處理靜態網頁一樣。
一般情況下,JSP 引擎會檢查 JSP 文件對應的 Servlet 是否已經存在,並且檢查 JSP 文件的修改日期是否早於 Servlet。如果 JSP 文件的修改日期早於對應的 Servlet,那麼容器就可以確定 JSP 文件沒有被修改過並且 Servlet 有效。這使得整個流程與其他腳本語言(比如 PHP)相比要高效快捷一些。
JSP 生命週期
- 編譯階段
當瀏覽器請求JSP頁面時,JSP引擎會首先去檢查是否需要編譯這個文件。如果這個文件沒有被編譯過,或者在上次編譯後被更改過,則編譯這個JSP文件。
編譯的過程包括三個步驟:
解析JSP文件。
將JSP文件轉為servlet。
編譯servlet。
- 初始化階段
容器載入JSP文件後,它會在為請求提供任何服務前調用jspInit()方法。如果您需要執行自定義的JSP初始化任務,複寫jspInit()方法就行了
- JSP執行
這一階段描述了JSP生命週期中一切與請求相關的交互行為,直到被銷燬。當JSP網頁完成初始化後,JSP引擎將會調用_jspService()方法。_jspService()方法需要一個HttpServletRequest對象和一個HttpServletResponse對象作為它的參數 , _jspService()方法在每個request中被調用一次並且負責產生與之相對應的response,並且它還負責產生所有7個HTTP方法的迴應,比如GET、POST、DELETE等等。
- JSP銷燬
SP生命週期的銷燬階段描述了當一個JSP網頁從容器中被移除時所發生的一切。jspDestroy()方法在JSP中等價於servlet中的銷燬方法。當您需要執行任何清理工作時複寫jspDestroy()方法,比如釋放數據庫連接或者關閉文件夾等等。
JSP語法
- 腳本程序
<% 代碼片段 %>
- JSP聲明
一個聲明語句可以聲明一個或多個變量、方法,供後面的Java代碼使用。在JSP文件中,您必須先聲明這些變量和方法然後才能使用它們。
<%! int i = 0; %>
<%! int a, b, c; %>
<%! Circle a = new Circle(2.0); %>
- JSP表達式
一個JSP表達式中包含的腳本語言表達式,先被轉化成String,然後插入到表達式出現的地方。由於表達式的值會被轉化成String,所以您可以在一個文本行中使用表達式而不用去管它是否是HTML標籤。表達式元素中可以包含任何符合Java語言規範的表達式,但是不能使用分號來結束表達式。
今天的日期是: <%= (new java.util.Date()).toLocaleString()%>
- JSP註釋
JSP註釋主要有兩個作用:為代碼作註釋以及將某段代碼註釋掉。
<%-- 註釋 --%> JSP註釋,註釋內容不會被髮送至瀏覽器甚至不會被編譯
- JSP指令
JSP指令用來設置與整個JSP頁面相關的屬性。
<%@ page ... %> 定義頁面的依賴屬性,比如腳本語言、error頁面、緩存需求等等
<%@ include ... %> 包含其他文件
<%@ taglib ... %> 引入標籤庫的定義,可以是自定義標籤
JSP隱含對象
- request HttpServletRequest類的實例
- response HttpServletResponse類的實例
- out PrintWriter類的實例,用於把結果輸出至網頁上
- session HttpSession類的實例
- application ServletContext類的實例,與應用上下文有關
- config ServletConfig類的實例
- pageContext PageContext類的實例,提供對JSP頁面所有對象以及命名空間的訪問
- page 類似於Java類中的this關鍵字
- Exception Exception類的對象,代表發生錯誤的JSP頁面中對應的異常對象
JSTL和EL表達式的關係
JSTL是一個JSP標籤集合,它封裝了JSP應用的通用核心功能。
EL主要用於查找作用域中的數據,然後對它們執行簡單操作;它不是編程語言,甚至不是腳本編制語言。通常與 JSTL 標記一起作用,能用簡單而又方便的符號來表示複雜的行為。示例 : ${expr}
EL表達式能從哪些域對象中取值
常用的域對象有下面這些
- pageScope page 作用域
- requestScope request 作用域
- sessionScope session 作用域
- applicationScope application 作用域
JSP異常怎麼處理
- 在JSP頁面指定錯誤頁面
<%@ page errorPage="ShowError.jsp" %>
- 編寫錯誤頁面ShowError.jsp
<%@ page isErrorPage="true" %>
什麼是JSTL
JSP標準標籤庫(JSTL)是一個JSP標籤集合,它封裝了JSP應用的通用核心功能。
1. 核心標籤
2.格式化標籤
3.SQL 標籤
4.XML 標籤
5.JSTL 函數
使用步驟
第一步 : 導入JSTLjar依賴
第二步 : 在jsp頁面引入JSTL標籤庫 (對應上面5個功能,選擇引入)
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<%@ taglib prefix="sql" uri="http://java.sun.com/jsp/jstl/sql" %>
<%@ taglib prefix="x" uri="http://java.sun.com/jsp/jstl/xml" %>
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
本章中的相關題已經在51面試官(http://www.51mianshiguan.com)生成對應的配套刷題題庫,您可以百度搜索“51面試官”使用在線刷題系統進行模擬面試 。51面試官,更加關注IT行業求職面試 ! 提供千萬網友在線學習熱門編程語言,分享和收藏最新編程面試真題,在線刷題面試真題,是一站式服務面試複習準備和入門求職必備幫手。