亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > JSP > 正文

include與jsp:include與s:action與s:include與iframe用法匯總

2019-11-08 02:59:02
字體:
來源:轉載
供稿:網友

include與jsp:include與s:action與s:include與iframe用法匯總

1.<%@ include file="../top/top.jsp"%> 2.<jsp:include page="coupon.jsp"/> 3.<iframe src="" width="100%" height="200" ></iframe> 4.<s:include value="/CMS/headers/wrap/header.jsp"/> 5.<s:action name="cmsPoint" namespace="/include"/> jsp開發時,這五種常用的頁面引入標簽,到底有什么區別,各自適應場合是什么,相信很多人都不陌生,但又感覺莫林兩可的,本文將做一個全面的匯總。 注:本文雖然各方面都涉及到了,但是很多細節還沒列出來,后續在開發中還會不斷總結不斷完善,希望與廣大it從業的朋友們多交流,共同進步。 ------------------------------------------------------------------------------ 首先看include和jsp:include <%@ include file=” ”%> <jsp:include page=” ” flush=”true”/> 前者是指令元素、后者是行為元素。具體它們將在何處用?如何用及它們有什么區別?這該是很多人看到它都會想到的問題。下面一起來看看吧。 通常當應用程序中所有的頁面的某些部分(例如標題、頁腳和導航欄)都相同的時候,我們 就可以考慮用include。具體在哪些時候用<%@ include file=” ”%>,哪些時候用 <jsp:include page=” ” flush=”true”/>.這種形式。首先要明白的是它們之間的區別 。只有了解了它們用法的不同才理解該在何時去用以及如何選擇。 <%@ include file=” ”%>,jsp的include指令元素讀入指定頁面的內容。并把這些內容和原來的頁面融合到一起。(這個過程是在翻譯階段:也就是jsp被轉化成servlet的階段進行的 。) 這里對翻譯階段進行一下說明:我們知道,jsp頁面不能原封不動地被傳送給瀏覽器,所有的 jsp元素都必須首先由服務器進行處理。這是通過將jsp頁面轉達化成servlet,然后執行這個servlet來完成的。服務器需要一個jsp容器來處理jsp頁面。jsp容器通常以servlet的形式來實現,這個servlet經過配置,可以處理對jsp頁面的所有請求。 Jsp容器負責將jsp頁面轉化成servlet(稱為jsp頁面實現類?JSP Page implementation class),并編譯這個servlet。這兩步就構成了翻譯階段. 由此我們就會知道:jsp頁面是把include指令元素所指定的頁面的實際內容(也就是代碼段 )加入到引入它的jsp頁面中,合成一個文件后被jsp容器將它轉化成servlet??梢钥吹竭@時 會產生一個臨時class文件和一個java文件。下面舉個例子。 服務器用tomcat,引入頁面的jsp文件叫test.jsp。被引入的頁面叫date.jsp.這個jsp文件 里存放的是一個有關時間的jsp代碼,當前的上下文根設為test //======date.jsp的源文件=====// Html代碼  收藏代碼<%@ page language=”java” c%>   <%   java.util.Date date=new java.util.Date();   String date_cn ="";   String dateStr = "";   switch(date.getDay())   {   case 0:date_cn ="日"; break;   case 1:date_cn ="一"; break;   case 2:date_cn ="二"; break;   case 3:date_cn ="三"; break;   case 4:date_cn ="四"; break;   case 5:date_cn ="五"; break;   case 6:date_cn ="六"; break;   }   dateStr = (1900+date.getYear()) + "年" + (date.getMonth()+1) + "月" +     date.getDate() + "日(星期" + date_cn + ")";   %>   document.write("<%=dateStr%>");   //======以下是test.jsp的源文件=============// Html代碼  收藏代碼<%@ page language=”java” contentType=”text/html;charset=gb2312”%>   <html>   <head>   <title>include的兩種用法</title>   <jsp:include page=”date.jsp” flush=”true”/>   <%--@ include file=”date.jsp” %-->   //我們在這里用include的兩種不同形式來引入date.jsp這個文件.   <head>   <body>   <table><tr><td>   有關jsp中include的兩種用法.敬請關注。   </td></tr></table>   </body>   </html>   在test.jsp 文件中,我們只輸出了一行文本“ 有關jsp中include的兩種用法.敬請關注。 ”,現在讓我們先用<%@ include file=”date.jsp” %>這種形式引入date.jsp這個文件。 你想會出現什么問題了嗎?此時出現了錯誤提示: HTTP Status 500 ? org.apache.jasper.JasperException: /date.jsp(0,0) Page directive: can't have multiple occurrences of contentType 以下還有一堆錯誤,但我們只要看這里就知道問題的所在了。狀態碼為http 500服務器內部 錯誤。再看下面的提示。在date.jsp頁面中不能指定多個contentType. 原因就在這里了。 是因為在翻譯階段,date.jsp文件的代碼被原封不動地加入到了test.jsp頁面從而合成一個 文件。合成后的文件中就會相同的: <%@ page language=”java” contentType=”text/html;charset=gb2312”%> 這句代碼。解決的辦法是把date.jsp文件中的這句刪掉。刷新后再請求test.jsp頁面 請求test.jsp在頁面顯示如下 2003年12月10日 13:12:40 這時我們還不能發現什么。還是去查看tomcat下的臨時文件吧。到那里去看看date.jsp文件 的內容是否已被加入到了test.jsp文件中。 在目錄下會看到test_jsp.java和test_jsp.class兩個文件. 這里的java文件就是jsp容器將jsp轉化成了servlet而得到的test_jsp.java這個文件。相對 應的test_jsp.class這 個文件就是編譯test_jsp.java這個servlet文件產生的類文件了。 打開所產生的servlet文件(test_jsp.java),此時 我們會發現,在test.jsp 文件被轉化 成servlet文件時,在輸出的<haed>之間加入了一些不是test.jsp頁面里面的代碼,新加入的 內容就是 date.jsp里面的代碼: 新加入了哪些內容或是否真的加入了新的內容請自己測試 去看一下就會一目了然了.在這里不再詳述. 以上就是我們用<%@ include file=”date.jsp”%>這種形式得到的結果. 下面我們換用<jsp:include page=”dae.jsp” flush=”true”/>也就是將 <%@ include file=”date.jsp”%>換成<jsp:include page=”dae.jsp” flush=”true”/>,然后請求test.jsp. 2003? ê 12??10?? 13:30:13 此時會在頁面上看見.我們所引入date.jsp輸出的日期中中文出現了亂碼.什么原因?是因為 include行為元素是在請求處理階段執行的(此處要對 請求處理階段進行說明一下,Jsp容器 除了上面提到的負責將jsp頁面轉化成servlet外,還負責調用jsp頁面實現類以處理每個請求 并產生應答.這 個階段我們就稱為請求處理階段.請求處理階段僅執行類文件)。 所以在我們作include行為元素引入頁面時,實際只是引用了date.jsp這個文件被轉化并被編 譯后產生的servlet類文件.既如此, date.jsp就是作為一個單獨的文件在執行后才被 test.jsp文件運行時調用.由于date.jsp文件中沒有指定字符編碼.所以出現了亂碼.解 決辦 法是在date.jsp文件中重新把剛才去掉的 <%@ page language=”java” contentType=”text/html;charset=gb2312”%> 這行語句加入后刷新重新運行.此時頁面顯示正確,并跟用include指令正常運行時一樣.再查 看tomcat下的臨時文件會發現.此時多出了一個 date_jsp.java文件和一個date_jsp.class 文件.這兩個文件得來的方式跟test_jsp.java和 test_jsp.class文件得來的方式一樣.再查 看一下此時test_jsp.java文件的代碼會發現.此時只新增加了一句代碼: JsPRuntimeLibrary.include(request, response, "date.jsp", out, true); 它并沒有把date.jsp文件的代碼加入到test.jsp.只是在運行時引入了date.jsp頁面執行后 所產生的應答.這意味著我們可以指定任何能 夠產生應答的Web資源,(例如一個servlet或一 個jsp頁面),只要這些資源所產生的類型和jsp頁面產生的內容類型相同.JSP容器將通過一個 內部的函數調用來執行指定的資源.因此,這些被引入的資源可以幫助處理原來的請求,所以 這些資源可以訪問請求作用域內的所有對象.以及所有原來的請求參 數. 由于在主頁面被請求時,這些頁面還沒有被引入到主頁面中,所以你可以對page屬性使用一個 請求時屬性值,以便根據運行時的情況來決定要引入哪一個頁面.還可以添加一些將被引入的 頁面讀取的請求參數. <jsp:include page=”<%=pageSelectedAtRuntime%>” flush=”true” > <jsp:param name=”fitstParamer” value=”firstValue”> <jsp:param name=”lastParamer” value=”lastValue”> </jsp:include> 如果修改了被引入的jsp頁面,那么可以立刻使用該頁面的最新版本,這是因為對待被引入的 頁面的方式與對待由瀏覽器直接調用的jsp頁面的方式完全相同.即容器檢測頁面的變化,并 自動進入翻譯階段,以得到頁面的最新版本. (注意,include行為元素同jsp其它元素一樣,沒有行為體時要以”/”結束.就像下面這樣. <jsp:include page=”<%=pageSelectedAtRuntime%>” flush=”true” />) 以下是對include 兩種用法的區別 主要有兩個方面的不同; 一:執行時間上: <%@ include file=”relativeURI”%> 是在翻譯階段執行 <jsp:include page=”relativeURI” flush=”true” /> 在請求處理階段執行. 二:引入內容的不同: <%@ include file=”relativeURI”%> 引入靜態文本(html,jsp),在JSP頁面被轉化成servlet之前和它融和到一起. <jsp:include page=”relativeURI” flush=”true” />引入執行頁面或servlet所生成的 應答文本. 另外在兩種用法中file和page屬性都被解釋為一個相對的URI.如果它以斜杠開頭,那么它就 是一個環境相關的路徑.將根據賦給應用程序的URI的前綴進行解釋,如果它不是以斜杠開頭, 那么就是頁面相關的路徑,就根據引入這個文件的頁面所在的路徑進行解釋. ------------------------------------------------------------------------- 如果用了struts2框架,則還有以下的用法。 <s:include value="/header.jsp"> <s:param name="mKeyWords"> <s:property value="couponDetailVO.storeName"/>團購</s:param> </s:include> <s:action name="cmsPoint" namespace="/include" executeResult="true" ignoreContextParams="true"> <s:param name="type" value="'headers/new/include'"></s:param> <s:param name="match" value="'footer_950'"></s:param> <s:param name="query" value="'city='+oldCity"></s:param> </s:action> 使用action標簽,可以允許在jsp頁面中直接調用Action,在調用Action時候,可以指定需要被 調用的Action的name和namespace.如果指定了executeResult參數的屬性值為true,該標簽會 把Action的處理結果(視圖資源)包含到本頁面中. 使用action標簽指定屬性有: id: 可選屬性,作為該Action的引用ID    name:必選屬性,指定調用Action    namespace:可選屬性,指定該標簽調用Action所屬namespace    executeResult:必選屬性,指定是否將Action的處理結果包含到本頁面中.默認值為false,不 包含.    ignoreContextParam:可選參數,指定該頁面的請求參數是否需要傳入調用的Action中,默認 值是false,即傳入參數.  下面看一個完整的調用示例: Html代碼  收藏代碼<%@ page language="java" contentType="text/html; charset=utf-8"      pageEncoding="utf-8"%>      <%@taglib prefix="s" uri="/struts-tags" %>  <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"     "http://www.w3.org/TR/html4/loose.dtd">  <html>  <head>  <meta http-equiv="Content-Type" content="text/html; charset=utf-8">  <title>Insert title here</title>  </head>  <body>  <s:action name="head!toHead" executeResult="true">  <s:param name="headName">s.action測試</s:param>  </s:action>  </body>  </html>  struts.xml Xml代碼  收藏代碼<!--測試一些頁面引入標簽 -->  <action name="head" class="com.SactionIncludeTest">    <result name="head">/head.jsp</result>  </action>  </package>  Java代碼  收藏代碼package com;    import javax.servlet.ServletContext;  import javax.servlet.http.HttpServletRequest;    import org.apache.struts2.ServletActionContext;    import com.opensymphony.xwork2.ActionSupport;    public class SactionIncludeTest extends ActionSupport  {      private String headName;                  public String getHeadName() {          return headName;      }          public void setHeadName(String headName) {          this.headName = headName;      }          public String toHead(){          HttpServletRequest request=ServletActionContext.getRequest();          String attrHeadName=(String)request.getAttribute("headName");          System.out.println("attrHeadName:"+attrHeadName);          System.out.println("headName:"+this.getHeadName());          //可以通過以上兩種方式獲取到s.param的傳值,而下面的方法是接收不    到值的。                    String paramHeadName=request.getParameter("headName");          System.out.println("paramHeadName:"+paramHeadName);          return "head";                }  }  head.jsp Html代碼  收藏代碼<%@ page language="java" contentType="text/html; charset=utf-8"      pageEncoding="utf-8"%>  <%@ taglib prefix="s" uri="/struts-tags" %>  this is head content!  this is head content!  this is head content!  this is head content!  this is head content!  this is head content!<br/>  <s:property value="#request.headName" />  ----------------------------------- s:include的用法 s:include的效果與jsp:include效果是一樣的,一般我習慣用jsp:include 下面給一個完整示例: s-include.jsp Html代碼  收藏代碼<%@ page language="java" contentType="text/html; charset=utf-8"      pageEncoding="utf-8"%>  <%@ taglib prefix="s" uri="/struts-tags" %>  <html>  <head>  <meta http-equiv="Content-Type" content="text/html; charset=utf-8">  <title>Insert title here</title>  </head>  <body>  <s:include value="/foot.jsp">  <s:param name="footName">test footName!</s:param>  </s:include>  </body>  </html>  foot.jsp Jsp代碼  收藏代碼<%@ page language="java" contentType="text/html; charset=utf-8"      pageEncoding="utf-8"%>  <%@ taglib prefix="s" uri="/struts-tags" %>  <html>  <head>  <meta http-equiv="Content-Type" content="text/html; charset=utf-8">  <title>Insert title here</title>  </head>  <body>  This is foot!<br/>  可行的:<%=request.getParameter("footName") %>  可行的:${param.footName }<br/>  //寫面幾種方式都是錯誤的<br/>  requset.footName:<s:property value="#requset.footName" /><br/>  s-param.type:<s:property value="param.footName"/> <br/>  parameters.type:<s:property value="#parameters.footName"/><br/>  </body>  </html>  ------------------------------------------------------------------- iframe用法 iframe的src可以指向任何地址,它加載的是一個完整的dom模型。 include與jsp:include的歸納參考了一個兄弟的博客,他總結的非常清晰: http://www.cnblogs.com/Ghost-Draw-Sign/articles/1835974.html 總的來說: include與jsp:include用的比較多,基本可以滿足要求了. s:action在與s:include用的相對少一點。 iframe也很常用,不過據說它不利于搜索引擎。 
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
久久精品2019中文字幕| 亚洲国产天堂久久综合网| 国产精品高潮在线| 亚洲欧美一区二区三区在线| 亚洲电影免费观看高清完整版在线| 亚洲精品日韩av| 亚洲第一福利在线观看| 亚洲香蕉成视频在线观看| 91免费欧美精品| 中文国产成人精品| 日韩在线欧美在线| 九九综合九九综合| 亚洲第一网站免费视频| 一区二区三区视频免费在线观看| 久久久久女教师免费一区| 国产精品久久久91| 国产精品久久9| 欧美日韩在线观看视频小说| 欧美精品在线免费播放| xxx成人少妇69| 国产日韩欧美中文| 欧美日在线观看| 亚洲成人精品视频在线观看| 欧美成人精品在线播放| 欧美一性一乱一交一视频| 97精品国产97久久久久久春色| 久久久女人电视剧免费播放下载| 亚洲人成电影网站色xx| 亚洲精品美女免费| 国产精品久久久久久久app| 黄网动漫久久久| 日韩中文在线不卡| 欧美另类精品xxxx孕妇| 欧美精品性视频| 亚洲精品综合精品自拍| 国产精品96久久久久久又黄又硬| 中文字幕精品一区二区精品| 成人精品一区二区三区电影黑人| 欧美色播在线播放| 国产精品免费电影| 亚洲欧美在线磁力| 日韩电影在线观看免费| 成人午夜激情免费视频| 中文字幕日韩欧美在线视频| 国产精品女视频| 亚洲一区第一页| 国产精品一久久香蕉国产线看观看| 欧美国产精品日韩| 成人精品一区二区三区电影黑人| 粉嫩老牛aⅴ一区二区三区| 亚洲免费成人av电影| 久久青草福利网站| 久久亚洲电影天堂| 欧美激情国产高清| 日韩精品中文字幕在线播放| 中文字幕av一区| 久久男人的天堂| 成人性教育视频在线观看| 亚洲第一网站男人都懂| 亚洲91精品在线观看| 欧美人成在线视频| 久久久国产精品亚洲一区| 国产精品一区二区三区成人| 中文字幕av一区中文字幕天堂| 91在线看www| 色噜噜国产精品视频一区二区| 97视频在线观看亚洲| 午夜精品99久久免费| 96精品久久久久中文字幕| 日韩精品中文字幕有码专区| 成人中文字幕+乱码+中文字幕| 日韩精品极品在线观看播放免费视频| 久久综合亚洲社区| 在线精品播放av| 亚洲精选中文字幕| 中文字幕一精品亚洲无线一区| 亚洲精品一区在线观看香蕉| 色综合久综合久久综合久鬼88| 日韩在线观看av| 91日本视频在线| 欧美福利小视频| 亚洲伊人成综合成人网| 国产精品久久久一区| 欧美视频不卡中文| 日本久久久久亚洲中字幕| 国产亚洲精品高潮| 日韩美女av在线| 黑人巨大精品欧美一区二区免费| 亚洲精品视频久久| 国产精品久久久久久久电影| 国产精品69久久| 色妞久久福利网| 国产亚洲欧美一区| 国内精品一区二区三区四区| 亚洲自拍偷拍第一页| 欧美一级在线播放| 中文字幕欧美日韩| 亚洲色图50p| 亚洲欧洲一区二区三区在线观看| 亚洲最大成人免费视频| 亚洲美女视频网站| 91精品视频专区| 精品亚洲夜色av98在线观看| 日本老师69xxx| 久久91亚洲精品中文字幕| 超碰精品一区二区三区乱码| 欧美有码在线观看视频| 中文字幕综合一区| 国产成人精品综合久久久| 福利一区视频在线观看| 欧洲成人在线观看| 亚洲人成在线播放| 国产欧洲精品视频| 日韩在线观看电影| 欧美成人一区二区三区电影| 992tv成人免费影院| 青青久久av北条麻妃黑人| 91视频国产精品| 国产九九精品视频| 一区二区在线视频播放| 亚洲欧美日韩精品久久奇米色影视| 一区二区亚洲欧洲国产日韩| 欧美电影《睫毛膏》| 91精品国产91久久久久久吃药| 国产精品偷伦视频免费观看国产| 精品久久久国产| 97香蕉超级碰碰久久免费的优势| 久久青草福利网站| 色狠狠久久aa北条麻妃| 日韩中文字幕视频在线| 日韩欧美一区二区三区久久| 九九热最新视频//这里只有精品| 91免费版网站入口| 国产在线一区二区三区| 国产精品视频自在线| 中文字幕亚洲欧美在线| 日韩亚洲第一页| 亚洲欧美制服综合另类| 国产美女高潮久久白浆| 欧美专区中文字幕| 亚洲另类欧美自拍| 日韩精品极品视频| 国产精品极品在线| 法国裸体一区二区| 成人免费高清完整版在线观看| 亚洲黄页视频免费观看| 国产精品久久久久久久久久尿| 亚洲精品电影在线观看| 国产精品久久久久高潮| 日韩在线视频线视频免费网站| 国产精品视频999| 在线精品视频视频中文字幕| 亚洲人成在线一二| 国产又爽又黄的激情精品视频| 久久久在线视频| 欧美老少做受xxxx高潮| 91亚洲精品视频| 欧美成人精品xxx| 欧美多人乱p欧美4p久久| 欧美www视频在线观看| 中文字幕亚洲在线| 亚洲一区二区三区四区在线播放| 久久精品男人天堂| 欧美日韩激情小视频|