JSP行為

忘塵天外天發表於2017-08-21

  JSP行為標籤使用XML語法結構來控制servlet引擎。它能夠動態插入一個檔案,重用JavaBean元件,引導使用者去另一個頁面,為Java外掛產生相關的HTML等等。行為標籤只有一種語法格式,它嚴格遵守XML標準:

   <jsp:action_name  attribute="value"  />

 行為標籤基本上是一些預先就定義好的函式:

語法 描述
jsp:include 用於在當前頁面中包含靜態或動態資源,在頁面被請求時引入一個檔案
jsp:useBean 尋找和初始化一個JavaBean元件
jsp:setProperty 設定JavaBean元件的值
jsp:getProperty 將JavaBean元件的值插入到output中
jsp:forward 從一個JSP檔案向另一個檔案傳遞一個包含使用者請求的request物件,把請求轉到一個新的頁面
jsp:plugin 用於在生成的HTML頁面中包含Applet和JavaBean物件,根據瀏覽器型別為Java外掛生成OBJECT或EMBED標記
jsp:element 動態建立一個XML元素
jsp:attribute 定義動態建立的XML元素的屬性
jsp:body 定義動態建立的XML元素的內容
jsp:text 在JSP頁面和文件中使用寫入文字的模板

常見的屬性

  所有的動作元素都要有兩個屬性:id屬性和scope屬性。

  • id屬性

  id屬性是動作元素的唯一標識,可以在JSP頁面中引用。動作元素常見的id值可以通過PageContext來呼叫的。

  • scope屬性

  該屬性用來識別動作元素的生命週期。id屬性和scope屬性有直接關係,scope屬性定義了相關聯id物件的壽命。scope屬性有四個可能的值:(a)page,(b)request, (c)session ,(d)application 。

<jsp:include>動作元素

<jsp:include>動作元素用來保護靜態和動態檔案。該動作把指定檔案插入正在生成的頁面。

        <jsp:include  page="相對  URL  地址"  flush="true">    

 前面介紹過的include指令,它是在JSP檔案被轉換成Servlet的時候引入檔案,而這裡的jsp:include動作不同,插入檔案的時間是在頁面被請求的時候。include相關的屬性列表:

屬性 描述
page 包含在頁面中的相對URL地址
flush 布林屬性,定義在包含資源前是否重新整理快取區

<jsp:useBean>動作元素

  jsp:useBean 動作用來載入一個將在JSP頁面中使用的JavaBean。這個功能非常有用,因為它使得我們可發揮Java元件複用的優勢。簡單的語法:

       <jsp:useBean  id ="name"  class="package.class">    

   在類載如後,我們既可以通過jsp:setProperty 和 jsp:getProerty 動作來修改和檢索bean的屬性。useBean的屬性有:

屬性 描述
class 指定bean的完整包名
type 指定將引用該物件變數的型別
beanName 通過java.beans.Beans的instantiate()方法指定Bean的名字

<jsp:setProperty>動作元素

   jsp:setProperty用來設定已經例項化的Bean物件的屬性,有兩種用法。可以在jsp:useBean元素後面使用jsp:setProperty,

    <jsp:useBean  id="myName" ... />
            ......
    <jsp:setProperty  name="myName"  property="someProperty" ... />    

   不管jsp:useBean是找到了一個現有的Bean,還是新建立了一個Bean的例項,jsp:setProperty都會執行。

  第二種用法是把jsp:setProperty放入jsp:useBean元素的內部:

<jsp:useBean  id="myName" ... >
            ......
        <jsp:setProperty  name="myName"  property="someProperty" ...  />
</ jsp:useBean >

   此時,jsp:setProperty只有在新建Bean例項時才會執行,如果是使用現有例項則不執行jsp:setProperty。jsp:setProperty動作有如下屬性:

屬性 描述
name name屬性是必需的。
property property屬性是必需的。它表示要設定哪個屬性。其特殊用法:如果property的值是“*”,表示所有名字和Bean屬性名字匹配的請求引數都將被傳遞給相應的屬性的set方法。
value value屬性是可選的。該屬性用來指定Bean屬性的值。字串資料會在目標類中通過標準的valueOf方法自動轉換成數字、boolean、byte、char。
param param是可選的。它指定用哪個引數作為Bean屬性的值。如果當前請求沒有引數,則什麼事情也不做,系統不會把null傳遞給Bean屬性的set方法。

<jsp:getProerty>動作元素

  jsp:getProerty黨組織取得指定Bean屬性的值,轉換成字串,然後輸出。

      <jsp:useBean  id="myName" ... />
            ......
      <jsp:getProerty  name="myName" property="someProperty" ... />

   getProperty相關聯的屬性:

屬性 描述
name 要檢索的Bean屬性的名稱。Bean必須已定義
property 表示要提取Bean屬性的值

<jsp:forward>動作元素

  jsp:forward動作把請求轉到另外的頁面。jsp:forward標記只有一個屬性page。

     <jsp:forward  page="相對 URL 地址">

   <jsp:forward>的page屬性包含的是一個相對URL。page的值既可以直接給出,也可以在請求的時候動態計算,可以是一個JSP頁面或者一個Java   Servlet 。下面示例用兩個檔案,分別是:date.jsp和main.jsp。

date.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
                                  pageEncoding="UTF-8"%>
  <p>
  	今天的日期:<%=(new java.util.Date()).toLocaleString() %>
  </p>    

 main.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
		<h2>forward動作示例</h2>
		<jsp:forward page="date.jsp"></jsp:forward>
</body>
</html>

   執行的結果是:

    今天的日期:2017-8-21 16:30:08 

 <jsp:plugin>動作元素

  jsp:plugin動作用來根據瀏覽器的型別,插入通過Java外掛執行Java  Applet所必需的OBJECT或EMBED元素。如果需要的外掛不存在,它會下載外掛,然後執行Java元件。Java元件可以是一個applet或一個JavaBean。plugin動作有多個對應的HTML元素的屬性用於格式化Java元件。param元素可用於向Applet或Bean傳遞引數。

<jsp:element> 、 <jsp:attribute>、 <jsp:body>動作元素

  <jsp:element> 、 <jsp:attribute>、 <jsp:body>動作元素動態定義XML元素。動態是非常重要的,這就意味著XML元素在編譯時是動態生成的而非靜態。

<jsp:text>動作元素

  <jsp:text>動作元素允許在JSP頁面和文件中使用寫入文字的模板:

       <jsp:text>模板資料</jsp:text>

   以上文字模板不能包含其他元素,只能只能包含文字和EL表示式。請注意,在XML檔案中,不能使用表示式如 ${whatever > 0},因為>符號是非法的。 你可以使用 ${whatever gt 0}表示式或者嵌入在一個CDATA部分的值。

相關文章