1. 程式人生 > >[05] JSP標準動作

[05] JSP標準動作

模型 什麽 usebean gpo public類 java語言 getx class patch


1、概述

JSP規範中定義了一系列的標準動作,Web容器按照規範進行了實現,可以解析並執行標準動作。而標準動作使用的是標準的xml語法,看上去也比較直觀易懂,下面來看一個結構例子:
  1. <jsp:action_name attribute1="value1" attribute2="value2"></jsp:acion_name>

上面的代碼中,action_name表示標準動作的名字,而attribute1和attribute2是標準動作的若幹個屬性。

2、三種常用的標準動作

2.1 forward

forward動作,用於在JSP頁面進行請求轉發,如下代碼示例:
  1. <jsp:forward
    page="loginSuccess.jsp"></jsp:forward>

上述代碼將把請求轉發到loginSuccess.jsp頁面,類似在Servlet中調用RequestDispatcher的forward方法進行請求轉發。即在JSP頁面中 <jsp:forward page="loginSuccess.jsp"></jsp:forward> 和 <% request.getRequestDispatcher("loginSuccess.jsp").forward(request, response); %> 是一樣的效果。
包含該動作的頁面,在你訪問時,則會被請求轉發到 loginSuccess.jsp 頁面當中去。

2.2 include

形如:
  1. <jsp:include page="head.jsp"></jsp:include>

include動作則表示在JSP頁面中進行動態包含,這和JSP指令中的靜態包含是稍有不同的。動態包含,即在運行期間訪問被包含的頁面,並將響應結果同包含頁面的響應結果合並,生成最終的響應。類似在Servlet中調用RequestDispatcher的include方法進行包含。
和include指令的靜態包含不同的在於,靜態包含發生在翻譯階段,被包含的JSP文件不會生成Java類,而是翻譯後包含在主體文件的Java類中,即靜態包含最終只會生成一個Java類。而動態包含,則各自的JSP頁面會生成各自的Java類,只是最終響應的結果會進行合並。

2.3 param

param動作往往是作為forward和include動作的子動作進行使用,用以傳遞參數。如下代碼示例:
  1. <jsp:forward page="copyright.jsp">
  2. <jsp:param name="author" value="zhangsan"/>
  3. </jsp:forward>
  4. <jsp:include page="head.jsp">
  5. <jsp:param name="time" value="2018-01-30"/>
  6. </jsp:include>

上述代碼使用param為forward和include動作傳遞參數,參數將被作為請求參數進行傳遞。如此處為head.jsp傳遞了參數time,那麽在head.jsp頁面中,則可以通過類似 <%=request.getParameter("time") %>的方式進行獲取顯示。

3、JavaBean相關的標準動作

所謂JavaBean,是用Java語言描述的軟件組件模型,實際上就是一個JavaSE的類,該類遵循一定的規範:
  • 必須是public類
  • 必須有一個無參的public構造方法
  • 返回屬性的方法為getXxx
  • 設置屬性的方法為setXxx

而在JSP中,則有三個標準動作和JavaBean有關,由於現在更多使用JSTL、EL表達式,所以這些標準動作使用較少。

3.1 useBean

  1. <jsp:useBean id="" class="" scope="" ></jsp:useBean>
使用useBean標準動作,可以獲取(或創建)一個在 {scope} 範圍內名為 {id} 的 {class} 類,scope範圍可以為page、request、session、application。
  1. <jsp:useBean id="zhangsan" class="com.learn.Person" scope="request" ></jsp:useBean>
如上例的含義為:調用request.getAttribute("zhangsan"),如果沒有zhangsan,則調用Person的無參構造方法創建,並setAttribute("zhangsan", new Person())。

3.2 setProperty

  1. <jsp:setProperty name="" property="" param|value="" />
setProperty用來對JavaBean對象的屬性進行賦值,替代setXxx方法。其中:
  • name 表示JavaBean對象的id值
  • property 表示JavaBean對象的屬性名
  • param 如果希望註入的值是請求參數,則使用param屬性
  • value 如果希望註入的值是一個常量,則使用value屬性

3.3 getProperty

  1. <jsp:getProperty name="" property="" />
getProperty用來調用JavaBean對象的getXxx方法獲取對應屬性值,其中:
  • name 表示JavaBean對象的id值
  • property 表示JavaBean對象的屬性名


4、其他

以上就是常見的幾種JSP標準動作了,還有一部分用得就更少了,如果有興趣可以自行了解。


5、寫在後面的話

但是如今,誰還用什麽JSP標準動作啊???

[05] JSP標準動作