日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 前端技术 > javascript >内容正文

javascript

javaweb学习总结(十九):JSP标签

發(fā)布時(shí)間:2024/1/17 javascript 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 javaweb学习总结(十九):JSP标签 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

一、JSP標(biāo)簽介紹

  JSP標(biāo)簽也稱之為Jsp Action(JSP動(dòng)作)元素,它用于在Jsp頁(yè)面中提供業(yè)務(wù)邏輯功能,避免在JSP頁(yè)面中直接編寫java代碼,造成jsp頁(yè)面難以維護(hù)。

二、JSP常用標(biāo)簽

  jsp的常用標(biāo)簽有以下三個(gè)

  • <jsp:include>標(biāo)簽 ?
  • <jsp:forward>標(biāo)簽 ?
  • <jsp:param>標(biāo)簽

2.1、<jsp:include>標(biāo)簽?

  <jsp:include>標(biāo)簽用于把另外一個(gè)資源的輸出內(nèi)容插入進(jìn)當(dāng)前JSP頁(yè)面的輸出內(nèi)容之中,這種在JSP頁(yè)面執(zhí)行時(shí)的引入方式稱之為動(dòng)態(tài)引入。
語(yǔ)法:
?? ?<jsp:include page="relativeURL | <%=expression%>" flush="true|false" />
  page屬性用于指定被引入資源的相對(duì)路徑,它也可以通過(guò)執(zhí)行一個(gè)表達(dá)式來(lái)獲得。
  flush屬性指定在插入其他資源的輸出內(nèi)容時(shí),是否先將當(dāng)前JSP頁(yè)面的已輸出的內(nèi)容刷新到客戶端。?

范例:使用jsp:include標(biāo)簽引入資源

1 <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> 2 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> 3 <html> 4 <head> 5 <title>jsp的jsp:include標(biāo)簽測(cè)試</title> 6 </head> 7 8 <body> 9 <%--使用jsp:include標(biāo)簽引入其它JSP頁(yè)面--%> 10 <jsp:include page="/jspfragments/head.jsp"/> 11 <h1>網(wǎng)頁(yè)主體內(nèi)容</h1> 12 <jsp:include page="/jspfragments/foot.jsp"/> 13 </body> 14 </html>

運(yùn)行結(jié)果:

  

2.2、<jsp:include>標(biāo)簽與include指令的區(qū)別

  <jsp:include>標(biāo)簽是動(dòng)態(tài)引入, <jsp:include>標(biāo)簽涉及到的2個(gè)JSP頁(yè)面會(huì)被翻譯成2個(gè)servlet,這2個(gè)servlet的內(nèi)容在執(zhí)行時(shí)進(jìn)行合并。?
  而include指令是靜態(tài)引入,涉及到的2個(gè)JSP頁(yè)面會(huì)被翻譯成一個(gè)servlet,其內(nèi)容是在源文件級(jí)別進(jìn)行合并。

  通過(guò)下面的例子來(lái)說(shuō)明<jsp:include>標(biāo)簽與include指令的區(qū)別

demo.jsp

1 <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> 2 <%! 3 int i=1000; 4 %> 5 <h1>demo.jsp中i的值為:<%=i%></h1>

分別使用include指令和<jsp:include>標(biāo)簽兩種包含語(yǔ)句,包含以上的demo.jsp

范例:使用@include包含內(nèi)容

1 <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> 2 <%! 3 int i=10; 4 %> 5 <h1>JspIncludeTagDemo01.jsp中i的值為:<%=i%></h1> 6 <h1><%@include file="/jspfragments/demo.jsp"%></h1>

此時(shí)在編譯jsp時(shí)就已經(jīng)提示出錯(cuò)了,如下所示:

  

  這個(gè)錯(cuò)誤說(shuō)的是變量i已經(jīng)重復(fù)定義了

  運(yùn)行JspIncludeTagDemo01.jsp,結(jié)果如下:

  

  運(yùn)行后發(fā)現(xiàn)出現(xiàn)了重復(fù)定義變量i的錯(cuò)誤提示信息,因?yàn)殪o態(tài)包含是將全部?jī)?nèi)容包含進(jìn)來(lái)之后,再進(jìn)行處理,屬于先包含后處理。由于被包含進(jìn)來(lái)的頁(yè)面demo.jsp中定義了一個(gè)變量i,而包含頁(yè)面JspIncludeTagDemo01.jsp本身又定義了一個(gè)變量i,所以服務(wù)器在處理JspIncludeTagDemo01.jsp這個(gè)頁(yè)面時(shí)就會(huì)發(fā)現(xiàn)里面有兩個(gè)重復(fù)定義的變量i,因此就會(huì)報(bào)錯(cuò)。

而如果現(xiàn)在使用的是<jsp:include>動(dòng)態(tài)包含的話,觀察以下程序:

范例:使用動(dòng)態(tài)包含

1 <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> 2 <h1>JspIncludeTagDemo02.jsp</h1> 3 <%! 4 int i=10; 5 %> 6 7 <h1>JspIncludeTagDemo02.jsp中i的值為:<%=i%></h1> 8 <h1><jsp:include page="/jspfragments/demo.jsp" /></h1>

運(yùn)行結(jié)果:

  

  發(fā)現(xiàn)結(jié)果已經(jīng)可以正確地顯示,而且不會(huì)互相影響,這是因?yàn)槭褂胘sp:include屬于動(dòng)態(tài)包含,動(dòng)態(tài)包含就是指先將各個(gè)頁(yè)面分別處理,處理完之后再將處理后的結(jié)果包含進(jìn)來(lái)。
  不管是<jsp:include>標(biāo)簽,還是include指令,它們都會(huì)把兩個(gè)JSP頁(yè)面內(nèi)容合并輸出,所以這兩個(gè)頁(yè)面不要出現(xiàn)重復(fù)的HTML全局架構(gòu)標(biāo)簽,否則輸出給客戶端的內(nèi)容將會(huì)是一個(gè)格式混亂的HTML文檔。

2.3、*.jspf擴(kuò)展名文件在jsp:include、@include和c:import中的區(qū)別

  JSP規(guī)范建議使用.jspf(JSP fragments)作為靜態(tài)引入文件的擴(kuò)展名。今天無(wú)意中發(fā)現(xiàn),把一個(gè)JSP文件命名為jspf擴(kuò)展名,然后include到另一個(gè)jsp文件中的,發(fā)現(xiàn)只有用"@include"指令的時(shí)候,jspf文件的內(nèi)容才會(huì)被解析并執(zhí)行其中的jsp指令和tag,而使用"jsp:include"和JSTL的"c:import"都沒(méi)有用,jspf文件被當(dāng)作純文本文件處理了。

比如現(xiàn)在有一個(gè)head.jspf頁(yè)面和foot.jspf頁(yè)面

head.jspf

1 <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> 2 <h1 style="color:red;">網(wǎng)頁(yè)頭部</h1>

foot.jspf

1 <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> 2 <h1 style="color:blue;">網(wǎng)頁(yè)尾部</h1>

首先使用"@include"指令將"head.jspffoot.jspf"?include到IncludeTagTest.jsp頁(yè)面,如下所示:

1 <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> 2 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> 3 <html> 4 <head> 5 <title>jsp的Include指令測(cè)試</title> 6 </head> 7 8 <body> 9  <%--使用include標(biāo)簽引入引入jspf頁(yè)面--%> 10 <%@include file="/jspfragments/head.jspf" %> 11 <h1>網(wǎng)頁(yè)主體內(nèi)容</h1> 12 <%@include file="/jspfragments/foot.jspf" %> 13 </body> 14 </html>

  運(yùn)行IncludeTagTest.jsp頁(yè)面,運(yùn)行結(jié)果如下:

  

  jspf文件的內(nèi)容會(huì)被解析并執(zhí)行其中的jsp指令和tag,查看瀏覽器解析JspIncludeTagTest.jsp頁(yè)面生成的源代碼,如下所示:

  

  然后再使用<jsp:include>"標(biāo)簽將"head.jspffoot.jspf"?include到JspIncludeTagTest.jsp頁(yè)面中,如下所示:

1 <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> 2 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> 3 <html> 4 <head> 5 <title>jsp的jsp:include標(biāo)簽測(cè)試</title> 6 </head> 7 8 <body> 9 <%--使用jsp:include標(biāo)簽引入其它JSPf頁(yè)面--%> 10 <jsp:include page="/jspfragments/head.jspf"/> 11 <h1>網(wǎng)頁(yè)主體內(nèi)容</h1> 12 <jsp:include page="/jspfragments/foot.jspf"/> 13 </body> 14 </html>

運(yùn)行JspIncludeTagTest.jsp頁(yè)面,運(yùn)行結(jié)果如下:

  

  查看瀏覽器解析JspIncludeTagTest.jsp頁(yè)面生成的源代碼,如下所示:

  

  可以看到,head.jspffoot.jspf中的<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>沒(méi)有解析執(zhí)行,而是原封不動(dòng)地作為文本內(nèi)容輸出到頁(yè)面上了,在IE下看不到<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>的輸出,在google和火狐瀏覽器下運(yùn)行可以看到頁(yè)面上輸出<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>,如下所示:

  

  這說(shuō)明jspf文件Tomcat服務(wù)器被當(dāng)作純文本文件處理了,沒(méi)有當(dāng)作jsp頁(yè)面來(lái)解析執(zhí)行,那么該如何解決這個(gè)問(wèn)題呢?如何讓tomcat服務(wù)器能夠解析執(zhí)行*.jspf文件中的java代碼和標(biāo)簽?zāi)?#xff0c;有如下的幾種解決辦法:

解決辦法一:修改web.xml文件,添加對(duì)擴(kuò)展名為*.jspf文件的映射

如下所示:

1 <!-- 讓jspf擴(kuò)展名同樣成為JSP Servlet處理的文件。 --> 2 <servlet-mapping> 3 <servlet-name>jsp</servlet-name> 4 <url-pattern>*.jspf</url-pattern> 5 </servlet-mapping> 6 <!-- 讓jsp擴(kuò)展名同樣成為JSP Servlet處理的文件。 --> 7 <servlet-mapping> 8 <servlet-name>jsp</servlet-name> 9 <url-pattern>*.jsp</url-pattern> 10 </servlet-mapping>

  上面的配置方式也可以簡(jiǎn)寫成這樣:

1 <servlet-mapping> 2 <servlet-name>jsp</servlet-name> 3 <url-pattern>*.jsp</url-pattern> 4 <!-- 讓jspf擴(kuò)展名同樣成為JSP Servlet處理的文件。--> 5 <url-pattern>*.jspf</url-pattern> 6 </servlet-mapping>

  兩種寫法的效果都是一樣的。

添加這樣的配置信息后,此時(shí)tomcat服務(wù)器就可以正常解析執(zhí)行*.jspf文件了,如下所示:

  

解決辦法二:修改Tomcat服務(wù)器的web.xml文件,添加對(duì)擴(kuò)展名為*.jspf文件的映射

找到tomcat服務(wù)器的web.xml文件,如下所示:

  

找到名字為jsp的那個(gè)Servlet,如下所示:

1 <servlet> 2 <servlet-name>jsp</servlet-name> 3 <servlet-class>org.apache.jasper.servlet.JspServlet</servlet-class> 4 <init-param> 5 <param-name>fork</param-name> 6 <param-value>false</param-value> 7 </init-param> 8 <init-param> 9 <param-name>xpoweredBy</param-name> 10 <param-value>false</param-value> 11 </init-param> 12 <load-on-startup>3</load-on-startup> 13 </servlet>

然后根據(jù)Servlet名找到對(duì)應(yīng)的servlet-mapping配置,如下所示:

1 <!-- The mappings for the JSP servlet --> 2 <servlet-mapping> 3 <servlet-name>jsp</servlet-name> 4 <url-pattern>*.jsp</url-pattern> 5 <url-pattern>*.jspx</url-pattern> 6 </servlet-mapping>

在這里可以看到,名字為jsp的那個(gè)Servlet只支持*.jsp和*.jspx兩種擴(kuò)展名,因此可以在這個(gè)地方添加多一個(gè)<url-pattern>*.jspf</url-pattern>,如下所示:

1 <!-- The mappings for the JSP servlet --> 2 <servlet-mapping> 3 <servlet-name>jsp</servlet-name> 4 <url-pattern>*.jsp</url-pattern> 5 <url-pattern>*.jspx</url-pattern> 6 <url-pattern>*.jspf</url-pattern> 7 </servlet-mapping>

  經(jīng)過(guò)這樣的配置之后,Tomcat服務(wù)器就可以正常解析和執(zhí)行*.jspf文件了。

2.3、<jsp:forward>標(biāo)簽

  <jsp:forward>標(biāo)簽用于把請(qǐng)求轉(zhuǎn)發(fā)給另外一個(gè)資源。
  語(yǔ)法:
?? ?  <jsp:forward page="relativeURL | <%=expression%>" />?
  page屬性用于指定請(qǐng)求轉(zhuǎn)發(fā)到的資源的相對(duì)路徑,它也可以通過(guò)執(zhí)行一個(gè)表達(dá)式來(lái)獲得。

范例:使用<jsp:forward>標(biāo)簽跳轉(zhuǎn)頁(yè)面

forwarddemo01.jsp

1 <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> 2 <%--使用<jsp:forward>標(biāo)簽跳轉(zhuǎn)到forwarddemo02.jsp--%> 3 <jsp:forward page="/forwarddemo02.jsp"/>

forwarddemo02.jsp

1 <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> 2 <h1>跳轉(zhuǎn)之后的頁(yè)面!!</h1>

運(yùn)行結(jié)果如下:

  

  從頁(yè)面的顯示效果來(lái)看,頁(yè)面已經(jīng)完成了跳轉(zhuǎn),但地址欄沒(méi)有變化,地址欄中顯示的地址還是forwarddemo01.jsp,但頁(yè)面顯示的內(nèi)容卻是forwardemo02.jsp中的內(nèi)容。因?yàn)榇颂D(zhuǎn)屬于服務(wù)器端跳轉(zhuǎn)。只要是服務(wù)器端跳轉(zhuǎn),則地址欄永遠(yuǎn)沒(méi)有變化。

2.4、<jsp:param>標(biāo)簽

  當(dāng)使用<jsp:include>和<jsp:forward>標(biāo)簽引入或?qū)⒄?qǐng)求轉(zhuǎn)發(fā)給其它資源時(shí),可以使用<jsp:param>標(biāo)簽向這個(gè)資源傳遞參數(shù)。
  語(yǔ)法1:
????<jsp:include page="relativeURL | <%=expression%>">
?? ??? ?<jsp:param name="parameterName" value="parameterValue|<%= expression %>" />
?? ?</jsp:include>
  語(yǔ)法2:
?? ?<jsp:forward page="relativeURL | <%=expression%>">
?? ??? ?<jsp:param name="parameterName" value="parameterValue|<%= expression %>" />
?? ?</jsp:include>
  <jsp:param>標(biāo)簽的name屬性用于指定參數(shù)名,value屬性用于指定參數(shù)值。在<jsp:include>和<jsp:forward>標(biāo)簽中可以使用多個(gè)<jsp:param>標(biāo)簽來(lái)傳遞多個(gè)參數(shù)。

范例:使用<jsp:param>標(biāo)簽向被包含的頁(yè)面?zhèn)鬟f參數(shù)

JspIncludeTagDemo03.jsp

1 <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> 2 <h1>JspIncludeTagDemo03.jsp</h1> 3 <hr/> 4 <jsp:include page="/jspfragments/Inc.jsp"> 5 <jsp:param name="parm1" value="hello" /> 6 <jsp:param name="parm2" value="gacl" /> 7 </jsp:include>

Inc.jsp

1 <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> 2 <h1>接收從JspIncludeTagDemo03.jsp頁(yè)面中傳遞過(guò)來(lái)的參數(shù):</h1> 3 <h2><%=request.getParameter("parm1")%></h2> 4 <h2><%=request.getParameter("parm2")%></h2>

  在JspIncludeTagDemo03.jsp頁(yè)面中使用<jsp:include>標(biāo)簽將Inc.jsp頁(yè)面包含進(jìn)來(lái),使用<jsp:param/>標(biāo)簽向Inc.jsp頁(yè)面?zhèn)鬟f了兩個(gè)參數(shù)parm1和parm2

  JspIncludeTagDemo03.jsp頁(yè)面運(yùn)行結(jié)果如下:

  

?范例:使用<jsp:param>標(biāo)簽向要跳轉(zhuǎn)的頁(yè)面?zhèn)鬟f參數(shù)

forwarddemo03.jsp

1 <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> 2 <%--使用<jsp:forward>標(biāo)簽跳轉(zhuǎn)到forwarddemo04.jsp--%> 3 <%--使用<jsp:param>標(biāo)簽向forwarddemo04.jsp傳遞參數(shù)--%> 4 <jsp:forward page="/forwarddemo04.jsp"> 5 <jsp:param name="ref1" value="hello" /> 6 <jsp:param name="ref2" value="gacl" /> 7 </jsp:forward>

forwarddemo04.jsp

1 <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> 2 <h1>跳轉(zhuǎn)之后的頁(yè)面!!</h1> 3 <h1>接收從forwarddemo03.jsp傳遞過(guò)來(lái)的參數(shù):</h1> 4 <h1>ref1:<%=request.getParameter("ref1")%></h1> 5 <h1>ref2:<%=request.getParameter("ref2")%></h1>

運(yùn)行結(jié)果如下:

  

總結(jié)

以上是生活随笔為你收集整理的javaweb学习总结(十九):JSP标签的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。