1. 程式人生 > >Study Jsp《include的兩種用法》

Study Jsp《include的兩種用法》

一、我們都知道在jsp中include有兩種形式,分別是:

<%@ include file=""%> 

<jsp:include page=""  flush="true"/> 

前者是指令元素、後者是行為元素。具體它們將在何處用?如何用及它們有什麼區別?這應該是很多人看到它都會想到的問題。下面一起來看看吧。

二、用法區別

1.執行時間上區別
<%@ include file="relativeURI"%>                   是在翻譯階段執行
<jsp:include page="relativeURI" flush="true" />  在請求處理階段執行.
2.引入內容的不同
<%@ include file=" "%>
讀入指定頁面的內容。並把這些內容和本來的頁面融合到一起。在JSP頁面被轉化成servlet之前和它融和到一起。
<jsp:include page="relativeURI"  flush="true" />

引入執行頁面或servlet所天生的應答文字。

3.如何使include頁面攜帶入參
<jsp:include page=”<%=pageSelectedAtRuntime%>” flush=”true” >
     <jsp:param name=”fitstParamer” value=”firstValue”>
    <jsp:param name=”lastParamer” value=”lastValue”>
</jsp:include>
4. 說明:翻譯階段
翻譯階段:
jsp頁面不能原封不動地被傳送給瀏覽器,全部的jsp元素都必須首先由伺服器進行處理。這是通過將jsp頁面轉達化成servlet,然後執行這個servlet來結束的。伺服器需要一個jsp容器來處理jsp頁面。jsp容器平常以servlet的情勢來實現,這個servlet經過配置,可以處理對jsp頁面的全部請求。
Jsp容器重視將jsp頁面轉化成servlet(稱為jsp頁面實現類—JSP Page implementation class),並編譯這個servlet。這兩步就組成了翻譯階段.

請求處理階段:
Jsp容器除了上面提到的重視將jsp頁面轉化成servlet外,還重視呼叫jsp頁面實現類以處理每個請求併產生應答.這個階段我們就稱為請求處理階段.請求處理階段僅執行類文件.

5.示例

//======date.jsp的源文件=====//

<%@ page language=”java” contentType="text/html;charset=gb2312"%>
<%
  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的源文件=============//
<%@ page language=”java” contentType=”text/html;charset=gb2312”%>
<html>
<head>
<title>include的兩種用法</title>
<jsp:include page=”date.jsp” flush=”true”/>
<%[email protected] include file=”date.jsp” %-->
<head>
<body>
<table><tr><td></td></tr></table>
</body>
</html>
先用<%@ 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頁面,正常。
 
檢視tomcat下的臨時文件,..\tomcat\work\Standalone\localhost\test目錄下會看到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”/>,然後請求test.jsp.此時會在頁面上看見.我們所引入date.jsp輸出的日期中中文出現了亂碼. 
所以在我們作include行動元素引入頁面時,實際只是引用了date.jsp這個文件被轉化並被編譯後產生的servlet類文件.既如此,date.jsp就是作為一個單獨的文件在執行後才被test.jsp文件執行時呼叫.由於date.jsp文件中無指定字元編碼.所以出現了亂碼.解決辦法是在date.jsp文件中重新把剛才去掉的
 <%@ page language=”java” contentType=”text/html;charset=gb2312”%>
再檢視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.

注:本檔案轉載 http://blog.sina.com.cn/s/blog_573a052b0100kq1w.html

相關推薦

Study Jsp《include的用法

一、我們都知道在jsp中include有兩種形式,分別是: <%@ include file=""%>  <jsp:include page=""  flush="true"/>  前者是指令元素、後者是行為元素。具體它們將在何處用?如何用及它們有

奪命雷公狗C/C++-----5---include的用法

編寫 logs ima log -1 們的 頭文件 技術 我們 我們的include是有兩種用法的,如: 上面這種就是在頭文件方式進行引入的, include <> 括號的是包含系統文件的。。。。 還有一種,比如我首先寫個頭文件先,如下所示:

java基礎——Collections.sort的用法

基本類 == 輸出結果 code sed java 意思 size htm Collections是一個工具類,sort是其中的靜態方法,是用來對List類型進行排序的,它有兩種參數形式: public static <T extends Comparabl

spring 事務的用法

frame basic 版本 supports 4.2 將不 cts eas 間接 spring事務兩種使用方法 [email protected] 註解 2.AOP 配置 xml (需要依賴包:aopalliance-1.0.jar/ aspectjweav

jsp中include 的用法

1.兩種用法 靜態include:  <%@ inlcude file =”header.jsp” %> 此時引入的是靜態的jsp檔案,它將引入的jsp中的原始碼原封不動地附加到當前檔案中,所以在jsp程式中使用這個指令的時候file裡面的值(即要匯入的檔案)不能帶多餘

git commit --amend用法

一、如果已經push到遠端伺服器,想修改已經提交過的commit資訊 1.儲存:Ctrl + o; 回車 ;退出:Ctrl + x # git commit --amend 2.重新提交gerrit審批 # git push --no-thin origin HEAD:refs/fo

oracle goldengate的用法

此文已由作者趙欣授權網易雲社群釋出。 歡迎訪問網易雲社群,瞭解更多網易技術產品運營經驗。 自從oracle收購來了goldengate這款產品並以後對它做了一系列改進後,有非常多的使用者使用它做資料遷移、etl抽取、複製容災等等場景。 這裡還有兩個goldengate的另類用法,也是非常實用。 1.通過da

@ResponseBody的用法

第一種用法,方法頭部: /** * @todo * @param request * @return */ @ResponseBody @RequestMapping(value="model",method = RequestMethod.POST)

jsp中include的用法

<%@ include file=” ”%> include指令 <jsp:include page=” ” flush=”true”/> include動作 主要有兩方面的不同: 1.執行時間上 <%@ include file=” ”

Collections.sort的用法

Collections是一個工具類,sort是其中的靜態方法,是用來對List型別進行排序的,它有兩種引數形式: public static <T extends Comparable<? super T>> void sort(List

微信小程式開發之get請和post請求的用法

我們在開發微信小程式,需要進行資料請求,這裡只有get和post兩種.get請求,如下圖 但是呢,在很多情況下光只有get請求是不行的,還必須要有post請求,那麼post請求怎麼寫呢,如下圖 這

Item 42:typename的用法

Item 42: Understand the two meanings of typename. 時至今日還有人在論壇裡問模板引數前的typename和class有何區別: template<typename T> class Widge

PHP foreach的用法

前言:         php4中引入了foreach結構,這是一種遍歷陣列的簡單方式。相比傳統的for迴圈,foreach能夠更加便捷的獲取鍵值對。在php5之前,foreach僅能用於陣列;php

#include指令載入外部庫的用法

C中可以通過#include <header.h>和#include "header.h"來載入檔案,兩者的區別主要是在include載入的搜尋路徑上存在不同。 區別是: 採用#incl

Sql server 事務的用法

事務機制: 四個屬性:原子性Atomicity,一致性Consistency,隔離性Isolation,永續性Durability ,即ACID特性。 事務的狀態:活動狀態(初始狀態),部分提交狀態(事務執行完最後一條語句,實際輸出可能臨時駐留在記憶體中),提交狀態(當資料庫系統將事務中對資料的梗概完全

JAVA中super的用法

http://www.cnblogs.com/rollenholt/articles/2033989.html 通過用static來定義方法或成員,為我們程式設計提供了某種便利,從某種程度上可以說它類似於C語言中的全域性函式和全域性變數。但是,並不是說有了這種便利,你便可以隨處使用,如果那樣的話,你

JAVA EE 專案常用知識 之AJAX技術實現select下拉列表聯動的用法(讓你真正理解ajax)

ajax 下拉列表聯動的用法。 ajax的定義: AJAX 是一種用於建立快速動態網頁的技術。 通過在後臺與伺服器進行少量資料交換,AJAX 可以使網頁實現非同步更新。這意味著可以在不重新載入整個網頁的情況下,對網頁的某部分進行更新。 ajax效果的一個例子: 區域為

java基礎—— Collections.sort的用法,簡單明瞭 。

來源:http://gwh-08.iteye.com/blog/1233401 /**  * @author guwh  * @version 建立時間:2011-11-3 上午10:49:36 

for迴圈巢狀的用法

  本人今後不定期在CSDN上更新部落格,大部分內容將會更新在個人部落格:www.lijugang.com中! 主要有兩種型別的for迴圈巢狀,下面來介紹這兩種型別迴圈巢狀的用法以及事例。 一:內外迴

python 類內函式互調的用法

以leetcode 279題 Perfect Squares為例 題目: Given a positive integer n, find the least number of perfect