jsp基礎知識 jsp指令 jsp9大內置對象 jstl表達式

JSP

1,JSP的生命週期
理解JSP底層功能的關鍵就是去理解它們所遵守的生命週期。

JSP生命週期就是從創建到銷燬的整個過程,類似於servlet生命週期,區別在於JSP生命週期還包括將JSP文件編譯成servlet。

以下是JSP生命週期中所走過的幾個階段:

 

1,編譯階段:

servlet容器編譯servlet源文件,生成servlet類

當瀏覽器請求JSP頁面時,JSP引擎會首先去檢查是否需要編譯這個文件。如果這個文件沒有被編譯過,或者在上次編譯後被更改過,則編譯這個JSP文件。

編譯的過程包括三個步驟:

1,解析JSP文件。

2,將JSP文件轉爲servlet。

3,編譯servlet。

 

2,初始化階段:

加載與JSP對應的servlet類,創建其實例,並調用它的初始化方法

容器載入JSP文件後,它會在爲請求提供任何服務前調用jspInit()方法。如果您需要執行自定義的JSP初始化任務,複寫jspInit()方法就行了,就像下面這樣:

public void jspInit(){

  // 初始化代碼

}

一般來講程序只初始化一次,servlet也是如此。通常情況下您可以在jspInit()方法中初始化數據庫連接、打開文件和創建查詢表。

 

3,執行階段:

調用與JSP對應的servlet實例的服務方法

這一階段描述了JSP生命週期中一切與請求相關的交互行爲,直到被銷燬。

當JSP網頁完成初始化後,JSP引擎將會調用_jspService()方法。

_jspService()方法需要一個HttpServletRequest對象和一個HttpServletResponse對象作爲它的參數,就像下面這樣:

void _jspService(HttpServletRequest request,

                 HttpServletResponse response){

   //服務端處理代碼}

_jspService()方法在每個request中被調用一次並且負責產生與之相對應的response,並且它還負責產生所有7個HTTP方法的迴應,比如GET、POST、DELETE等等。

 

4,銷燬階段:

調用與JSP對應的servlet實例的銷燬方法,然後銷燬servlet實例

JSP生命週期的銷燬階段描述了當一個JSP網頁從容器中被移除時所發生的一切。

jspDestroy()方法在JSP中等價於servlet中的銷燬方法。當您需要執行任何清理工作時複寫jspDestroy()方法,比如釋放數據庫連接或者關閉文件夾等等。

jspDestroy()方法的格式如下:

public void jspDestroy(){

   //清理代碼

}

import com.alibaba.fastjson.JSON;

很明顯,JSP生命週期的四個主要階段和servlet生命週期非常相似,下面給出圖示:

2,JSP指令

JSP指令用來設置與整個JSP頁面相關的屬性。

JSP指令語法格式:

<%@ directiveattribute="value" %>

指令

描述

<%@ page ... %>

定義頁面的依賴屬性,比如腳本語言、error頁面、緩存需求等等

<%@ include ... %>

包含其他文件

<%@ taglib ... %>

引入標籤庫的定義,可以是自定義標籤

Include指令

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

Include指令的語法格式如下:

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

include 指令中的文件名實際上是一個相對的 URL 地址。

如果您沒有給文件關聯一個路徑,JSP編譯器默認在當前路徑下尋找。

等價的XML語法:

<jsp:directive.include file="文件相對 url 地址"/>


Taglib指令

JSP API允許用戶自定義標籤,一個自定義標籤庫就是自定義標籤的集合。

Taglib指令引入一個自定義標籤集合的定義,包括庫路徑、自定義標籤。

Taglib指令的語法:

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

uri屬性確定標籤庫的位置,prefix屬性指定標籤庫的前綴。

等價的XML語法:

<jsp:directive.tagliburi="uri" prefix="prefixOfTag" />

 

3,JSP行爲

JSP行爲標籤使用XML語法結構來控制servlet引擎。它能夠動態插入一個文件,重用JavaBean組件,引導用戶去另一個頁面,爲Java插件產生相關的HTML等等。

行爲標籤只有一種語法格式,它嚴格遵守XML標準:

<jsp:action_nameattribute="value" />

語法

描述

jsp:include

用於在當前頁面中包含靜態或動態資源

jsp:useBean

尋找和初始化一個JavaBean組件

jsp:setProperty

設置 JavaBean組件的值

jsp:getProperty

將 JavaBean組件的值插入到 output中

jsp:forward

從一個JSP文件向另一個文件傳遞一個包含用戶請求的request對象

jsp:plugin

用於在生成的HTML頁面中包含Applet和JavaBean對象

jsp:element

動態創建一個XML元素

jsp:attribute

定義動態創建的XML元素的屬性

jsp:body

定義動態創建的XML元素的主體

jsp:text

用於封裝模板數據

 

4,JSP隱含對象

JSP支持九個自動定義的變量,江湖人稱隱含對象。這九個隱含對象的簡介見下表:

request

HttpServletRequest類的實例

response

HttpServletResponse類的實例

out

PrintWriter類的實例,用於把結果輸出至網頁上

session

HttpSession類的實例

application

ServletContext類的實例,與應用上下文有關

config

ServletConfig類的實例

pageContext

PageContext類的實例,提供對JSP頁面所有對象以及命名空間的訪問

page

類似於Java類中的this關鍵字

Exception

Exception類的對象,代表發生錯誤的JSP頁面中對應的異常對象

 

JSTL表達式

核心標籤是最常用的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

<c:choose>, <c:when>, <c:otherwise> 標籤

<c:choose>

   <c:when test="<boolean>"/>

       ...

    </c:when>

   <c:when test="<boolean>"/>

       ...

   </c:when>

   ...

   ...

   <c:otherwise>

       ...

   </c:otherwise>

</c:choose>

例子:

<%@ page language="java"contentType="text/html; charset=UTF-8"

pageEncoding="UTF-8"%><%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>

<html>

<head><title>c:choose標籤實例</title></head>

<body>

<c:setvar="salary" scope="session"value="${2000*2}"/><p>你的工資爲 : <c:outvalue="${salary}"/></p><c:choose>

   <c:when test="${salary <= 0}">

      太慘了。

    </c:when>

   <c:when test="${salary > 1000}">

      不錯的薪水,還能生活。

   </c:when>

   <c:otherwise>

       什麼都沒有。

</c:otherwise></c:choose>

</body>

</html>

 

<c:if> 標籤

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%><%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %><html><head><title>c:if 標籤實例</title></head><body><c:setvar="salary"scope="session"value="${2000*2}"/><c:iftest="${salary > 2000}">
   <p>我的工資爲: <c:outvalue="${salary}"/><p></c:if></body></html>

 

<c:forEach>, <c:forTokens> 標籤

<c:forEach>標籤是更加通用的標籤,因爲它迭代一個集合中的對象。

<c:forTokens>標籤通過指定分隔符將字符串分隔爲一個數組然後迭代它們。

屬性

描述

是否必要

默認值

items

要被循環的信息

begin

開始的元素(0=第一個元素,1=第二個元素)

0

end

最後一個元素(0=第一個元素,1=第二個元素)

Last element

step

每一次迭代的步長

1

var

代表當前條目的變量名稱

varStatus

代表循環狀態的變量名稱

 

forEach 語法格式

<c:forEach

   items="<object>"

   begin="<int>"

   end="<int>"

   step="<int>"

   var="<string>"

   varStatus="<string>">

 

    <%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%><%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %><html><head><title>c:forEach 標籤實例</title></head><body><c:forEachvar="i"begin="1"end="5">
   Item <c:outvalue="${i}"/><p></c:forEach></body></html>

 

forTokens 語法格式

<c:forTokens

   items="<string>"

   delims="<string>"

   begin="<int>"

   end="<int>"

   step="<int>"

   var="<string>"

   varStatus="<string>">

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%><%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %><html><head><title>c:forTokens 標籤實例</title></head><body><c:forTokensitems="google,baidu,taobao"delims=","var="name">
   <c:outvalue="${name}"/><p></c:forTokens></body></html>

 

<c:url> 標籤 <c:param> 標籤

<c:param>標籤用於在<c:url>標籤中指定參數,而且與URL編碼相關。

在<c:param>標籤內,name屬性表明參數的名稱,value屬性表明參數的值。

 

<%@ page language="java"contentType="text/html; charset=UTF-8"

   pageEncoding="UTF-8"%>

<%@ tagliburi="http://java.sun.com/jsp/jstl/core" prefix="c" %>

<html>

<head>

<title>c:forTokens 標籤實例</title>

</head>

<body>

       <h1>&lt;c:param&gt;實例</h1>

       <c:urlvar="myURL" value="main.jsp">

              <c:paramname="name" value="baidu"/>

              <c:paramname="url" value="www.baidu.com"/>

       </c:url>

     <a href="/<c:out value="${myURL}"/>">

 使用&lt;c:param&gt; 爲指定URL發送兩個參數。</a>

</body>

</html>

 

格式化標籤JSTL格式化標籤用來格式化並輸出文本、日期、時間、數字。

導入庫

<%@ taglib prefix="fmt"
           uri="http://java.sun.com/jsp/jstl/fmt" %>

標籤

描述

<fmt:formatNumber>

使用指定的格式或精度格式化數字

<fmt:parseNumber>

解析一個代表着數字,貨幣或百分比的字符串

<fmt:formatDate>

使用指定的風格或模式格式化日期和時間

<fmt:parseDate>

解析一個代表着日期或時間的字符串

<fmt:bundle>

綁定資源

<fmt:setLocale>

指定地區

<fmt:setBundle>

綁定資源

<fmt:timeZone>

指定時區

<fmt:setTimeZone>

指定時區

<fmt:message>

顯示資源配置文件信息

<fmt:requestEncoding>

設置request的字符編碼

 

<fmt:formatNumber>標籤

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%><%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %><%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<html><head>
  <title>JSTL fmt:formatNumber 標籤</title></head><body><h3>數字格式化:</h3><c:setvar="balance"value="120000.2309"/><p>格式化數字 (1): <fmt:formatNumbervalue="${balance}"
            type="currency"/></p><p>格式化數字 (2): <fmt:formatNumbertype="number"
            maxIntegerDigits="3"value="${balance}"/></p><p>格式化數字 (3): <fmt:formatNumbertype="number"
            maxFractionDigits="3"value="${balance}"/></p><p>格式化數字 (4): <fmt:formatNumbertype="number"
            groupingUsed="false"value="${balance}"/></p><p>格式化數字 (5): <fmt:formatNumbertype="percent"
            maxIntegerDigits="3"value="${balance}"/></p><p>格式化數字 (6): <fmt:formatNumbertype="percent"
            minFractionDigits="10"value="${balance}"/></p><p>格式化數字 (7): <fmt:formatNumbertype="percent"
            maxIntegerDigits="3"value="${balance}"/></p><p>格式化數字 (8): <fmt:formatNumbertype="number"
            pattern="###.###E0"value="${balance}"/></p><p>美元 :<fmt:setLocalevalue="en_US"/><fmt:formatNumbervalue="${balance}"type="currency"/></p></body></html>

 

=

 

屬性

描述

是否必要

默認值

value

要顯示的數字

type

NUMBER,CURRENCY,或 PERCENT類型

Number

pattern

指定一個自定義的格式化模式用與輸出

currencyCode

貨幣碼(當type="currency"時)

取決於默認區域

currencySymbol

貨幣符號 (當 type="currency"時)

取決於默認區域

groupingUsed

是否對數字分組 (TRUE 或 FALSE)

true

maxIntegerDigits

整型數最大的位數

minIntegerDigits

整型數最小的位數

maxFractionDigits

小數點後最大的位數

minFractionDigits

小數點後最小的位數

var

存儲格式化數字的變量

Print to page

scope

var屬性的作用域

page

Pattern屬性:

符號

描述

0

代表一位數字

E

使用指數格式

#

代表一位數字,若沒有則顯示0

.

小數點

,

數字分組分隔符

;

分隔格式

-

使用默認負數前綴

%

百分數

?

千分數

¤

貨幣符號,使用實際的貨幣符號代替

X

指定可以作爲前綴或後綴的字符

'

在前綴或後綴中引用特殊字符

 

JSP十一個用於EL表達式的隱含(內置)對象:

Implicit Objects for EL
Expressions
用於EL表達式的隱含對象

Type
類型

Description
具體說明

pageContext

javax.servlet.jsp.PageContext

The context for the JSP page. Provides access to various objects, including servletContext, session, request, and response.

pageScope

java.util.Map

Maps page-scoped variable names to their values.

requestScope

java.util.Map

Maps request-scoped variable names to their values.

sessionScope

java.util.Map

Maps session-scoped variable names to their values.

applicationScope

java.util.Map

Maps application-scoped variable names to their values.

param

java.util.Map

Maps a request parameter to a single String parameter value (obtained by calling ServletReqwuest.getParameter(String name)).

paramValues

java.util.Map

Maps a request parameter name to an array of String values for that parameter name (obtained by calling ServletRequest.getParameterValues(String name)).

header

java.util.Map

Maps a request header name to a single String header value (obtained by calling ServletRequest.getHeader(String name)).

headerValues

java.util.Map

Maps a request header name to an array of String values for that header (obtained by calling ServletRequest.getHeaders(String)).

coookie

java.util.Map

Maps a cookie name to a single Cookie object. Cookies are retrieved according to the semantics of HttpServletRequest.getCookies(). If the same name is shared by multiple cookies, an implementation must use the first one encountered in the array of Cookie objects returned by the getCookies() method. However, the ordering of cookies is currently unsspecified in the Servlet specification.

initParam

java.util.Map

Maps a context initialization parameter name to a String parameter value (obtained by calling ServletContext.getInitparameter(String name)).

 

發佈了36 篇原創文章 · 獲贊 34 · 訪問量 6萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章