細談JSP語法
- JSP語法
JSP語法屬於內嵌式在HTML中,但是它會轉成Servlet Class檔,但是編譯器如何知道
區分哪些是HTML語法,哪些是JSP語法。答案就是利用不同的標記去做辨識,基本
上web容器只認識 <% %>標籤內的語法並做轉換。以下會一一介紹這些語法的規範與
應用。
JSP常用的語法整理
區分哪些是HTML語法,哪些是JSP語法。答案就是利用不同的標記去做辨識,基本
上web容器只認識 <% %>標籤內的語法並做轉換。以下會一一介紹這些語法的規範與
應用。
JSP常用的語法整理
標記 | 說明 | 符號 |
註解 (Comment) |
說明程式用,編譯器不會載入其內容 | <%-- 註解 --%> |
宣告 (Declaration) |
宣告變數名稱或是方法 | <%! 宣告 %> |
指令 (Directive) |
載入JSP網頁之前需要使用載入的環境或是檔案 | <%@ 指令%> |
標記 (Scriptlet) |
程式語法 | <% 程式碼 %> |
運算式標記 (Expression) |
運算式支援變數運算 | <%=運算式%> |
- 註解:
<%-- 註解 --%>編譯器看到這種標記,它會自動過濾掉不做編譯的動作,也不會再使用者
端看到註解內容。
- 宣告:
一般在此宣告的方法會在整個類別層級,提供該整個類別去做使用
EX: <%! final String strHello="Hello,JSP">
- 指令
<%@ 指令 屬性="值" %>
EX :
<%@ page contentType="text/html;charset=ISO-8859-1" import="java." %>
<%@ page language="java" buffer="none" isThreadSafe="yes" errorPage="/error.jsp" %>
<%@ page contentType="text/html;charset=ISO-8859-1" import="java." %>
<%@ page language="java" buffer="none" isThreadSafe="yes" errorPage="/error.jsp" %>
屬性 | 說明 |
language | JSP主要還是已支援java語言為主 <% page language="java" %> |
extends | 使JSP可以繼承父類別的屬性或是方法 |
import | JSP頁面上載入所需要的jar檔,提供後面方法使用。 <%@ page import = "java.util.*" %> |
session | value="true|false"如果為true就是能夠使JSP讀取到implicit session物件,預設為true |
buffer | value="none|10kb"指定緩衝區的容量, |
autoFlush | value="true| false" ,如果為true緩衝區會自動的flush, |
isThreadSafe | value="true|false", |
errorPage | 當發生錯誤時,可以導向到另外一個頁面。 <%@ page errorPage="error/myerror.jsp" %> |
isErrorPage | value="true|false",當發生錯誤時,是否會導向到另外一個JSP頁面做處理。 |
contentType | value="text/html;charSet(網頁的字元集)=ISO-8859-1" |
(1) info
利用info可以記載JSP文件的相關訊息,例如作者、版本以及版權宣告等等。
Ex: <%@ page info = "The web page , Copyright 1982 by Kevi Flynn." %>
(2)contextType屬性
設定Http回應的內容MIME,常設定有"text/html"、"text/xml"、"text/plain"等等,
Ex: <%@ page contextType= "text/html; charset=ISO-8859-1 " %>
(3)pageEncoding
<%@ page pageEncoding="ISO-8859-1" %>
(4) extends
JSP轉譯為Servlet,希望該頁面可以繼承某個功能可以利用extends,如果使用HTTP協定需要實作javax.servlet.jsp.HttpJspPage介面,或是改用其他協定需要實作javax.servlet.jsp.JspPages介面
<%@ page extends="com.taglib.wdjsp.MyJspPage" %>
(5)import屬性
載入模組等於java import的敘述
Ex: <%@ page improt="java.util.list " %>
(6) buffer
控制緩衝區使用,緩衝區是可以保留前一個網頁的內容,不會因為錯誤或是意外而消失,建議使用<jsp:forward>或是errorPage屬性指定錯誤頁面時,都不要關閉緩衝區
<%@ page buffer="12Kb" %>
關閉緩衝處理: <%@ page buffer="none" %>
(7) autoFlush
當緩衝區已滿時,使否要將內容傳送出去頁面,預設為true,表示為送出頁面並清空。
<%@ page autoFlush = "true" %>
(8)isThreadSafe
是否可以安全處理多個用戶的請求,當你設定為false表示該JSP網頁不會讓多個執行緒去做處理,何時設為true或是false,當你連結資料庫,該頁面只可以被單一執行緒所去使用,所以該JSP頁面不可以同時處理多個要求,應將isThreadSafeˊ為false,但是若該資料連結可以做Connection Pooling時,表示後面的連結可以自動等待前面的回收後去做連結資料庫,所以isThreadSafeˊ為ture
- include
include指令用在我們可以載入其他檔案或是網頁(html、JSP),它在轉譯(translation
time)階段就會將檔案做載入的動作。
time)階段就會將檔案做載入的動作。
<%@ include file="header.html" %>
<%@ include file="header.jsp" %>
屬性 | 說明 |
file | 可以參考檔案或是URL做為載入的動作。 語法: file="檔案路徑" |
- taglib
taglib為標記函式庫(tag library),它可以讓網頁開發者可以自訂自己的標記,當然SUN
提供很標準的標記程式庫(JSTL,Java Standard Tag Library)。標記語法如下
<%@ taglib prefix="標記" uri="標記程式庫.tld" tagdir="標記目錄位址" %>
提供很標準的標記程式庫(JSTL,Java Standard Tag Library)。標記語法如下
<%@ taglib prefix="標記" uri="標記程式庫.tld" tagdir="標記目錄位址" %>
- 宣告變數
<%! private int x=0 , y=0; private ......%>
- JSP生命週期
執行JSP頁面 -> JSP容器初始化或是回收物件呼叫jspInit() -> 執行頁面 -> 回收JSP頁面jspDestory()
這裡需要知道jspInit()和jspDestory()方法,
補充: uri一制性辨識子用來載入標記程式庫,TLD為XML的格式,用來定義標記的的結構。
(4)標記
可以嵌入一般的java語法。
(5)運算式標記
運算式標記格式;<%=expression %>
運算式標記常用於顯示變數的值或是執行
隱含物件
隱含物件就是每個JSP的頁面,在web容器初始化時就會建立這些物件,所以不需要自行宣告,就可以使用。
物件名稱 | 類別或是介面 | 說明 |
---|---|---|
page | javax.servlet.jsp.HttpJspPage | 表示該物件將JSP頁面可以轉換為Servlet的執行個體 |
config | javax.servlet.ServletConfig | JSP頁面可以轉換為Servlet的執行個體,該物件得ServletConfig的物件 |
request | javax.servlet.http.HttpServletRequest | 用戶端的物件的請求 |
response | javax.servlet.http.HttpServletResponse | 表示伺服器端的回應 |
out | javax.servlet.jsp.JspWrite | 表示為輸出串流 |
session | javax.servlet.jsp.HttpSession | 表示為seesion物件 |
application | javax.servlet.ServletContext | 長存在Web應用程式中,可以給所有JSP共用 |
pageContext | javax.servlet.jsp.PageContext | JSP的共同關聯資料 |
exception | javax.lang.Throwable | 代表沒有被截取一長 |
(1)page 物件
留言
張貼留言