pre:下面所有的jsp標準文法都有對應的xml相容標籤表示方式。
jsp中的java代碼,jsp和servlet的對應關係
1、<%= Java Expression %>
eg:Current time:<%= new java.util.Date() %>
xml expression:<jsp:expression>Java Expression</jsp:expression>
jsp1.2及之後的版本中,只要程式設計者沒有在同一頁面中混合使用XML方式和標準的jsp方式(<%= ... %>),就要求伺服器支援這種文法。
2、<% Java Code %>
eg:<%
String queryData ="";
if(){}else{}
%>
xml expression : <jsp:scriptlet>Java Code</jsp:scriptlet>
3、<%! Filed or Method Definition %>
xml expression:<jsp:declaration> Filed or Method</jsp:decalration>
4、jsp/servlet對應關係
上面的1、2都會被加進編譯產生的servlet類中的_jspService方法,而這個方法總會北service方法調用。
而3會獨立出來編程servlet的屬性或方法。
Tomcat下jsp編譯後的servlet可在tomdir/work/localhost目錄中查看。
jsp page指令:控制所產生的servlet的結構
<%@ page import="java.util.*,java.logging.*" %> 匯入jsp變為servlet時應該匯入的包。
<%@ page contentType="MIME-Type; cahrset = Character-Set" %> 和 <% response.setContentType("application/vnd.ms-execel"); %>作用相同。
jsp頁面預設的MIME類型是text/html(預設字元集是ISO-8859-1)
如果只想更改字元集,可以使用<%@ page pageEncoding="Shift_JIS" %>
<%@ page session="true" %><%-- Default --%>
屬性控制頁面是否參與HTTP會話。
還有其他屬性:
isELlgnored屬性:忽略(true)JSP 2.0 運算式語言(EL),還是進行正常的求值。
buffer屬性指定out變數(類型為JspWriter)使用的緩衝區大小。伺服器實際使用的緩衝區>=給定的值
<%@ page buffer="32kb" %> 表示緩衝到32KB,頁面完成或明確對輸出執行清空(如使用response.flushBuffer),否則不降文檔發送給客戶。如果緩衝區禁用,要求設定包頭或狀態碼的jsp元素出現在檔案的頂部,如果每一句輸出的回應時間過長,禁用緩衝區會使客戶更快看到部分結果。buffer="none"表示禁用。
autoFlush屬性:控制當緩衝區充滿後,是應該自動清空輸出(預設true),還是溢出之後拋出一個異常。、
info屬性,在servlet中通過getServletInfo方法擷取的字串。
erroePage屬性用來指定頁面專用的錯誤頁面,如果要為整個web制定錯誤頁面或者為不同類型的錯誤制定錯誤頁面,需要使用web.xml中的error-page元素。
eg:
ComputeSpeed.jps:
……
<%@ page errorPage="/WEB-INF/SpeedErrors.jsp" %>
……
SpeedErrors.jsp
……
<%@ page isErrorPage="true"%><%-- Default:false --%>
……
<%= exception %>
……
<% exception.printStackTrace(new PrintWriter(out)); %>
……
isThreadSafe屬性:
jsp:page的isThreadSafe屬性和servlet的SingleThreadModel介面一樣,不推薦使用,應該使用顯式的同步措施。
extends屬性指定jsp頁面所產生的servlet的超類。一般用不到。
language屬性制定頁面使用的指令碼語言
jsp:page的xml相容文法:
<jsp:directive.directiveType attribute="value" />