C.1 JSP概述
當一個JSP頁面第一次被請求時惶傻,容器會生成一個java類挖胃。該類實現(xiàn)JspPage或其子接口HttpJspPage辽剧。而JspPage是javax.servlet.Servlet的子接口族淮。所以每一個JSP頁面實現(xiàn)類都是一個servlet椭迎。
C.2 注釋
<%-- --%> JSP注釋
<!-- --> HTML注釋
C.3 內(nèi)置對象
這些對象不用實例化彰阴,直接就可以使用瘾敢。
request -- javax.servlet.http.HttpServletRequest
response -- HttpServletResponse
out -- javax.servlet.jsp.JspWriter (功能上和Response.get)
session -- javax.servlet.http.HttpSession
application -- javax.servlet.ServletContext
config -- javax.servlet.ServletConfig
pageContext -- javax.servlet.jsp.PageContext
page -- javax.servlet.jsp.HttpJspPage
exception -- java.lang.Throwable
一些方法:
//獲取request中header名字集合,可用Enumeration<String>接收
request.getHeaderNames()
//獲取header參數(shù)的具體值
request.getHeader(String header)
response.getBufferSize()
session.getId()
config.getServletName()
application.getServletInfo()
C.4 指令
指令知識JSP轉(zhuǎn)換器如何翻譯JSP頁面為Servlet尿这,其中最重要的是page和include指令簇抵。
C.4.1 page指令
語法格式:
<%@ page attribute1="value1" attribute2="value2" ...%>
page屬性列表:
- import 導入java類
- session 是否加入會話管理
- buffer 定義out的緩沖大小
- autoFlush 為True表示緩沖區(qū)滿時自動寫入輸出流
- isThreadSafe 線程安全級別,不推薦使用
- info
- errorPage 定義錯誤處理頁面
- isErrorPage 標識本頁是一個錯誤處理頁面
- language 值為java
C.4.2 include指令
<%@ include file="url"%>
JSP轉(zhuǎn)換器處理include指令時射众,將指令替換為指令所包含文件的內(nèi)容正压。
.jspf文件、html文件等常被include
C.5腳本元素
一個腳本程序是以<%開始以%>結(jié)束的java代碼塊责球。
定義在一個腳本的變量焦履,可以在后續(xù)的腳本程序中使用。
C.5.1 表達式
以<%=開始雏逾,以%>結(jié)束嘉裤。會被jsp容器執(zhí)行。實際上會用out對象打印出結(jié)果栖博。
如:
Today is <%=java.util.Calendar.getInstance().getTime()%>
無需分號結(jié)尾.
C.5.2 聲明
聲明在JSP頁面中使用的方法和變量屑宠。以<%!開始,并以%>結(jié)束仇让。
(聲明方法是包括方法體的)
可以通過聲明來重寫類的(JSP頁面生成的servlet類)init和destroy方法典奉。
<%!
public void jspInit(){
System.out.println("index.jsp jspInit...");
}
public void jspDestroy(){
System.out.println("index.jsp jspDestroy...");
}
%>
C.5.3 禁用腳本元素
“隨著JSP 2.0對表達式語言的加強,推薦的實踐是:在JSP頁面中用EL訪問服務器端對象且不寫JAVA代碼丧叽∥谰粒”(?)
<jsp-property-group>
<url-pattern>*.jsp</url-pattern>
<scripting-invalid>true</scripting-invalid >
</jsp-property-group>
C.6 動作
useBean\setProperty\getProperty
<jsp:useBean id="employee" class="entity.Employee"></jsp:useBean>
<jsp:setProperty property="firstName" name="employee" value="chen"/>
first name:<jsp:getProperty property="firstName" name="employee"/>
include動作與include指令的區(qū)別:
對于include指令,資源引入發(fā)生在頁面轉(zhuǎn)換時踊淳,即當JSP容器轉(zhuǎn)換頁面生成Servlet時假瞬。
而include動作,資源引入發(fā)生在請求頁面時,故可以傳遞參數(shù)脱茉。
還有其他……未完善
forward動作
轉(zhuǎn)向其他資源:
<jsp:forward page="useBeanTest.jsp">
<jsp:param name="" value=""/>
</jsp:forward>
C.7 錯誤處理
可將一個JSP頁面定義為錯誤處理頁面剪芥,只需設(shè)置<%@page isErrorPage="true"%>
設(shè)置一個頁面的錯誤處理頁面:<%@page errorPage="errorHandler.jsp"%>
這樣當該jsp頁面拋出異常時,便會跳轉(zhuǎn)到錯誤頁面處理琴许,當網(wǎng)頁url不變税肪,輸出為頁面處理程序的輸出,
不再會輸出難以理解的信息榜田。
C.8 小結(jié)
JSP隱身對象: (九大對象)
- out
- session
- request
- response
- exception
- application
- page
- config
- pageContext
3大語法元素:
- 指令:
<%@page attribute="value"%>
<%@ include file="url"%> - 腳本元素
<% %>腳本
<%= %>表達式
<%! %>聲明 - 動作
//bean
<jsp:useBean name="" class=""></jsp:useBean>
<jsp:setProperty name="" property="" vlaue=""/>
<jsp:getProperty name="" property=""/>
//include動作:
<jsp:include page="">
<jsp:param name="" value=""/>
</jsp:include>
forward動作:
<jsp:forward page="">
<jsp:param name="" value="">
</jsp.forward>
其他:
新增加JSP頁面后益兄,并不需要重啟Tomcat服務器。
解決JSP頁面中文亂碼問題:
<%@page contentType="text/html;charset=utf-8"%>
Servlet的缺點:
- html是由以字符串形式輸出的串慰。這使得處理response響應非常繁瑣。
- 頁面形式的一點變化都要重新編譯
備注
第一次用MarkDown寫文章唱蒸,確實強大邦鲫,排版很方便、很美觀神汹。棒棒噠庆捺!