JSP動作元素在請求處理階段起作用,他們會被轉換成Java程式碼來執行操作,如訪問一個Java物件或呼叫方法。

JSP動作元素是用XML語法寫成的。

動作元素基本上都是預定義的函式,JSP規範定義了一系列的標準動作,這些標準動作使用jsp作為字首:

<jsp:動作名稱 屬性=“屬性值” 屬性=“屬性值” />
<jsp:useBean ... />      <!-- 尋找或者例項化一個JavaBean -->
<jsp:setProperty ... /> <!-- 設定JavaBean的屬性 -->
<jsp:getPropery ... /> <!-- 獲取JavaBean的屬性 -->
<jsp:include ... /> <!-- 在頁面並請求的時候引入一個檔案 -->
<jsp:param ... /> <!-- 向被包含頁面傳遞引數 -->
<jsp:forward ... /> <!-- 把請求轉到一個新的頁面 -->
<jsp:plugin ... /> <!-- 根據瀏覽器型別為Java外掛生成OBJECT或EMBED標記 -->
<jsp:element ... /> <!-- 定義動態XML元素 -->
<jsp:attribute ... /> <!-- 設定動態定義的XML元素屬性 -->
<jsp:body ... /> <!-- 設定動態定義的XML元素內容 -->
<jsp:text ... /> <!-- 在JSP頁面和文件中使用寫入文字的模板 -->

所有動作元素都要有兩個屬性:id屬性、scope屬性

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

scope屬性用於識別動作元素的宣告週期。scope屬性有四個可能的值:page、request、session、application

id屬性和scope屬性有直接關係,scope屬性定義了相關id物件的壽命。

具體的動作可查詢頁面:https://www.runoob.com/jsp/jsp-actions.html

<jsp:useBean ... />動作元素

用於載入一個將在JSP頁面中使用的JavaBean

在類載入完之後,便可通過<jsp:getProperty ... />和<jsp:setProperty ... />動作獲取和修改bean的屬性。

<jsp:useBean id="name" class="package.class" />
<!-- class屬性用於指定Bean的完整類名 -->
<!-- type屬性用於指定引用該物件變數的型別 -->
<!-- beanName屬性用於通過java.beans.Beans的instantiate()方法指定Bean的名字 -->

<jsp:setProperty ... />動作元素

用於設定已經例項化好的Bean物件的屬性,有兩種用法

第一種用法:在<jsp:useBean ... >元素的外面使用,此時,不管<jsp:useBean ... >是否找到了一個現有的Bean,還是新建立一個Bean例項,<jsp:setProperty ... > 都會執行

第二種用法:在<jsp:useBean ... >元素的裡面使用,此時,<jsp:setProperty ... >只有在新建的Bean例項中才會執行,如果使用現有的例項則不執行<jsp:setProperty ... />

<!-- 第一種用法 -->
<jsp:useBean id="name" ... />
...
<jsp:setProperty name="myName" property="someProperty" ... /> <!-- 第二種用法 -->
<jsp:useBean id="name" ... >
  ...
  <jsp:setProperty name="myName" property="someProperty" ... />
</jsp:useBean>
<!-- name屬性指明要設定屬性的Bean -->
<!-- property屬性指明需要設定的屬性 -->
<!-- value屬性指定Bean屬性的值 -->
<!-- param屬性指定用哪個請求引數作為Bean屬性的值,如果當前請求沒有引數,則什麼也不做。-->
<!-- value和param不能同時使用,但可以使用其中任意一個 -->

<jsp:getProperty ... />動作元素

用於獲取指定Bean屬性的值,自動轉換成字串,然後呼叫內建物件out輸出

<jsp:useBean id="name" ... />
...
<jsp:getProperty name="myName" property="someProperty" ... />
<!-- name屬性指定要檢索的Bean屬性名稱,Bean必須已定義 -->
<!-- property屬性指明要獲取的屬性 -->
// 一個JavaBean
package app02a.beanTest; public class BeanTest {
private String name;
private int age; public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
} }
<!-- 一個JSP檔案 -->
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>testBean</title>
</head>
<body>
<h2>使用 JavaBean 的例項</h2>
<jsp:useBean id="test" class="app02a.beanTest.BeanTest" />
<!-- 設定屬性 -->
<jsp:setProperty name="test" property="name" value="leon" />
<jsp:setProperty name="test" property="age" value="18" />
<!-- 獲取屬性值 -->
姓名:<jsp:getProperty name="test" property="name" /> <br />
年齡:<jsp:getProperty name="test" property="age" />
</body>
</html>

<jsp:include ... />動作元素

用來包含靜態和動態的檔案,該動作把指定檔案插入正在生成的頁面。

include指令是在JSP檔案被轉換成Servlet的時候引入檔案,而include動作是在頁面被請求時引入檔案。

include指令不能傳遞引數,而include動作可以傳遞引數(使用<jsp:param ... />動作)

<jsp:include page="相對url地址" flush="true" />
<!-- page屬性指明要包含到當前頁面中檔案的相對url地址 -->
<!-- flush屬性指明包含資源前是否重新整理快取區 -->
<!-- data.jsp檔案程式碼 -->
<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%> <p>
今天的日期是:<%=(new java.util.Date()).toString() %>
所在城市是:<%=request.getParameter("city") %> <!-- 獲取引數 -->
</p> <!-- main.jsp檔案程式碼 -->
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>include動作</title>
</head>
<body>
<h2>include動作例項</h2>
<jsp:include page="date.jsp" flush="ture" >
    <jsp:param name="city" value="Beijing" /> <!-- 向其他頁面傳遞引數 -->
  </jsp:include>
</body>
</html>

測試效果

<jsp:param ... /> 和 <jsp:params ... />動作元素

該動作元素不能單獨使用,可以配合<jsp:include ... /> <jsp:forward ... />等動作一起使用。作用是向其他頁面傳遞引數。

<jsp:forward... />動作元素

將請求轉到另一個頁面,是伺服器內部的裝發,對瀏覽器是透明的,瀏覽器的URL並不會改變。該動作只有一個屬性page

<jsp:forward page="相對url地址" />
<!-- page屬性指定轉發到的地址,可以是一個JSP頁面或一個Servlet -->
<!-- date.jsp檔案 -->
<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%> <p>
今天的日期是:<%=(new java.util.Date()).toString() %>
所在城市是:<%=request.getParameter("city") %> <!-- 獲取傳遞過來的引數 -->
</p> <!-- main.jsp檔案 -->
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>include動作</title>
</head>
<body>
<h2>include動作例項</h2>
<jsp:forward page="date.jsp" > <!-- 將請求轉發到date.jsp頁面 -->
<jsp:param name="city" value="Beijing" /> <!-- 向date.jsp頁面傳遞引數 -->
</jsp:forward> </body>
</html>

<jsp:plugin... />動作元素

<jsp:element... />動作元素

<jsp:attribute... />動作元素

<jsp:body... />動作元素

<jsp:text... />動作元素