動作指令只是在運行時的動作,編譯指令在將JSP翻譯成Servlet時起作用
JSP的主要動作指令
- jsp:forword:執行頁面轉向,將請求的處理轉發到下一頁面。
- jsp:param:用于傳遞參數必須與其他支持參數的標簽一起使用。
- jsp:include:用于動態引入一個JSP頁面。
- jsp:plugin:用于下載JavaBean或Applet到客服端執行。
- jsp:useBean:創建一個JavaBean實例。
- jsp:setProperty:設置JavaBean實例的屬性值。
- jsp:getProperty:輸出JavaBean實例的屬性值。
5.1forward指令
forward指令用于將頁面響應轉發到另外的頁面。
JSP的forward指令格式:
JSP1.0
<jsp:forward page="{relativeURL|<%=expression%>}" />
JSP1.1以上
<!--
轉發頁面是增加額外的參數傳遞,
參數的值可以通過HttpServletRequest類的getParameter()方法獲取
-->
<jsp:forward page="{relativeURL|<%=expression%>}">
<jsp:param.../>
</jsp:forward>
例:
<jsp:forward page="forward-result.jsp">
<jsp:param name=age value=29 />
</jsp:forward>
<body>
<!--使用request內置對象獲取age參數的值-->
<%=request.getParameter("age")%>
</body>
表單提交:
<form id="login" method="post" action="jsp-forward.jsp">
<input type="text" name="username" />
<input type="submit" value="submit" />
</form>
<jsp:forward.../>指令給人一種:它是將用戶的請求“轉發”到另一頁面,但實際上并沒有重新向新頁面發送請求,它只是完全采用對用戶生成響應,請求依然是一次請求,所以請求參數、請求屬性都不會丟失。
5.2include指令
include指令是一個動態指令,也用于包含某個頁面,它不會導入被include頁面的編譯指令,僅僅將被導入的頁面的body內容插入本頁面。
語法格式:
<jsp:include page="{relativeURL|<%=expression%>}" flush=""true />
<jsp:include page="{relativeURL|<%=expression%>}" flush=""true>
<jsp:param name="parameterName" value="patameterValue"/>
</jsp:include>
動態導入語法:
<body>
<!--使用動態include指令導入頁面-->
<jsp:include page="include-result.jsp"/>
</body>
動態導入只是使用一個include方法來插入目標頁面,而不是將目標頁面完全融入本頁面中。
靜態導入和動態導入的三點區別:
- 靜態導入是將導入頁面完全融入本頁面,兩個頁面完全融合生成一個整體的Servlet,而動態導入則在Servlet中使用include方法來引入被導入頁面的內容。
- 靜態導入時被導入頁面的的編譯指令會起作用,而動態導入時被導入頁面的編譯指令則失去作用,只是插入被導入頁面的body內容。
- 動態導入還可以增加額外的參數。
簡而言之,forward那布標頁面代替原有的頁面,include拿目標頁面插入原有的頁面。
5.3useBean、setProperty、getProperty指令
這三個指令都是與JavaBean相關的指令,useBean指令用于在JSP頁面中初始化一個Java實例;setProperty指令用于為JavaBean實例的屬性設置值,getProperty指令用于輸出JavaBean實例的屬性
useBean的語法:
<jsp:useBean id="name" class="classname" scope="page|request|session|application"/>
scop屬性指定的JavaBean實例的作用范圍:
- page:該JavaBean實例僅在該頁面有效。
- request:該JavaBean實例在本次請求有效。
- session:該JavaBean實例在本次session內有效。
- application:該JavaBean實例在本應用內一直有效。
setProperty指令語法:
<jsp:setProperty name="BeanName" property="propertyName" value="value" />
getProperty的語法:
<jsp:getProperty name="BeanName" property="propertyName" />
例:
<body>
<!--創建lee.Person的實例,該實例的實例名為p1-->
<jsp:useBean id="p1" class="lee.Person" scope="page" />
<!--設置p1的name屬性-->
<jsp:setProperty name="p1" property="name" value="zhangsan" />
<!--輸出p1的name值-->
<jsp:gettProperty name="p1" property="name" />
</body>
當頁面調用setProperty和getProperty標簽時,系統底層就是調用setName()和getName()方法來操作Person實例的屬性的。
5.4plugin指令
plugin指令主要用于下載服務端的JavaBean或Applet到客服端執行。由于程序要在客服端執行,所以客服端必須安裝虛擬機,實際中很少使用。
5.5param指令
param指令用于設置參數值,這個指令不能單獨使用,因為單獨的param指令沒有實際意義,param主要結合一下三個指令使用:
- jsp:include
- jsp:forward
- jsp:plugin
語法格式:
<jsp:param name="paramName" value="paramValue" />