jsp簡介
Jsp(Java Server Page)是由Sun Microsystems公司倡導和許多公司參與共同創建的一種使軟件開發者可以響應客戶端請求,而動態生成HTML、XML或其他格式文檔的Web網頁的技術標準。
JSP技術是以Java語言作爲腳本語言的,JSP網頁爲整個服務器端的Java庫單元提供了一個接口來服務於HTTP的應用程序。
JSP文件後綴名爲(*.jsp)。
JSP開發的WEB應用可以跨平臺使用,既可以運行在Linux上也能運行在Window上。
簡單來說jsp就是Java代碼與前端的結合體
jsp的生命週期
編譯階段:
Servelet容器編譯Servelet源文件,生成servelet類
初始化階段:
加載與JSP對應的Servelet類,創建其實例,並調用它的初始化方法
執行階段:
調用與JSP對應的Servelet實例的服務方法
銷燬階段:
調用與JSP對應的Servelet實例的銷燬方法,然後銷燬Servelet實例
編譯過程中,當第一次訪問jsp頁面時,會向servlet容器(tomcat)發送請求,servlet容器先將index.jsp轉換成index_jsp.java文件,即一個servlet,再編譯成index_jsp.class文件進行調用。第二次訪問時,即可跳過轉換和編譯過程直接調用。
可進入CATALINA_BASE
C:\Users\Administrator.IntelliJIdea2019.1\system\tomcat\Tomcat_9_0_24_webProject(項目名)
的
\work\Catalina\localhost\webProject_war_exploded\org\apache\jsp
查看.java與.class文件
所以某種意義上jsp就是servlet
jsp語法
代碼片段
<% %>存放Java代碼片段,等價於XML語句
<jsp:scriptlet></jsp:scriptlet>
jsp表達式
<%= %>存放Java表達式,等價於XML語句
<jsp:expression></jsp:expression>
jsp聲明
<%! %>存放聲明
<jsp:declaration></jsp:declaration>
jsp註釋
語法 | 描述 |
---|---|
<%-- 代碼 --%> | JSP註釋,註釋內容不會被髮送至瀏覽器甚至不會被編譯 |
<! – --> | HTML註釋,通過瀏覽器查看網頁源代碼時可以看見註釋內容 |
// | 註釋單行Java代碼 |
/* */ | Java代碼多行註釋 |
jsp指令
指令 | 描述 |
---|---|
<%@ page … %> | 定義網頁依賴屬性,比如腳本語言、error頁面、緩存需求等等 |
<%@ include … %> | 包含其他文件 |
<%@ taglib … %> | 引入標籤庫的定義 |
page指令:
Page指令的語法格式:
<%@ page attribute=“value” %>
等價於XML語句
<jsp:directive.page attribute=“value” />
屬性 | 描述 |
---|---|
buffer | 指定out對象使用緩衝區的大小 |
autoFlush | 控制out對象的 緩存區 |
contentType | 指定當前JSP頁面的MIME類型和字符編碼 |
errorPage | 指定當JSP頁面發生異常時需要轉向的錯誤處理頁面 |
isErrorPage | 指定當前頁面是否可以作爲另一個JSP頁面的錯誤處理頁面 |
extends | 指定servlet從哪一個類繼承 |
import | 導入要使用的Java類 |
info | 定義JSP頁面的描述信息 |
isThreadSafe | 指定對JSP頁面的訪問是否爲線程安全 |
language | 定義JSP頁面所用的腳本語言,默認是Java |
session | 指定JSP頁面是否使用session |
isELIgnored | 指定是否執行EL表達式 |
isScriptingEnabled | 確定腳本元素能否被使用 |
include指令
指定包含頁面與當前頁面同時編譯
語法格式:
<%@ include file=“relative url” >
Include指令中的文件名實際上是一個相對的URL。如果您沒有給文件關聯一個路徑,JSP編譯器默認在當前路徑下尋找。
等價的XML語法:
<jsp:directive.include file=“relative url” />
Taglib指令
JSP API允許用戶自定義標籤,一個自定義標籤庫就是自定義標籤的集合。
Taglib指令引入一個自定義標籤集合的定義,包括庫路徑、自定義標籤。
Taglib指令的語法:
<%@ taglib uri=“uri” prefix=“c” >
uri屬性確定標籤庫的位置,prefix屬性指定標籤庫的前綴。
等價的XML語法:
<jsp:directive.taglib uri=“uri” prefix=“c” />
jsp動作元素
使用XML語法編寫
即:<jsp:include page=“index.jsp”></jsp:include>
語法 | 描述 |
---|---|
jsp:include | 在頁面被請求的時候引入一個文件 |
jsp:useBean | 尋找或者實例化一個JavaBean |
jsp:setProperty | 設置JavaBean的屬性 |
jsp:getProperty | 輸出某個JavaBean的屬性 |
jsp:forward | 把請求轉到一個新的頁面 |
jsp:plugin | 根據瀏覽器類型爲Java插件生成OBJECT或EMBED標記 |
jsp:element | 定義動態XML元素 |
jsp:attribute | 設置動態定義的XML元素屬性 |
jsp:body | 設置動態定義的XML元素內容 |
jsp:text | 在JSP頁面和文檔中使用寫入文本的模板 |
常用屬性:
jsp:include
page:指定包含在當前頁面的url
jsp:useBean
class:bean的完整包名
id/beanName:指定的bean的名字
scope:規定作用域
jsp:setProperty(寫在<jsp:useBean ></jsp:usebean>內)
name:要設置的bean的名字
property:要設置的屬性
value:要設置的屬性的值
jsp:getProperty
name:要獲取的bean的名字
property:要獲取的屬性
jsp:forward
page:指定要跳轉頁面的url
jsp九大內置對象
JSP隱含對象是JSP容器爲每個頁面提供的Java對象,開發者可以直接使用它們而不用顯式聲明。JSP隱含對象也被稱爲預定義變量。
JSP所支持的九大隱含對象:
對象 | 描述 |
---|---|
request | HttpServletRequest類的實例。每當客戶端請求一個JSP頁面時,JSP引擎就會製造一個新的request對象來代表這個請求。request對象提供了一系列方法來獲取HTTP頭信息,cookies,HTTP方法等等。 |
response | HttpServletResponse類的實例。當服務器創建request對象時會同時創建用於響應這個客戶端的response對象。response對象也定義了處理HTTP頭模塊的接口。通過這個對象,開發者們可以添加新的cookies,時間戳,HTTP狀態碼等等。 |
out | PrintWriter類的實例,用於把結果輸出至網頁上。 |
session | HttpSession類的實例。和Java Servlets中的session對象有一樣的行爲。session對象用來跟蹤在各個客戶端請求間的會話。 |
application | application對象直接包裝了servlet的ServletContext類的對象,是javax.servlet.ServletContext 類的實例。這個對象在JSP頁面的整個生命週期中都代表着這個JSP頁面。這個對象在JSP頁面初始化時被創建,隨着jspDestroy()方法的調用而被移除。通過向application中添加屬性,則所有組成web應用的JSP文件都能訪問到這些屬性。 |
config | config對象是 javax.servlet.ServletConfig 類的實例,直接包裝了servlet的ServletConfig類的對象。這個對象允許開發者訪問Servlet或者JSP引擎的初始化參數,比如文件路徑等。(不常用) |
pageContext | PageContext類的實例。這個對象主要用來訪問頁面信息,同時過濾掉大部分實現細節。這個對象存儲了request對象和response對象的引用。application對象,config對象,session對象,out對象可以通過訪問這個對象的屬性來導出。pageContext對象也包含了傳給JSP頁面的指令信息,包括緩存信息,ErrorPage URL,頁面scope等。PageContext類定義了一些字段,包括PAGE_SCOPE,REQUEST_SCOPE,SESSION_SCOPE, APPLICATION_SCOPE。它也提供了40餘種方法,有一半繼承自javax.servlet.jsp.JspContext 類。 |
page | 它可以被看做是整個JSP頁面的代表,類似於Java類中的this關鍵字 |
Exception | Exception類的對象,代表發生錯誤的JSP頁面中對應的異常對象 |
EL表達式
它提供了在 JSP 中簡化表達式的方法,讓Jsp的代碼更加簡化。
語法
所有EL表達式的格式都是以“${}”表示。例如,${userinfo}代表獲取變量userinfo的值。當EL表達式中的變量不給定範圍時,則默認在page範圍查找,然後依次在request、session、application範圍查找。也可以用範圍作爲前綴表示屬於哪個範圍的變量,例如:${ pageScope. userinfo}表示訪問page範圍中的userinfo變量。
JSTL標準標籤庫
JSP標準標籤庫(JSTL)是一個JSP標籤集合,它封裝了JSP應用的通用核心功能。
JSTL支持通用的、結構化的任務,比如迭代,條件判斷,XML文檔操作,國際化標籤,SQL標籤。 除了這些,它還提供了一個框架來使用集成JSTL的自定義標籤。
根據JSTL標籤所提供的功能,可以將其分爲5個類別。
核心標籤
格式化標籤
SQL 標籤
XML 標籤
JSTL 函數
使用JSTL標籤庫之前,首先需要下載並導入standard.jar和jstl.jar兩個jar包
核心標籤是最常用的JSTL標籤。引用核心標籤庫的語法如下:
<%@ taglib prefix=“c” uri=“http://java.sun.com/jsp/jstl/core” %>
標籤 | 描述 |
---|---|
<c:out> | 用於在JSP中顯示數據,就像<%= … > |
<c:set> | 用於保存數據 |
<c:remove> | 用於刪除數據 |
<c:catch> | 用來處理產生錯誤的異常狀況,並且將錯誤信息儲存起來 |
<c:if> | 與我們在一般程序中用的if一樣 |
<c:choose> | 本身只當做<c:when>和<c:otherwise>的父標籤 |
<c:when> | <c:choose>的子標籤,用來判斷條件是否成立 |
<c:otherwise> | <c:choose>的子標籤,接在<c:when>標籤後,當<c:when>標籤判斷爲false時被執行 |
<c:import> | 檢索一個絕對或相對 URL,然後將其內容暴露給頁面 |
<c:forEach> | 基礎迭代標籤,接受多種集合類型 |
<c:forTokens> | 根據指定的分隔符來分隔內容並迭代輸出 |
<c:param> | 用來給包含或重定向的頁面傳遞參數 |
<c:redirect> | 重定向至一個新的URL |
<c:url> | 使用可選的查詢參數來創造一個URL |
可使用以下代碼在當前頁面實現百度搜索value內的內容:
<c:url value=“http://baidu.com/s” var=“u”>
<c:param name=“wd” value=“123”></c:param>
</c:url>