1. 程式人生 > >JavaWeb學習 (十八)————JSP標籤

JavaWeb學習 (十八)————JSP標籤

一、JSP標籤介紹

  JSP標籤也稱之為Jsp Action(JSP動作)元素,它用於在Jsp頁面中提供業務邏輯功能,避免在JSP頁面中直接編寫java程式碼,造成jsp頁面難以維護。

二、JSP常用標籤

  jsp的常用標籤有以下三個

  • <jsp:include>標籤  
  • <jsp:forward>標籤  
  • <jsp:param>標籤

2.1、<jsp:include>標籤 

  <jsp:include>標籤用於把另外一個資源的輸出內容插入進當前JSP頁面的輸出內容之中,這種在JSP頁面執行時的引入方式稱之為動態引入。
語法:
    <jsp:include page="relativeURL | <%=expression%>" flush="true|false" />


  page屬性用於指定被引入資源的相對路徑,它也可以通過執行一個表示式來獲得。
  flush屬性指定在插入其他資源的輸出內容時,是否先將當前JSP頁面的已輸出的內容重新整理到客戶端。 

範例:使用jsp:include標籤引入資源

複製程式碼
 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標籤測試</title>
 6   </head>
 7 
 8   <body>
 9   <%--使用jsp:include標籤引入其它JSP頁面--%>
10   <jsp:include page="/jspfragments/head.jsp"/>
11     <h1>網頁主體內容</h1>
12     <jsp:include page="/jspfragments/foot.jsp"/>
13   </body>
14 </html>
複製程式碼

執行結果:

  

2.2、<jsp:include>標籤與include指令的區別

  <jsp:include>標籤是動態引入, <jsp:include>標籤涉及到的2個JSP頁面會被翻譯成2個servlet,這2個servlet的內容在執行時進行合併。 
  而include指令是靜態引入,涉及到的2個JSP頁面會被翻譯成一個servlet,其內容是在原始檔級別進行合併。

  通過下面的例子來說明<jsp:include>標籤與include指令的區別

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>標籤兩種包含語句,包含以上的demo.jsp

範例:使用@include包含內容

複製程式碼
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>
複製程式碼

此時在編譯jsp時就已經提示出錯了,如下所示:

  

  這個錯誤說的是變數i已經重複定義了

  執行JspIncludeTagDemo01.jsp,結果如下:

  

  執行後發現出現了重複定義變數i的錯誤提示資訊,因為靜態包含是將全部內容包含進來之後,再進行處理,屬於先包含後處理。由於被包含進來的頁面demo.jsp中定義了一個變數i,而包含頁面JspIncludeTagDemo01.jsp本身又定義了一個變數i,所以伺服器在處理JspIncludeTagDemo01.jsp這個頁面時就會發現裡面有兩個重複定義的變數i,因此就會報錯。

而如果現在使用的是<jsp:include>動態包含的話,觀察以下程式:

範例:使用動態包含

複製程式碼
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>
複製程式碼

執行結果:

  

  發現結果已經可以正確地顯示,而且不會互相影響,這是因為使用jsp:include屬於動態包含,動態包含就是指先將各個頁面分別處理,處理完之後再將處理後的結果包含進來。
  不管是<jsp:include>標籤,還是include指令,它們都會把兩個JSP頁面內容合併輸出,所以這兩個頁面不要出現重複的HTML全域性架構標籤,否則輸出給客戶端的內容將會是一個格式混亂的HTML文件。

2.3、*.jspf副檔名檔案在jsp:include、@include和c:import中的區別

  JSP規範建議使用.jspf(JSP fragments)作為靜態引入檔案的副檔名。今天無意中發現,把一個JSP檔案命名為jspf副檔名,然後include到另一個jsp檔案中的,發現只有用"@include"指令的時候,jspf檔案的內容才會被解析並執行其中的jsp指令和tag,而使用"jsp:include"和JSTL的"c:import"都沒有用,jspf檔案被當作純文字檔案處理了。

比如現在有一個head.jspf頁面和foot.jspf頁面

head.jspf

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

foot.jspf

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

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

複製程式碼
 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指令測試</title>
 6   </head>
 7 
 8   <body>
 9    <%--使用include標籤引入引入jspf頁面--%>
10     <%@include file="/jspfragments/head.jspf" %>
11     <h1>網頁主體內容</h1>
12     <%@include file="/jspfragments/foot.jspf" %>
13   </body>
14 </html>
複製程式碼

  執行IncludeTagTest.jsp頁面,執行結果如下:

  

  jspf檔案的內容會被解析並執行其中的jsp指令和tag,檢視瀏覽器解析JspIncludeTagTest.jsp頁面生成的原始碼,如下所示:

  

  然後再使用<jsp:include>"標籤將"head.jspffoot.jspf" include到JspIncludeTagTest.jsp頁面中,如下所示:

複製程式碼
 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標籤測試</title>
 6   </head>
 7 
 8   <body>
 9   <%--使用jsp:include標籤引入其它JSPf頁面--%>
10   <jsp:include page="/jspfragments/head.jspf"/>
11     <h1>網頁主體內容</h1>
12     <jsp:include page="/jspfragments/foot.jspf"/>
13   </body>
14 </html>
複製程式碼

執行JspIncludeTagTest.jsp頁面,執行結果如下:

  

  檢視瀏覽器解析JspIncludeTagTest.jsp頁面生成的原始碼,如下所示:

  

  可以看到,head.jspffoot.jspf中的<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>沒有解析執行,而是原封不動地作為文字內容輸出到頁面上了,在IE下看不到<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>的輸出,在google和火狐瀏覽器下執行可以看到頁面上輸出<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>,如下所示:

  

  這說明jspf檔案Tomcat伺服器被當作純文字檔案處理了,沒有當作jsp頁面來解析執行,那麼該如何解決這個問題呢?如何讓tomcat伺服器能夠解析執行*.jspf檔案中的java程式碼和標籤呢,有如下的幾種解決辦法:

解決辦法一:修改web.xml檔案,新增對副檔名為*.jspf檔案的對映

如下所示:

複製程式碼
 1     <!-- 讓jspf副檔名同樣成為JSP Servlet處理的檔案。 -->
 2     <servlet-mapping>
 3         <servlet-name>jsp</servlet-name>
 4         <url-pattern>*.jspf</url-pattern>
 5     </servlet-mapping>
 6     <!-- 讓jsp副檔名同樣成為JSP Servlet處理的檔案。 -->
 7     <servlet-mapping>
 8         <servlet-name>jsp</servlet-name>
 9         <url-pattern>*.jsp</url-pattern>
10     </servlet-mapping>
複製程式碼

  上面的配置方式也可以簡寫成這樣:

複製程式碼
1     <servlet-mapping>
2         <servlet-name>jsp</servlet-name>
3         <url-pattern>*.jsp</url-pattern>
4         <!-- 讓jspf副檔名同樣成為JSP Servlet處理的檔案。-->
5         <url-pattern>*.jspf</url-pattern>
6     </servlet-mapping>
複製程式碼

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

新增這樣的配置資訊後,此時tomcat伺服器就可以正常解析執行*.jspf檔案了,如下所示:

  

解決辦法二:修改Tomcat伺服器的web.xml檔案,新增對副檔名為*.jspf檔案的對映

找到tomcat伺服器的web.xml檔案,如下所示:

  

相關推薦

JavaWeb學習 ()————JSP標籤

一、JSP標籤介紹   JSP標籤也稱之為Jsp Action(JSP動作)元素,它用於在Jsp頁面中提供業務邏輯功能,避免在JSP頁面中直接編寫java程式碼,造成jsp頁面難以維護。 二、JSP常用標籤   jsp的常用標籤有以下三個 <jsp:include>標籤  

JavaWeb學習 (四)————JSP基礎語法

一、JSP模版元素   JSP頁面中的HTML內容稱之為JSP模版元素。   JSP模版元素定義了網頁的基本骨架,即定義了頁面的結構和外觀。 二、JSP表示式   JSP指令碼表示式(expression)用於將程式資料輸出到客戶端      語法:<%=

---HTML標籤學習

1, 標題,段落標籤 <h1>內容</h1> <p>內容</p> 2, 圖片標籤 <img src="---" alt="--" ti

java核心學習() javaNIO框架---“塊”模型的IO

rac tag pmod 輸出流 decode 非阻塞 實際應用 byte channel 一、java新IO概述   javaIO中的輸入流和輸出流都是通過字節的移動來處理的,面向流的輸入輸出系統一次只能處理一個字節,因此效率不高,而且傳統的輸入輸出流是阻塞試的,也就是說

Maven學習()-----Maven依賴管理

oca 子項目 sta stage clu padding 類型 type 核心 其中一個Maven的核心特征是依賴管理。管理依賴關系變得困難的任務一旦我們處理多模塊項目(包含數百個模塊/子項目)。 Maven提供了一個高程度的控制來管理這樣的場景。 傳遞依賴發現 這是很通

學習

linux運維四周第四次課(3月1日)6.1 壓縮打包介紹6.2 gzip壓縮工具6.3 bzip2壓縮工具6.4 xz壓縮工具 四周第五次課(3月2日)6.5 zip壓縮工具6.6 tar打包6.7 打包並壓縮看下這個帖子: http://ask.apelearn.com/question/5435壓縮打包

JavaWeb學習——Cookie與JSP

tco ram als -a 學習 常用 char ons exp 一、Cookie簡介 Cookie 指某些網站為了辨別用戶身份、進行 session 跟蹤而儲存在用戶本地終端上的數據。 Cookie 是由 Web 服務器保存在用戶瀏覽器上的小文本文件

前端學習()js的json(筆記)

單獨 arguments class date 兼容ie turn tst clas .get json: 數組: 1.有序 var arr=[2,1,3,4] arr[0]; 2.有length

spring學習 spring的聲明事物

效率 UNC comm 修改 一次 tor 訪問 oca ont 1.編程式事務:  1.1 由程序員編程事務控制代碼.commit與rollback都需要程序員決定在哪裏調用,例如jdbc中conn.setAutoCimmit(false),conn.commit(),c

javaWeb學習日記_22:JSP的九大內建物件和動作

九個內建物件 out --> jsp的輸出流,用來向客戶端響應  page --> 當前jsp物件! 它的引用型別是Object,即真身中有如下程式碼:Object page = this;  config --> 它對應真身中的Ser

javaWeb學習日記_21:JSP指令

JSP有20個指令,但是一般的指令都沒有用,常用的有三個指令:page,include,taglib。 1. page --> 最複雜:<%@page language="java" info="xxx"...%>   (1) pageEncodi

javaWeb學習日記_18:JSP基礎

1. jsp的作用:   * Servlet:     > 缺點:不適合設定html響應體,需要大量的response.getWriter().print("<html>")     > 優點:動態資源,可以程式設計。 &

javaweb學習總結()——GET和POST的區別

原理性上的區別      HTTP定義了與伺服器互動的不同方法,最基本的方法有4種,分別是GET、POST、PUT、DELETE。URL全稱是資源描述符,我們可以這麼認為:一個URL地址,它用於描述網路上的一個資源,而HTTP的GET、POST、PUT、DELETE就對應著

Linux Bash Shell學習 String I/O——echo和printf

                  本文也即《Learning the bash Shell》3rd Edition的第七章Input/Output and Command-Line Processing之讀書筆記之二。echo  echo是非常常用的shell命令。引數如下:-e:開啟反斜槓字元backsl

JavaWeb學習總結(十三)JSP中的九個內建物件

一、JSP執行原理   每個JSP 頁面在第一次被訪問時,WEB容器都會把請求交給JSP引擎(即一個Java程式)去處理。JSP引擎先將JSP翻譯成一個_jspServlet(實質上也是一個servlet) ,然後按照servlet的呼叫方式進行呼叫。   由於JSP第一次訪問時會翻譯成serv

JavaWeb學習)HttpServletRequest基本應用——獲得客戶端的請求(1)

一、HttpServletRequest介紹   HttpServletRequest物件代表客戶端的請求,當客戶端通過HTTP協議訪問伺服器時,HTTP請求頭中的所有資訊都封裝在這個物件中,通過這個物件提供的方法,可以獲得客戶端請求的所有資訊。 二、Request常用方法 2.1 獲得

JavaWeb學習篇之----Jsp詳解

今天我們來看一下Jsp的相關知識,首先來看看一下Jsp的相關定義: 簡介: JSP全稱是JavaServer Pages,它和servle技術一樣,都是SUN公司定義的一種用於開發動態web資源的技術。 JSP這門技術的最大的特點在於,寫jsp就像在寫html,但: 它相

ActionScript 3.0 學習() away3D學習3 away3d骨骼動畫相關筆記

            1.怎麼為一個Mesh設定各個不同部位的面板? 呼叫Mesh的subMeshes,但前提是你的Mesh裡有SubMesh... mesh.subMeshes[index].material = new

JavaWeb)--MAVEN

Maven 安裝:       解壓縮Maven資料夾 配置一個M2_HOME和MAVEN_HOME環境變數,指向變數的Maven的安裝目錄。       配置PATH環境變數。變

推薦系統遇上深度學習()--探祕阿里之深度興趣網路(DIN)淺析及實現

阿里近幾年公開的推薦領域演算法有許多,既有傳統領域的探索如MLR演算法,還有深度學習領域的探索如entire -space multi-task model,Deep Interest Network等,同時跟清華大學合作展開了強化學習領域的探索,提出了MARDPG演算法。上一篇,我們介紹了MLR演算法,通過