JSP簡介
JSP由傳統的網頁HTML文件(*.htm、*.html)中插入Java程序段(Scriptlet)和JSP標記(tag)組成。
在JSP中大部分都是由腳本小程序組成,所謂的腳本小程序就是裏面包含了JAVA代碼。Scriptlet共分爲三種:
- <%%>:定義局部變量,編寫語句
- <%!%>:定義全局變量,可以編寫類和方法
- <%=%>:表達式輸出,專門輸出變量或一個具體值 類似於out.println
JSP工作原理
客戶端通過瀏覽器路徑發送一個請求,服務器接收到請求,轉發或重定向到一個JSP頁面。 這個JSP文件是第一次被請求,這時JSP引擎(特殊的Servlet)的操作是:
首先,把將這個JSP文件轉換成一個Java類。如果在轉換過程中出現異常,轉換過程會被中斷,並向服務器和客戶端輸出錯誤信息;如果轉換成功,JSP引擎通過JVM把該Java類編譯成相應的.class文件。
其次,創建一個Servlet實例,調用該實例的jspInit()方法,此方法在Servlet的整個生命週期中只執行一次。
然後,創建並啓動一個新的線程,新線程調用Servlet實例的jspService方法。(對於每一個請求,JSP引擎都會創建一個新的線程來處理該請求;如果有多個客戶端同時請求該JSP文件,則JSP引擎會創建多個線程,每個客戶端請求對應一個線程)。
再然後,瀏覽器調用JSP文件時,Servlet容器會把瀏覽器的請求和對瀏覽器的響應封裝成HttpServletRequest和HttpServletResponse對象,同時調用對應的Servlet實例中jspService()方法,把這兩個對象作爲參數傳遞給jspService()。
最後,jspService()方法執行後將HTML內容返回給客戶端。
注意:
如果JSP文件被修改了,服務器將根據設置決定是否對該文件進行重新編譯。如果需要重新編譯,則將編譯結果取代內存中的Servlet,並繼續上述處理過程。 如果在任何時候由於系統資源不足,JSP引擎將以某種不確定的方式將Servlet從內存中移去。當這種情況發生時,jspDestroy()方法首先被調用, 然後Servlet實例便被標記加入“垃圾收集”處理。
參考:http://www.cnblogs.com/mlloc-clove/p/3549777.html
存放路徑
存放在在tomcat的work文件夾下
D:\tomcat\apache-tomcat-9.0.0.M10\work
D:\tomcat\apache-tomcat-9.0.0.M10\work\Catalina\localhost\a51\org\apache\jsp
九大內置對象
內置對象 | 類型 | 描述 | 常用語法 |
---|---|---|---|
pageContext | javax.servlet.jsp.PageContext | 頁面上下文對象 | 類似於域對象 |
request | javax.servlet.ServletRequest | 請求對象 | 與servelet中的用法相同 |
response | javax.servlet.ServletResponse | 響應對象 | 與servelet中的用法相同 |
session | javax.servlet.http.HttpSession | 會話對象 | 與servelet中的用法相同 |
application | javax.servlet.ServletContext | 應用程序對象 | 與servlet中的ServletContext用法相同 |
out | javax.servlet.jsp.JspWriter | 輸出對象 | out.println(String str);類似於<%= %> |
config | javax.servlet.ServletConfig | 配置對象 | 與servlet中的ServletConfig用法相同 |
page | java.lang.Object | 頁面對象 | 代表當前頁面,沒有常用方法 |
exception | java.lang.Throeable | 例外對象 | 設置errorPage屬性,跳轉到錯誤頁
在錯誤頁設置isErrorPage爲true
<%@ page isErrorPage=”true” %>
纔可使用該內置對象 常用方法: exception.getMessage(); |
四個作用域
作用域對象 | 作用域 | 有效範圍 |
---|---|---|
pageContext | page | 當前JSP頁面 |
request | request | 當前請求週期 |
session | session | 當前會話 |
application | application | 整個應用 |
補充
- 在jspInit()中可以進行一些初始化工作,如建立與數據庫的連接、建立網絡連接、從配置文件中獲取一些參數等,而在jspDestory()中釋放相應的資源。
- HTML代碼錯誤的情況:正常翻譯成java源代碼
Java代碼編譯時錯誤的情況:正常翻譯成Java源代碼,執行時報500錯誤
Java代碼運行時錯誤的情況:正常翻譯成Java源代碼,執行時報500錯誤