1)JSP(Java Server Page)是Java服務器端動態(tài)頁面技術。是sun公司制訂的一種服務器端的動態(tài)頁面生成技術規(guī)范。




2)為什么要使用JSP:因為直接使用Servlet,雖然也可以生成動態(tài)頁面。但是,編寫繁瑣(需要" />

国产成人精品无码青草_亚洲国产美女精品久久久久∴_欧美人与鲁交大毛片免费_国产果冻豆传媒麻婆精东

15158846557 在線咨詢 在線咨詢
15158846557 在線咨詢
所在位置: 首頁 > 營銷資訊 > 網(wǎng)站運營 > JavaWeb之JSP

JavaWeb之JSP

時間:2023-07-07 12:36:02 | 來源:網(wǎng)站運營

時間:2023-07-07 12:36:02 來源:網(wǎng)站運營

JavaWeb之JSP:+ 概念:

1)JSP(Java Server Page)是Java服務器端動態(tài)頁面技術。是sun公司制訂的一種服務器端的動態(tài)頁面生成技術規(guī)范。




2)為什么要使用JSP:因為直接使用Servlet,雖然也可以生成動態(tài)頁面。但是,編寫繁瑣(需要使用out.println來輸出),并且維護困難(如果頁面發(fā)生了改變,需要修改Java代碼),所以sun指定了JSP規(guī)范。




3)與Servlet的關系:JSP其實是一個以.jsp為后綴的文件,容器會自動將.jsp文件轉(zhuǎn)換成一個.java文件(其實就是一個Servlet),然后調(diào)用該Servlet。所以,從本質(zhì)上講,JSP其實就是一個Servlet。




4)編寫:

① 創(chuàng)建一個以“.jsp”為后綴的文件。

②在該文件里面,可以添加如下的內(nèi)容:

—> HTML(CSS、JS):直接寫即可

—> Java代碼:

形式一:Java代碼片段:<% Java代碼 %>

形式二:JSP表達式:<%= Java表達式 %>

形式三:JSP聲明:<%! %>

③指令:通知容器,在將.jsp文件轉(zhuǎn)換成.java文件時,作一些額外的處理,比如導包。

—> 語法:<%@指令名稱 屬性名=屬性值 %>

—> import屬性:導包。

—> contenType屬性:設置response.setContentType的內(nèi)容。

—> pageEncoding屬性:告訴容器.jsp的文件的編碼格式,這樣,容器在獲取jsp文件的內(nèi)容(即解碼)時,不會出現(xiàn)亂碼。最好加入,有些容器默認以ISO-8859-1編碼。

—> session屬性:true/false,缺省值true,如果值為false,則容器不會添加獲得session的語句。

—> isELIgnored屬性:true/false,缺省值true,如果值為false,則告訴容器不要忽略el表達式。J2EE5.0需要使用isELIgnored=“false",否則EL表達式無效

—> isErrorPage屬性:true/false,缺省值false,如果值為true,表示這是一個錯誤處理頁面(即專門用來處理其他JSP產(chǎn)生的異常,只有值為true時,才能使用exception隱含對象去獲取錯誤信息)。

—> include指令:<%@include file="head.jsp" %>

file屬性:

①對于頁面的公共部分,我們可以使用相同的jsp文件,并使用include指令導入,如此實現(xiàn)代碼的優(yōu)化。

②告訴容器,在將.jsp文件轉(zhuǎn)換成.java文件時,在指令所在的位置插入相應的文件的“內(nèi)容“(由file屬性來指定)。插入的頁面并未運行,而是機械的將內(nèi)容插入。

—> errorPage屬性:設置一個錯誤處理頁面。<%@page errorPage="a4.jsp" %>

—> taglib指令:<%@taglib uri="命名空間" prefix="前綴" %>

①uri:在standard.jar/META-INF/c.tld中查找,

②prefix:前綴,用于代表命名空間。

—> jsp:include: <jsp:include page="common/base.jsp" flush=“false"/>

【flush:默認為 false。在同一個 JSP 中,如果不斷 include 自己(源文件),在邏輯上會形成死循環(huán)。若默認情況下,服務器會等待該文件被讀到底端,然后才輸出到客戶端,并且銷毀該次訪問的 request 和 response。而當把flush 屬性賦為真值時,在緩存累積了一定數(shù)據(jù)時,服務器會先提供一部分數(shù)據(jù)給瀏覽器,并等待后續(xù)內(nèi)容。

由此可以得出結論,在簡單頁面中,該屬性不納入考慮,而在頁面包含大量數(shù)據(jù)時,為縮短客戶端延遲,可將一部分內(nèi)容先行輸出。該屬性在 Servlet 中也有對應的應用?!?br>



5)如何運行:

①容器依據(jù).jsp文件生成.java文件(也就是先轉(zhuǎn)換成一個Servlet):

1)HTML(CSS、JS)放到service方法里,使用out.write輸出

2)<% %>也放到service方法里,照搬,不改動。

3)<%= %>也會放到service方法里,使用out.print輸出。

4)<%! %>給Servlet添加新的屬性或者新的方法(轉(zhuǎn)成.java文件后,聲明內(nèi)的部分添加在service方法之外)。 這樣就把一個JSP變成了一個Servlet容器。

②容器接下來就會調(diào)用Servlet來處理請求了(會將之前生成的.java文件進行編譯、然后實例化、初始化、調(diào)用相應的方法處理請求)

③隱含對象:

—> 所謂隱含對象(共9個),指的是在.jsp文件里面直接可以使用的對象,比如out、request、response、session、application(ServletContext上下文)、exception、pageContext、config、page。

* exception:當jsp頁面運行時發(fā)生了異常,容器會將異常信息封裝到該對象,可以使用該對象提供的方法來輸出異常的信息。另外,必須在頁面設置isErrorPage=“true"指令才能使用該隱含對象。

* pageContext:容器會為每一個JSP實例(JSP所對應的那個Servlet對象)創(chuàng)建唯一的一個符合pageContext接口的對象,稱之為page上下文。該對象會一直存在,除非JSP實例被銷毀。它作用:

①綁定數(shù)據(jù)(綁定的數(shù)據(jù)只有對應的JSP實例才可以訪問):setAttribute、removeAttribute、getAttribute。

②找到其他八個隱含對象

—> 之所以能直接使用這些對象,是因為容器會自動添加創(chuàng)建這些對象的代碼。(JSP僅僅是個草稿,最終會變?yōu)橐粋€Servlet。)




+ 注釋:

1)<!-- 注釋內(nèi)容 —>:允許注釋的內(nèi)容是Java代碼,如果是Java代碼,會被容器執(zhí)行,但是執(zhí)行的結果會被瀏覽器忽略(不會顯示出來)

2)<%-- 注釋內(nèi)容 --%>:注釋的內(nèi)容不能是Java代碼,如果是Java代碼,會被容器忽略。




+ JSP標簽:sun公司制定的一種技術規(guī)范,利用JSP標簽(類似于HTML標簽)來代替JSP中的Java代碼。這樣作的好處是,JSP頁面會更加簡潔,并且更好維護,jsp標簽可以復用。

+ JSTL:Java Standard Taglib(Java標準標簽庫,apache開發(fā)了一套標簽,捐獻給了sun,sun將其命名為JSTL)

—> 使用:

① 將JSTL標簽對應的jar(標簽類)文件拷貝到WEB-INF/lib下,standard.jar、jstl.jar

② 使用taglib指令引入JSP標簽




+ EL表達式:是一套簡單的計算規(guī)則,用于給JSP標簽的屬性賦值,也可以直接輸出。使用:

1) 訪問bean的屬性:

—> 第一種方式:例如:${user.name},容器會依次從4個隱含對象中pageContext、request、session、application中查找(getAttribute)綁定名為”user"的對象。接下來,會調(diào)用該對象的"getName"方法(自動將n變大寫然后加get),最后輸出執(zhí)行結果。

* 優(yōu)點:

①會自動將null轉(zhuǎn)換成”"輸出。

②如果綁定名稱對應的值不存在,會不報null指針異常,會輸出”"。

【注意::依次是指先從pageContext中查找,如果找不到,再查找request,如果找到了,則不再向下查找。如果要指定查找范圍,可以使用pageScope、requestScope、sessionScope、applicationScope來指定查找的范圍?!?br>
—> 比如${user[“name"]},與第一種方式是等價的!

* 優(yōu)點:

①中括號[]里面可以出現(xiàn)變量。

②中括號[]里面可以出現(xiàn)下標從0開始的數(shù)組。

【注意:中括號[]里的字符串用雙引號、單引號都可以;EL表達式中沒引號的為變量,有引號的為字符串】

2)進行一些簡單的計算,計算的結果可以用來給JSP標簽的屬性賦值,也可以直接輸出。

①算術運算:“+”、“-”、“*”、“/”、“%”;【+”號操作不能連接字符串?!?br>
②關系運算:“>”、“>=”、“<”、“<=”、“!=”、”==“;【“eq”也可判斷是否相等】

③邏輯運算:"&&"、"||"、"!" ,與Java中的一樣

④empty運算:判斷是否是一個空字符串,或者是一個空的集合,如果是,返回true?!緸閠rue:A.空字符串。B.空集合。C.null。 D.根據(jù)綁定名找不到值?!?br>
3)獲取請求參數(shù)值:

①${param.username}等價于request.getParameter(“username");

②${paramValues.city}等價于request.getParameterValues("city");




+ JSTL中的核心標簽

—> if:<c:if test="" var="" scope=“”></c:if>//當test屬性值為true,執(zhí)行標簽體的內(nèi)容,test屬性可以使用EL表達式。

* var屬性:用來指定綁定名稱。

* scope屬性:指定綁定范圍,可以是page(pageContext)、request、session、application

【注意:可以在if標簽里寫Java代碼?!?br>
—> choose:

<c:choose><!-- 用于分支,當滿足某個條件,執(zhí)行某一個分支 --> <c:when test=""><!--分支,可多次出現(xiàn) --> </c:when>...<c:otherwise><!-- 當其他分支都不滿足條件,則執(zhí)行該標簽的內(nèi)容 --></c:otherwise> </c:choose>


【注意:when和otherwise必須要放到choose標簽里面才能使用;when可以出現(xiàn)1次或者多次,otherwise可以出現(xiàn)0次或者1次,表例外】


—> forEach :

1)遍歷集合: <c:forEach var="" items="" carStatus=""></c:forEach>

① items 屬性:用來指定要遍歷的集合,可以使用EL表達式。

② var 屬性:指定綁定名,綁定范圍是pageContext,綁定值是從集合中取出的某個元素。

③ carStatus 屬性:指定綁定名,綁定范圍是pageContext,綁定值是一個由容器創(chuàng)建的一個對象,該對象封裝了當前迭代的狀態(tài)。比如,該對象提供了getIndex、getCount方法,其中,getIndex會返回當前迭代的元素的下標(從0開始),getCount會返回當前迭代的次數(shù)(從1開始)。

2)指定位置迭代: <c:forEach var="" begin="" end=“"></c:forEach>

① begin :如果指定了items,那么迭代就從items[begin]開始進行迭代;如果沒有指定items,那么就從begin開始迭代。它的類型為整數(shù)。

② end :如果指定了items,那么就在items[end]結束迭代;如果沒有指定items,那么就在end結束迭代。它的類型也為整數(shù)。

【注意:forEach還一個屬性為 step=“" :迭代的步長?!?br>
—> url : <c:url value="">

①當用戶禁止cookie以后,會自動在地址后面添加sessionId。

②當使用絕對路徑時,會自動在地址前添加應用名。

③ value 屬性:指定地址,在表單提交、鏈接當中,可以使用該標簽。

—> set : <c:set var="" scope="" value=“”> , 綁定一個對象到指定的范圍。

// value 屬性:綁定值。

—> remove : <c:remove var="" scope=“"> , 解除綁定。

—> catch : <c:catch var=“"> , 處理異常,會將異常信息封裝成一個對象,綁定到pageContext對象上。

—> import : <c:import url=“">

* url 屬性:指定一個 jsp 文件的地址, jsp 會在運行時調(diào)用這個 jsp 。

—> redirect : <c:redirect url=“"> ,重定向到另外一個地址。

* url 屬性:指定重定向的地址。

—> out : <c:out value="" default="" escapeXml=“"> , 用于輸出 el 表達式的值。

* value 屬性:指定輸出的值。

* default 屬性:指定缺省值

* escapeXml 屬性:設置成 true ,會將 value 中的特殊字符替換成相應的實體。缺省值就是 true 。




+ JSP標簽運行原理:

容器依據(jù)命名空間找到標簽的描述文件( .tld 文件),接下來,依據(jù)標簽的名稱找到標簽類的類名,然后將該標簽實例化,最后,調(diào)用標簽實例的相應的方法。

【注意:容器會從 WEB-INF 下查找,如果找不到,還會查找 WEB-INF/lib 下的 jar 文件?!?br>
+ 自定義標簽:

1) 寫一個 Java 類(標簽類),且必須繼承 SimpleTagSupport 類

2)在 doTag 方法里面(覆蓋 doTag 方法),編寫相應的處理邏輯。標簽有哪些屬性,則標簽類也有哪些屬性,并且類型要匹配。此外,這些屬性必須提供相應的 set 方法

3)在 .tld 文件當中,描述該標簽。 .tld 文件可以放在 WEB-INF 下(或它的子文件夾下),也可以放到 META-INF 下,可以參考 c.tld 文件來寫。





關鍵詞:

74
73
25
news

版權所有? 億企邦 1997-2025 保留一切法律許可權利。

為了最佳展示效果,本站不支持IE9及以下版本的瀏覽器,建議您使用谷歌Chrome瀏覽器。 點擊下載Chrome瀏覽器
關閉