當(dāng)前位置:首頁 > IT技術(shù) > Web編程 > 正文

4. JSP常用標(biāo)簽 | 常用標(biāo)簽 常用 常用 常用!
2022-05-31 17:18:27

什么是JSP標(biāo)簽

JSP標(biāo)簽,有的地方也叫做JSP動作,在JSP中編寫大量的java代碼會使JSP頁面顯得雜亂無章,看起來非常不舒服,因此JSP提供了一些類似html的標(biāo)簽,通過這些標(biāo)簽?zāi)軌蛱娲糠謏ava代碼實(shí)現(xiàn)功能。
語法格式如下:

<jsp:標(biāo)簽名稱?屬性名=屬性值?...?></jsp:標(biāo)簽名稱>

?

<jsp:標(biāo)簽名稱?屬性名=屬性值?...?/>

?

那么常用的JSP標(biāo)簽有哪兒些:

在JSP中有很多JSP標(biāo)簽,但是常用的主要有下面兩個:

?

< jsp:forward>

forward 是前進(jìn)的意思? 我們轉(zhuǎn)發(fā)的時候已經(jīng)見過了??!
該標(biāo)簽的作用是把請求轉(zhuǎn)發(fā)給另外一個資源,頁面中使用該指令之后,當(dāng)前頁面中的所有要顯示的內(nèi)容都將無法顯示,因?yàn)闀苯愚D(zhuǎn)發(fā)到了另一個頁面。

創(chuàng)建一個index.jsp文件

 

<%@?page?language="java"?contentType="text/html;?charset=UTF-8"
????pageEncoding="UTF-8"%>
????
?

<!DOCTYPE?html>
<html>
<head>
<meta?charset="UTF-8">
<title>Insert?title?here</title>
</head>
<body>

<%--?普通P標(biāo)簽?不會顯示!?因?yàn)橄旅嬗洲D(zhuǎn)發(fā)語句?只轉(zhuǎn)發(fā)請求頭喲~~?--%>
<p>我是index中的p標(biāo)簽~~</p>

<%--?請求頭設(shè)置屬性?--%>
<%?request.setAttribute("name",?"Bi-Hu");?%>

????
????<%--?實(shí)現(xiàn)轉(zhuǎn)發(fā)功能!?--%>
<jsp:forward?page="/jsp2.jsp"></jsp:forward>
????????
</body>
</html>

jsp2.jsp:

<%@?page?language="java"?contentType="text/html;?charset=UTF-8"
????pageEncoding="UTF-8"%>
<!DOCTYPE?html>
<html>
<head>
<meta?charset="UTF-8">
<title>Insert?title?here</title>
</head>
<body>


????<p>
????我是?j?s?p?2?的?p?標(biāo)?簽?!?是的?這里沒有index頁面的內(nèi)容?除了我獲取的請求頭的name:
????</p>

????
????

????????<%--?獲取請求頭的Attribute?和?打印出來?~~?--%>
?????<%?String?attribute?=?(String)request.getAttribute("name");?%>
?????<%=?attribute?%>


</body>
</html>

?

在代碼可以看到! 其實(shí)和轉(zhuǎn)發(fā)差不多沒兩樣~~~ JSP 聽說只有 轉(zhuǎn)發(fā) 沒有 重定向~

接下來看第二個:

< jsp:include>

這就是動態(tài)包含了! 之前學(xué)了靜態(tài)的 靜態(tài)會何為一個java文件 而!動態(tài)不會! 所以他會有這些特性:

該標(biāo)簽用于把另外一個文件引入到當(dāng)前JSP里面,這種引入方式叫做動態(tài)引入:

我們寫一個s1.jsp? 和? s2.jsp ,然后都在里面寫:

s1.jsp:

?

<%@?page?language="java"?contentType="text/html;?charset=UTF-8"
????pageEncoding="UTF-8"%>
<!DOCTYPE?html>
<html>
<head>
<meta?charset="UTF-8">
<title>Insert?title?here</title>
</head>
<body>

<%--?我們在這里動態(tài)包含s2.jsp:?然后分別打印s1?和?s2?中的?打印sum:
?????還是那句話?,引入和調(diào)用的內(nèi)個順序別弄混?最好就在頭部就包含好!【動態(tài)無關(guān)緊要?靜態(tài)包含就要注意!】
?--%>
????
????<jsp:include?page="/s2.jsp"></jsp:include>
????
????<%--?打印sum?--%>
????
????<%?int?sum?=?100;?%>
????
????<%=?"第一次打印?s1?的?SUM:?"?+?sum?%>
????<br>
????<%=?"第二次打印?s1?的?SUM:"?+?sum?%>
</body>
</html>

?

?

?

s2.jsp:

?

<%@?page?language="java"?contentType="text/html;?charset=UTF-8"
????pageEncoding="UTF-8"%>
<!DOCTYPE?html>
<html>
<head>
<meta?charset="UTF-8">
<title>Insert?title?here</title>
</head>
<body>
????
????<%?int?sum?=?200;?%>
????<br>
????<%="s2的sum:"?+??sum?%>
????<br>
</body>
</html>

?

?

所以呢: 總結(jié)出: 動態(tài)應(yīng)用 他的文件是分開的 不合體了 ,即就是說 變量是獨(dú)立的了 自己文件的變量只能自己文件使用!

打開生成java文件的目錄可以看到,生成了兩個jsp文件,分別是s1.java和s2.java
可以得出結(jié)論,該指令的引入是在運(yùn)行期完成的,而非在編譯期。這個引入指令,是在程序運(yùn)行過程中,由 index_jsp 文件中的_jspService()方法通過 JspRuntimeLibrary 類的 include()方法調(diào)用了 left_jsp 文件中的_jspService()方法。在運(yùn)行期所執(zhí)行的這種引入,稱為動態(tài)引入。

?

? ? ?org.apache.jasper.runtime.JspRuntimeLibrary.include(request, response, "/s2.jsp", out, false);

就是這句了 ↑↑↑↑↑↑↑↑↑↑↑↑

?

動態(tài)引用和靜態(tài)引用的區(qū)別:

動態(tài)引入和靜態(tài)引入的區(qū)別

靜態(tài)引入:

<%@?include?file="/xxx.jsp"?%>

?

靜態(tài)引入會生成一個java文件,兩個jsp文件中可以共享同一個變量,但不能定義重名的變量。

動態(tài)引入:

<jsp:include?page="/xxx.jsp"/>

動態(tài)引入會生成兩個java文件,兩個jsp文件中不可以共享同一個變量,可以定義重名的變量。

在靜態(tài)引入與動態(tài)引入均可使用時,一般使用靜態(tài)引入。因?yàn)樵诔绦蜻\(yùn)行時只存在一個Servlet,對資源的消耗較少,且不存在調(diào)用問題,執(zhí)行效率較高。

?


作者:??咸瑜??


本文摘自 :https://blog.51cto.com/u

開通會員,享受整站包年服務(wù)立即開通 >