jsp

一、jsp定義及作用

JSP技術(shù)使用Java編程語(yǔ)言編寫(xiě)類(lèi)XML的tags和scriptlets舍败,來(lái)封裝產(chǎn)生動(dòng)態(tài)網(wǎng)頁(yè)的處理邏輯低矮。網(wǎng)頁(yè)還能通過(guò)tags和scriptlets訪問(wèn)存在于服務(wù)端的資源的應(yīng)用邏輯。JSP將網(wǎng)頁(yè)邏輯與網(wǎng)頁(yè)設(shè)計(jì)的顯示分離蜜另,支持可重用的基于組件的設(shè)計(jì)碉纳,使基于Web的應(yīng)用程序的開(kāi)發(fā)變得迅速和容易勿负。 JSP(JavaServer Pages)是一種動(dòng)態(tài)頁(yè)面技術(shù),它的主要目的是將表示邏輯從Servlet中分離出來(lái)劳曹。

二奴愉、Myeclipse Web項(xiàng)目目錄結(jié)構(gòu):

Paste_Image.png
  • 修改項(xiàng)目虛擬路徑:(即web訪問(wèn)路徑,默認(rèn)和項(xiàng)目名稱(chēng)相同)

  • 右鍵項(xiàng)目名稱(chēng) -> Properties -> MyEclipse -> Web -> 修改Web Content-root

  • 修改之后需要重新deploy到 web server上才能生效(相當(dāng)于Tomcat的webappps文件夾里的項(xiàng)目文件夾名稱(chēng)變化了)

  • 修改Tomcat默認(rèn)端口號(hào):修改conf目錄中的server.xml文件的Connector節(jié)點(diǎn)的port屬性

Paste_Image.png

三厚者、jsp指令:

  • 1躁劣、page指令:位于jsp頁(yè)面頂端,同一個(gè)頁(yè)面可以有多個(gè)page指令库菲。
    Paste_Image.png

    @和page間有空格
  • 2、include指令:講一個(gè)外部文件嵌入到j(luò)sp文件中志膀,并解析這個(gè)頁(yè)面的jsp文件熙宇。
  • 3、taglib指令:使用標(biāo)簽庫(kù)定義新的自定義標(biāo)簽溉浙,在jsp頁(yè)面中啟動(dòng)定制行為烫止。
  • 4、jsp書(shū)寫(xiě)規(guī)范
    html注釋?zhuān)嚎蛻?hù)端可見(jiàn)
    jsp注釋?zhuān)?lt;%--注釋-->客戶(hù)端不可見(jiàn)
    Jsp腳本:<%Java代碼%>
    Jsp聲明:定義變量或是方法<%!Java代碼%>
    Jsp表達(dá)式:<%=變量或方法>

四戳稽、內(nèi)置對(duì)象簡(jiǎn)介

  • 1馆蠕、JSP內(nèi)置對(duì)象是Web容器創(chuàng)建的一組對(duì)象期升,【不使用new關(guān)鍵字】就可以使用的內(nèi)置對(duì)象。例如:out
  • 2互躬、JSP九大內(nèi)置對(duì)象:out,request,response,session,application(五大常用對(duì)象)Page,pageContext,exception.config(四個(gè)不太常用對(duì)象)
  • 3播赁、什么是緩沖區(qū)
    1、緩沖區(qū):Buffer吼渡,所謂緩沖區(qū)就是內(nèi)存的一塊區(qū)域容为,用來(lái)保存臨時(shí)數(shù)據(jù)
    2、IO輸出最原始的就是一個(gè)字節(jié)一個(gè)字節(jié)輸出寺酪,效率很低坎背。緩沖區(qū)可以先將多個(gè)字節(jié)讀出來(lái),再一次性的輸出寄雀,提高效率

out對(duì)象

  • 1得滤、out對(duì)象是JspWriter類(lèi)的實(shí)例,是向客戶(hù)端(這里指瀏覽器)輸出內(nèi)容的常用對(duì)象盒犹。
  • 2懂更、常用方法:
    · void println()向客戶(hù)端打印字符
    · void clear()清除緩沖區(qū)的內(nèi)容。如果在flush之后調(diào)用阿趁,會(huì)拋出異常
    · void clearBuffer() 也是清除緩沖區(qū)內(nèi)容膜蛔,但在flush之后不會(huì)拋出異常
    · void flush()將緩沖區(qū)內(nèi)容輸出到客戶(hù)端
    · int getBufferSize()返回緩沖區(qū)的大小(字節(jié)數(shù))脖阵,如不設(shè)緩沖區(qū)則為0
    · int getRemaining()返回緩沖區(qū)還剩余多少可用
    · boolean isAutoFlush()返回緩沖區(qū)滿(mǎn)時(shí)皂股,是否自動(dòng)清空緩沖區(qū)
    · void close()關(guān)閉輸出流

request對(duì)象

  • 1、內(nèi)容:
    客戶(hù)端的請(qǐng)求信息被封裝在request對(duì)象中命黔,通過(guò)它才能了解到客戶(hù)的需求呜呐,然后做出響應(yīng)。
    它是HttpServletRequest類(lèi)的實(shí)例悍募。request對(duì)象具有請(qǐng)求域,即完成客戶(hù)端的請(qǐng)求之前,該對(duì)象一直有效蘑辑。
  • 2、方法:
    1 object getAttribute(String name) 返回指定屬性的屬性值
    2 Enumeration getAttributeNames() 返回所有可用屬性名的枚舉
    3 String getCharacterEncoding() 返回字符編碼方式
    4 int getContentLength() 返回請(qǐng)求體的長(zhǎng)度(以字節(jié)數(shù))
    5 String getContentType() 得到請(qǐng)求體的MIME類(lèi)型
    6 ServletInputStream getInputStream() 得到請(qǐng)求體中一行的二進(jìn)制流
    7 String getParameter(String name) 返回name指定參數(shù)的參數(shù)值
    8 Enumeration getParameterNames() 返回可用參數(shù)名的枚舉
    9 String[] getParameterValues(String name) 返回包含參數(shù)name的所有值的數(shù)組
    10 String getProtocol() 返回請(qǐng)求用的協(xié)議類(lèi)型及版本號(hào)
    11 String getScheme() 返回請(qǐng)求用的計(jì)劃名,如:http.https及ftp等
    12 String getServerName() 返回接受請(qǐng)求的服務(wù)器主機(jī)名
    13 int getServerPort() 返回服務(wù)器接受此請(qǐng)求所用的端口號(hào)
    14 BufferedReader getReader() 返回解碼過(guò)了的請(qǐng)求體
    15 String getRemoteAddr() 返回發(fā)送此請(qǐng)求的客戶(hù)端IP地址
    16 String request.getContextPath();//返回上下文路徑

編碼問(wèn)題

  • request.setCharacterEncoding("utf-8");參數(shù)應(yīng)該與提交請(qǐng)求的JSP頁(yè)面的charset保持一致坠宴。解決中文亂碼問(wèn)題洋魂,只對(duì)post方法提交的參數(shù)有用,無(wú)法解決URL傳遞中文出現(xiàn)的亂碼問(wèn)題喜鼓。
  • 解決URL傳遞中文出現(xiàn)的亂碼問(wèn)題副砍,需要修改Tomcat的server.xml文件,在修改端口的節(jié)點(diǎn)Connector上加URIEncoding="utf-8",并重啟web服務(wù)器庄岖。
    getServerPort()返回服務(wù)器接收此請(qǐng)求所用的端口號(hào)
    getCharacterEncoding()返回字符編碼方式
    setCharacterEncoding()設(shè)置請(qǐng)求的字符編碼方式
    getContentLength()返回請(qǐng)求體的長(zhǎng)度
    getRemoteAddr()返回發(fā)送此請(qǐng)求的客戶(hù)端ip地址
    getRealPath(String path)返回一虛擬路徑的真實(shí)路徑
    request.getContextPath()返回上下文路徑

數(shù)據(jù)交互

  • response.getWriter()獲得的輸出流對(duì)象輸出的內(nèi)容總是提前于內(nèi)置對(duì)象out輸出的內(nèi)容豁翎。
  • 用out.flush()可以強(qiáng)制out對(duì)象輸出的內(nèi)容提前。
  • response.sendRedirect() -> 請(qǐng)求重定向
Paste_Image.png
  • 請(qǐng)求重定向:客戶(hù)端行為隅忿,本質(zhì)上是兩次請(qǐng)求心剥,并且對(duì)第一次的請(qǐng)求對(duì)象不會(huì)保存邦尊,地址欄的URL地址會(huì)改變(response實(shí)現(xiàn))
  • 請(qǐng)求轉(zhuǎn)發(fā):服務(wù)器行為,本質(zhì)上是一次請(qǐng)求优烧,轉(zhuǎn)發(fā)后會(huì)保存請(qǐng)求對(duì)象蝉揍,地址欄的URL地址不會(huì)改變(request實(shí)現(xiàn))

session

session表示客戶(hù)端與服務(wù)器的一次會(huì)話

  • 用戶(hù)在瀏覽某個(gè)網(wǎng)站時(shí),從進(jìn)入網(wǎng)站到瀏覽器關(guān)閉所經(jīng)過(guò)的這段時(shí)間匙隔,也就是用戶(hù)瀏覽這個(gè)網(wǎng)站所花費(fèi)的時(shí)間
    (1)session是JSP的一個(gè)內(nèi)置對(duì)象疑苫,是HttpSession類(lèi)的實(shí)例。
    (2)從客戶(hù)打開(kāi)瀏覽器并連接到服務(wù)器開(kāi)始纷责,到客戶(hù)關(guān)閉瀏覽器窗口斷開(kāi)與服務(wù)器的連接捍掺,這一過(guò)程成為一個(gè)會(huì)話。
    (3)當(dāng)客戶(hù)在同一個(gè)網(wǎng)站的不同頁(yè)面之間進(jìn)行切換并訪問(wèn)時(shí)再膳,服務(wù)器是通過(guò)session來(lái)判斷這些請(qǐng)求是否來(lái)自同一個(gè)客戶(hù)挺勿。
    (4)session一般有時(shí)間限制,長(zhǎng)時(shí)間不操作可能會(huì)導(dǎo)致session失效喂柒。session失效后原session中保存的屬性值會(huì)全部丟失不瓶。
    (5)setMaxInactiveInterval(int i) 該方法可直接設(shè)定session的生存時(shí)間,超過(guò)該時(shí)間session會(huì)重新創(chuàng)建灾杰。(單位:秒)

  • session的生命周期
    1.創(chuàng)建:當(dāng)客戶(hù)端第一次訪問(wèn)某個(gè)jsp或者servlet時(shí)候蚊丐,服務(wù)器會(huì)為當(dāng)前會(huì)話創(chuàng)建一個(gè)SessionId,每次客戶(hù)端向服務(wù)器發(fā)送請(qǐng)求時(shí)艳吠,都會(huì)將此SessionId攜帶過(guò)去麦备,服務(wù)端會(huì)對(duì)此SessionId進(jìn)行校驗(yàn)
    2.活動(dòng):
    ①某次會(huì)話當(dāng)中通過(guò)超鏈接打開(kāi)的新頁(yè)面屬于同一次會(huì)話
    ②只要當(dāng)前會(huì)話頁(yè)面沒(méi)有全部關(guān)閉,重新打開(kāi)的瀏覽器窗口訪問(wèn)同一個(gè)項(xiàng)目資源時(shí)屬于同一次會(huì)話
    ③除非本次會(huì)話的所有頁(yè)面都關(guān)閉后在重新訪問(wèn)某個(gè)JSP或者servlet將會(huì)創(chuàng)建新的會(huì)話
    注意:注意原有會(huì)話還存在昭娩,只是這個(gè)舊的Session仍然存在于服務(wù)端凛篙,只不過(guò)再也沒(méi)有客戶(hù)端會(huì)攜帶它然后交予服務(wù)端校驗(yàn)(原來(lái)的會(huì)話處于休眠狀態(tài))
    3.銷(xiāo)毀:三種方式
    ①調(diào)用了session.invalidate()方法
    ②Session過(guò)期(超時(shí))
    ③服務(wù)器重新啟動(dòng)

application介紹

1、實(shí)現(xiàn)了用戶(hù)間數(shù)據(jù)的共享栏渺,可存放全局變量呛梆。(類(lèi)似靜態(tài)對(duì)象)
2、開(kāi)始于服務(wù)器啟動(dòng)磕诊,終止于服務(wù)器的關(guān)閉(生命周期)
3填物、在用戶(hù)的前后連接或不同用戶(hù)之間的連接中,可以對(duì)application對(duì)象的同一屬性進(jìn)行操作
4霎终、在任何地方對(duì)application對(duì)象屬性進(jìn)行操作融痛,都將影響到其他用戶(hù)對(duì)此的訪問(wèn)
5、application對(duì)象是ServletContext類(lèi)的實(shí)例
一神僵、page對(duì)象:是指指向當(dāng)前JSP頁(yè)面本身,有點(diǎn)像類(lèi)中的this指針覆劈,它是java.long.Object類(lèi)的實(shí)例保礼。
二沛励、常用方法如下:主要是Object類(lèi)中聲明的方法


Paste_Image.png

JSP內(nèi)置對(duì)象 - pageContext

(1)pageContext對(duì)象提供了對(duì)JSP頁(yè)面中所有對(duì)象及名字空間的訪問(wèn)操作
(2)pageContext對(duì)象可以訪問(wèn)本頁(yè)面的session,可以訪問(wèn)本頁(yè)面的application對(duì)象的任意屬性值
(3)pageContext對(duì)象是某個(gè)頁(yè)面中所有功能的集大成者
pageContext對(duì)象的常用方法:
(1)JspWriter getOut() 返回當(dāng)前客戶(hù)端相應(yīng)被使用的JspWriter流(out)
(2)HttpSession getSession() 返回當(dāng)前頁(yè)面中HttpSession對(duì)象(session)
(3)Object getPage() 返回當(dāng)前頁(yè)面的Object對(duì)象(page)
(4)ServletRequest getRequest() 返回當(dāng)前面的ServletRequest對(duì)象(request)
(5)servletResponse getResponse() 返回當(dāng)前頁(yè)的ServletResponse對(duì)象(response)
(6)void setAttribute(Strign name, Object attribute) 設(shè)置屬性及屬性值
(7)Object getAttribute(String name ,int scope) 在指定范圍內(nèi)取屬性值
(8)int getAttributeScope(String name) 返回某屬性的作用范圍
(9)void forward(String relativeUrlPath) 使當(dāng)前頁(yè)面跳轉(zhuǎn)到另外一個(gè)頁(yè)面(服務(wù)器轉(zhuǎn)發(fā))
(10)void include(String relativeUrlPath) 在當(dāng)前位置包含另一個(gè)文件
config對(duì)象 常用方法: ServletContext getServletContext()返回含有服務(wù)器相關(guān)信息的ServletContext對(duì)象
String getInitParameter(String name)返回初始化參數(shù)的值
Enumeration getInitParameterNames()返回Servlet初始化所需所有參數(shù)的枚舉
1.需要捕獲異常的頁(yè)面炮障,在page指令中寫(xiě)屬性errorpage=“出錯(cuò)跳轉(zhuǎn)到的頁(yè)面”
2.在跳轉(zhuǎn)到的錯(cuò)誤處理頁(yè)面page指令中輸入屬性isErrorPage=“true”

JSP內(nèi)置對(duì)象 - Exception

(1)Exception是java.lang.Throwable類(lèi)的實(shí)例
(2)當(dāng)一個(gè)頁(yè)面運(yùn)行發(fā)生了異常目派,就產(chǎn)生了該Exception對(duì)象。
(3)若一個(gè)JSP頁(yè)面要使用該Exception對(duì)象胁赢,需要將isErrorPage的值設(shè)為true
Exception對(duì)象常用方法:
(1)String getMessage() 返回描述異常的信息
(2)String toString() 返回關(guān)于異常的簡(jiǎn)短描述信息
(3)void printStackTrace() 顯示異常及其棧軌跡
(4)Throwable FillInStackTrace() 重寫(xiě)異常的執(zhí)行棧軌跡

javabean:

1企蹭、Javabeans就是符合某種特定規(guī)范Java類(lèi)。使用Javabeans的好處是【解決代碼的重復(fù)編寫(xiě)】智末,減少代碼冗余谅摄,功能區(qū)分明確,提高代碼的維護(hù)性系馆。
2送漠、設(shè)計(jì)原則四點(diǎn):公有類(lèi),屬性私有由蘑,包含無(wú)參的共有構(gòu)造方法闽寡,getter和setter方法封裝屬性
(1)JSP動(dòng)作元素(action element)
JSP動(dòng)作元素為請(qǐng)求處理階段提供信息。動(dòng)作元素遵循XML語(yǔ)法尼酿,有一個(gè)包含元素名的開(kāi)始標(biāo)簽爷狈,可以有屬性,可選的內(nèi)容裳擎、與開(kāi)始標(biāo)簽匹配的結(jié)束標(biāo)簽涎永。
(2)JSP動(dòng)作元素種類(lèi)
第一類(lèi)是與存取JavaBean有關(guān),包括:
<jsp:useBean> <jsp:setProperty> <jsp:getProperty>
第二類(lèi)是JSP1.2開(kāi)始有的基本元素句惯,包括:
<jsp:include> <jsp:forward> <jsp:param> <jsp:plugin> <jsp:params> <jsp:fallback>
第三類(lèi)是JSP2.0新增的動(dòng)作元素土辩,主要與JSP Document有關(guān),包括:
<jsp:root> <jsp:declaration> <jsp:scriptlet> <jsp:expression> <jsp:text> <jsp:output>
第四類(lèi)是JSP2.0新增的動(dòng)作元素抢野,主要是用來(lái)動(dòng)態(tài)生成XML元素標(biāo)簽的值拷淘,包括:
<jsp:attribute> <jsp:body> <jsp:element>
第五類(lèi)是JSP2.0新增的動(dòng)作元素,主要是用在Tag File中指孤,包括:
<jsp:invoke> <jsp:dobody>
一启涯、像使用普通java類(lèi)一樣
1、創(chuàng)建一個(gè)web project項(xiàng)目恃轩。
2结洼、在src文件下,創(chuàng)建一個(gè)包叉跛,在包中創(chuàng)建一個(gè)類(lèi)松忍,滿(mǎn)足設(shè)計(jì)原則即可
3、在index.jsp頁(yè)面中通過(guò)import導(dǎo)入之前創(chuàng)建的類(lèi)(import="包名.類(lèi)名")
在JSP中使用JavaBean有兩種方法:
1筷厘。在src下按照規(guī)則新建一個(gè)JavaBean類(lèi)鸣峭,然后再WebRoot下對(duì)應(yīng)的jsp文件中宏所,在聲明里新建一個(gè)JavaBean類(lèi),然后賦值摊溶、使用爬骤。
2.或是使用JSp的動(dòng)作標(biāo)簽,如<jsp:useBean id="標(biāo)識(shí)符(類(lèi)似于Java中的實(shí)例變量名)" class="java類(lèi)名(需要將包名一同寫(xiě)入)" scope="作用范圍(默認(rèn)是page)">
<jsp:useBeans>動(dòng)作:在jsp頁(yè)面中實(shí)例化或者在指定范圍內(nèi)使用javabean
1莫换、<jsp:useBean id="標(biāo)示符" class="java類(lèi)名" scope="作用范圍" />
2霞玄、【其中標(biāo)示符為對(duì)象引用;java類(lèi)名需要使用全名】
<jsp:setProperty>動(dòng)作:給【已經(jīng)實(shí)例化的Javabean對(duì)象的屬性賦值】拉岁,一共有四種形式坷剧。
1、需要表單提交屬性:<jsp:setProperty name="Javabean實(shí)例名" property=""/>: 與之前頁(yè)面提交的表單的【所有屬性進(jìn)行匹配】膛薛,若有與javabean類(lèi)屬性名相同的听隐,則進(jìn)行賦值。比如表壇提交了username="xxx"哄啄,而javabean里有username屬性雅任,則對(duì)其進(jìn)行賦值
2、需要表單提交屬性<jsp:setPropery name="Javabean實(shí)例名" property="javabean屬性名" />:對(duì)【指定的屬性進(jìn)行匹配】
3咨跌、手動(dòng)設(shè)置屬性:<jsp:setProperty name = "Javabean實(shí)例名" property="Javabean屬性名" value="BeanValue" />
4沪么、與request參數(shù)有關(guān),通過(guò)url傳參 :<jsp:setProperty name="Javabean實(shí)例名" property="propertyName" param="request對(duì)象中的參數(shù)名" />

1.根據(jù)表單自動(dòng)匹配所有的屬性
<jsp:setProperty name="myUsers" property="
"/>
2.根據(jù)表單自動(dòng)匹配相應(yīng)的屬性(部分匹配)
<jsp:setProperty name="myUsers" property="username"/>
3.與表單無(wú)關(guān),通過(guò)手工賦值給屬性
<jsp:setProperty name="myUsers" property="username" value=“Lisa”/>
4.通過(guò)url傳參數(shù)給屬性賦值
<jsp:setProperty name="myUsers" property="username"/>
<jsp:setProperty name="myUsers" property="password" param=“mypass”/>

getProperty
作用:獲取指定javabean對(duì)象的屬性值锌半。
〈jsp:getProperty name="javabean實(shí)例名" property="javabean屬性名"〉
JavaBean作用域:
page://僅當(dāng)前頁(yè)面有效
request//可以通過(guò)HttpRequest.getAttribute()方法來(lái)取得javaBean對(duì)象禽车,本次請(qǐng)求有效,服務(wù)器跳轉(zhuǎn)有效,重定向無(wú)效
session//可以通過(guò)Session.getAttribute()方法取得javaBean對(duì)象,本次會(huì)話有效,服務(wù)器跳轉(zhuǎn)有效,重定向有效
application//可以通過(guò)application.getAttribute()方法來(lái)取得javaBean對(duì)象刊殉,本webapp全局有效,只有當(dāng)該app關(guān)閉后失效
Model1分為三層:
1.界面層:由JSP頁(yè)面進(jìn)行與客戶(hù)端瀏覽器的交互殉摔,可以直接調(diào)用JavaBeans
2.業(yè)務(wù)邏輯層:由JavaBeans進(jìn)行處理業(yè)務(wù)邏輯,封裝數(shù)據(jù)记焊,并與數(shù)據(jù)庫(kù)層進(jìn)行交互
3.數(shù)據(jù)庫(kù)層:底層數(shù)據(jù)庫(kù)逸月,可被javaBeans訪問(wèn)
避免了JSP頁(yè)面直接進(jìn)行業(yè)務(wù)邏輯處理所帶來(lái)的維護(hù)性,擴(kuò)展性差的弱點(diǎn).體現(xiàn)了分層設(shè)計(jì)的思想
http協(xié)議的無(wú)狀態(tài)性:服務(wù)器不會(huì)記住你
保存用戶(hù)狀態(tài)的兩大機(jī)制:Cookie遍膜,session
Cookie:Web服務(wù)器保存在客戶(hù)端的一系列文本信息
Cookie作用:
1碗硬、對(duì)特定對(duì)象的追蹤
2、保存用戶(hù)網(wǎng)頁(yè)瀏覽記錄和習(xí)慣
3瓢颅、簡(jiǎn)化登錄
安全風(fēng)險(xiǎn):容易泄露用戶(hù)信息
創(chuàng)建Cookie對(duì)象:Cookie newCookie=new Cookie(String key,Object value);
寫(xiě)入Cookie對(duì)象:response.addCookie(newCookie);
讀取Cookie對(duì)象:Cookie[] cookies=request.getCookies();
Cookie方法:
設(shè)置cookie的有效期 void setMaxAge(int a)
獲取cookie的有效期 int getMaxAge();
設(shè)置cookie的值 void setValue(String a);
獲取cookie的值 String getValue();
獲取cookie的名稱(chēng) String getName();
session和cookie區(qū)別:
1恩尾、保存位置:session在服務(wù)器端內(nèi)存,cookie在客戶(hù)端文本
2挽懦、保存對(duì)象:session保存Object類(lèi)(保存對(duì)象大小沒(méi)有限制)翰意,cookie保存String類(lèi)型(保存對(duì)象大小有限制)
3、生存權(quán):session會(huì)話結(jié)束即銷(xiāo)毀,cookie可以長(zhǎng)期保存在客戶(hù)端
4猎物、重要性:session安全性更高虎囚,保存重要信息,cookie保存不重要的信息

JSP有page蔫磨、include、taglib指令這三種指令圃伶;

page:位于頁(yè)面頂端堤如,一個(gè)頁(yè)面可以包含多個(gè)page指令
include:將一個(gè)外部文件嵌入jsp中,同時(shí)解析這個(gè)頁(yè)面中的jsp語(yǔ)句窒朋。
taglib:使用標(biāo)簽庫(kù)搀罢,自定義新的標(biāo)簽,在jsp中啟動(dòng)定制行為侥猩。
include指令:
include指令是編譯階段的指令榔至,即include所包含的文件的內(nèi)容是編譯的時(shí)候插入到JSP文件中‘因此如果只修改了include文件內(nèi)容,而沒(méi)有對(duì)JSP修改欺劳,得到的結(jié)構(gòu)將不會(huì)改變唧取,所以直接執(zhí)行已經(jīng)存在的字節(jié)碼文件,而沒(méi)有重新編譯划提。因此對(duì)不經(jīng)常變化的內(nèi)容枫弟,用include指令是合適的,如果需要的內(nèi)容是經(jīng)常變化的鹏往,則需要?jiǎng)幼髟?lt;jsp:include>.
include指令的主要優(yōu)點(diǎn)是功能強(qiáng)大淡诗,所包含的代碼可以含有總體上影響主頁(yè)面的JSP構(gòu)造,比如屬性伊履、方法的定義和文檔類(lèi)型的設(shè)定韩容。它的缺點(diǎn)是難于維護(hù)只要被包含的頁(yè)面發(fā)生更改,就得更改主頁(yè)面唐瀑,這是因?yàn)橹黜?yè)面不會(huì)自動(dòng)地查看被包含的頁(yè)面是否發(fā)生更改群凶。
僅當(dāng)include動(dòng)作不能滿(mǎn)足要求時(shí),我們才應(yīng)該使用include指令介褥。
include動(dòng)作在維護(hù)上的優(yōu)勢(shì)十分巨大座掘,當(dāng)兩種方法都可以使用時(shí),include動(dòng)作幾乎肯定是首選的方法柔滔。
對(duì)于文件包含溢陪,應(yīng)該盡可能地使用include動(dòng)作。僅在所包含的文件中定義了主頁(yè)面要用到的字段或方法睛廊,或所包含的文件設(shè)置了主頁(yè)面的響應(yīng)報(bào)頭時(shí)形真,才應(yīng)該使用include指令。
因?yàn)閕nclude指令更為強(qiáng)大。include指令允許所包含的文件中含有影響主頁(yè)面的Jsp代碼咆霜,比如響應(yīng)報(bào)頭的設(shè)置和字段邓馒、方法的定義。

Paste_Image.png
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末蛾坯,一起剝皮案震驚了整個(gè)濱河市光酣,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌脉课,老刑警劉巖救军,帶你破解...
    沈念sama閱讀 206,378評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異倘零,居然都是意外死亡唱遭,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,356評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門(mén)呈驶,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)拷泽,“玉大人,你說(shuō)我怎么就攤上這事袖瞻∷局拢” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 152,702評(píng)論 0 342
  • 文/不壞的土叔 我叫張陵虏辫,是天一觀的道長(zhǎng)蚌吸。 經(jīng)常有香客問(wèn)我,道長(zhǎng)砌庄,這世上最難降的妖魔是什么羹唠? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 55,259評(píng)論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮娄昆,結(jié)果婚禮上佩微,老公的妹妹穿的比我還像新娘。我一直安慰自己萌焰,他們只是感情好哺眯,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,263評(píng)論 5 371
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著扒俯,像睡著了一般奶卓。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上撼玄,一...
    開(kāi)封第一講書(shū)人閱讀 49,036評(píng)論 1 285
  • 那天夺姑,我揣著相機(jī)與錄音,去河邊找鬼掌猛。 笑死盏浙,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播废膘,決...
    沈念sama閱讀 38,349評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼竹海,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了丐黄?” 一聲冷哼從身側(cè)響起斋配,我...
    開(kāi)封第一講書(shū)人閱讀 36,979評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎孵稽,沒(méi)想到半個(gè)月后许起,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,469評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡菩鲜,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,938評(píng)論 2 323
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了惦积。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片接校。...
    茶點(diǎn)故事閱讀 38,059評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖狮崩,靈堂內(nèi)的尸體忽然破棺而出蛛勉,到底是詐尸還是另有隱情,我是刑警寧澤睦柴,帶...
    沈念sama閱讀 33,703評(píng)論 4 323
  • 正文 年R本政府宣布诽凌,位于F島的核電站,受9級(jí)特大地震影響坦敌,放射性物質(zhì)發(fā)生泄漏侣诵。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,257評(píng)論 3 307
  • 文/蒙蒙 一狱窘、第九天 我趴在偏房一處隱蔽的房頂上張望杜顺。 院中可真熱鬧,春花似錦蘸炸、人聲如沸躬络。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,262評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)穷当。三九已至,卻和暖如春淹禾,著一層夾襖步出監(jiān)牢的瞬間馁菜,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,485評(píng)論 1 262
  • 我被黑心中介騙來(lái)泰國(guó)打工稀拐, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留火邓,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,501評(píng)論 2 354
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像铲咨,于是被迫代替她去往敵國(guó)和親躲胳。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,792評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容

  • JSP(Java Server Pages)纤勒,其根本是一個(gè)簡(jiǎn)化的 Servlet 設(shè)計(jì)坯苹,實(shí)現(xiàn)了在 Java 當(dāng)中使...
    靜候那一米陽(yáng)光閱讀 460評(píng)論 0 1
  • 什么是jsp? 很久之前摇天,我們的網(wǎng)頁(yè)都是靜態(tài)的粹湃,就是我們所看到的頁(yè)面在編寫(xiě)好之后總是唯一的。后來(lái)有人便提出動(dòng)態(tài)頁(yè)面...
    ezsync小智閱讀 1,494評(píng)論 0 13
  • 一泉坐、表單提交方式之Get和Post的區(qū)別 Get:以明文的方式通過(guò)URL提交數(shù)據(jù)为鳄,數(shù)據(jù)在URL中可以看到。提交的數(shù)...
    潛心之力閱讀 2,212評(píng)論 1 2
  • 1.什么是JSP (1)jsp全稱(chēng)是Java Server Pages腕让,它和Servlet技術(shù)一樣都是sun公司定...
    yjaal閱讀 3,635評(píng)論 5 99
  • JSP 基本結(jié)構(gòu)JSP 頁(yè)面組成:模板文本(HTML,XML,純文本)孤钦,JSP 元素;JSP 元素:腳本元素纯丸,指令...
    jslancer閱讀 832評(píng)論 0 11