JSP學(xué)習(xí) 三大指令、九個內(nèi)置對象、JavaBean、EL表達(dá)式
10余年建站經(jīng)驗(yàn), 網(wǎng)站建設(shè)、做網(wǎng)站客戶的見證與正確選擇。創(chuàng)新互聯(lián)公司提供完善的營銷型網(wǎng)頁建站明細(xì)報(bào)價表。后期開發(fā)更加便捷高效,我們致力于追求更美、更快、更規(guī)范。
1.page-->最復(fù)雜:<%@page language="java" info="xxx"...%>
pageEncoding:它指定當(dāng)前jsp頁面的編碼,在服務(wù)器要把jsp編譯成.java時需要使用pageEncoding。
contentType:它標(biāo)識添加一個響應(yīng)頭 Content-Type 等同于response.setContentType("text/html;charset=utf-8");
如果兩個屬性只提供一個,那么另一個的默認(rèn)值為設(shè)置的那個。
如果兩個屬性都沒有設(shè)置,那么默認(rèn)為iso
import:導(dǎo)包!可以出現(xiàn)多次
errorPage和isErrorPage
errorPage:當(dāng)前頁面如果拋出異常,那么要轉(zhuǎn)發(fā)到哪一個頁面,由errorPage屬性來指定。
isErrorPage:指定當(dāng)前頁面是否為處理錯誤的頁面!當(dāng)該屬性為true時,這個頁面會設(shè)置狀態(tài)碼為500!而且這個頁面可以使用9大內(nèi)置對象中的exception!
error-page:可在web.xml中設(shè)置jsp頁面錯誤時的跳轉(zhuǎn)頁面。404 error/404.jsp 500 error/500.jsp java.lang.RuntimeException error/error.jsp
autoFlush和buffer
autoFlush:指定jsp的輸出流緩沖區(qū)滿時,是否自動刷新!默認(rèn)為true,如果為false,那么在緩沖區(qū)滿是拋出異常!
buffer:指定緩沖區(qū)大小,默認(rèn)為8kb,通常不需要修改!
isELIgnored:是否忽略el表達(dá)式,默認(rèn)值為false,不忽略,即支持!
以下屬性基本沒用
language:指定當(dāng)前jsp編譯后的語言類型,默認(rèn)值為java。
info:信息!
isThreadSafa:當(dāng)前jsp是否支持并發(fā)訪問!
session:當(dāng)前頁面是否支持session,如果為false,那么當(dāng)前頁面就沒有session這個內(nèi)置對象!
extends:讓jsp生成的servlet去繼承該屬性指定的類!
2.include-->靜態(tài)包含
與RequestDispatcher的inchlude()方法的功能相似!
<%@include%> 它是在jsp編譯成java文件時完成的,他們共同生成一個java文件,然后再生成一個.class!
RequestDispatcher的include()是一個方法,包含和被包含的是兩個servlet,即兩個.class!他們只算把響應(yīng)的內(nèi)容在運(yùn)行時合并了、
作用:把頁面分解了,使用包含的方式組合在一起,這樣一個頁面中不變的部分,就是一個獨(dú)立的jsp,而我們只需要處理變化的頁面。
3.taglib-->導(dǎo)入標(biāo)簽庫
*兩個屬性
prefix:指定標(biāo)簽庫在本頁面中的前綴!由我們自己來起名稱。
uri:指定標(biāo)簽庫的位置!
<%@taglib prefix="s" uri="/struts-tags"%> 如
=====================================================================
九個內(nèi)置對象
out-->jsp的輸出流,用來向客戶端響應(yīng)
page-->當(dāng)前jsp對象! 它的引用類型是Object,即真身中有如下代碼:Object page =this;
config-->它對應(yīng)真身中的ServletConfig對象!
pageContext-->一個頂九個
request-->HttpServletRequest
response-->HttpServletResponse
exception-->Throwable
session-->HttpSession
appliction-->ServletContext
1.pageContext
Servlet中有三大域,而jsp中有四大域,它就是最后一個域?qū)ο螅?/p>
ServletContext:整個應(yīng)用程序
Session:整個會話(一個會話中只有一個用戶)
Request:一個請求鏈
pageContext:一個jsp頁面!這個域是在當(dāng)前jsp頁面和當(dāng)前jsp頁面中使用的標(biāo)簽之間共享數(shù)據(jù)!
域?qū)ο?br/>代理其它域:pageContext.setAttribute("xxx","XXX",PageContext.SESSION_SCOPE);
全域查找:pageContext.findAttribute("xxx");從小到大,依賴查找!
============================================================
JSP動作標(biāo)簽
這些jsp的動作標(biāo)簽,與html提供的標(biāo)簽有本質(zhì)的區(qū)別。
動作標(biāo)簽由tomcat服務(wù)器來解釋執(zhí)行!它與java代碼一樣,都是在服務(wù)器端執(zhí)行的!
html標(biāo)簽由瀏覽器來執(zhí)行!
*
============================================================
JavaBean
javaBean的規(guī)范:
1.必須要一個默認(rèn)的構(gòu)造器
2.提供get/set方法,如果只有g(shù)et方法,那么這個屬性是制只讀屬性!
3.屬性:有g(shù)et、set方法的成員,還可以沒有成員,只有g(shù)et/set方法。屬性名稱由get/set方法來決定!而不是成員名稱!
4.方法名稱滿足一定的規(guī)范,那么它就是屬性!boolean類型屬性,它的讀方法可以是is開頭,也可以是get開頭!
commons-beanUtils,它是依賴內(nèi)省完成!
*導(dǎo)包:
commons-beanUtils.jar
commons-logging.jar
BeanUtils.getProperty(Object bean,String propertyName)
BeanUtils.setProperty(Object bean,String PropertyName,String propertyValue)
BeanUtils.populate(Map map,Object bean)
jsp中與javaBean相關(guān)的標(biāo)簽!
*
============================================================
EL表達(dá)式
1.EL是jsp頁面中內(nèi)置的表達(dá)式語言!
jsp2.0開始,不讓再使用java腳本,而是使用el表達(dá)式和動態(tài)標(biāo)簽替代java腳本!
EL替代的是<%= ...%>,也就算說,EL只能做輸出!
2.EL表達(dá)式來讀取四大域
${xxx},全域查找名為xxx的屬性,如果不存在,輸出空字符串,而不是null。
${pageScope.xxx} ${requestScope.xxx} ${sessionScope.xxx} ${applicationScope.xxxx},指定域獲取屬性!
3.EL可以輸出的東西都在11個內(nèi)置對象中!
我們已經(jīng)學(xué)習(xí)了四個
param:對應(yīng)參數(shù),它是一個Map,其中key參數(shù)名,value是參數(shù)值,適用于單值的參數(shù)。
paramValues:對應(yīng)參數(shù),它是一個Map,其中key參數(shù)名,value是多個參數(shù)值,適用于多值的參數(shù)。
header:對應(yīng)請求頭,它是一個Map,其中key標(biāo)識頭名稱,value是單個頭值,適用于單值請求頭。
headerValues:對應(yīng)請求頭,它是一個Map,其中key標(biāo)識頭名稱,value是多個頭值,適用于多值請求頭。
initParam:獲取web.xml文件中
cookie:Map
如:${cookie.JSESSTONID.value} 即可獲取cookie中存儲的JSESSTONID
如:href=“${pageContext.request.contextPath}/xx/aa/b.jsp”
============================================================
EL函數(shù)庫(由JSTL提供的)
導(dǎo)入標(biāo)簽庫 <%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
具體庫方法:https://docs.oracle.com/cd/E17802_01/products/products/jsp/jstl/1.1/docs/tlddocs/fn/tld-summary.html
============================================================
自定義函數(shù)庫
寫一個java類,勒種可以定義0~n個方法,單必須是static方法,必須有返回值的。
在WEB-INF目錄下創(chuàng)建一個tld文件
在jsp頁面中導(dǎo)入標(biāo)簽庫 <%@ taglib prefix="it" uri="/WEB-INF/tlds/itcast.tld" %>
在jsp頁面中使用自定義的函數(shù)庫: ${it:fun()}