Java EE基礎知識學習(三)

在這一節我們要介紹七個JSP的動作指令,之前我們介紹了三個JSP的編譯指令,編譯指令是用來通知Servlet引擎的處理消息,而動作指令只是運動時的動作。編譯指令在將JSP編譯成Servlet時起作用,而處理指令通常可以替換成JSP腳本,它只是JSP腳本的標準化寫法。


一、JSP的七個動作指令

JSP的動作指令主要有以下七個:

jsp:forward:執行頁面轉向,將請求的處理轉發到下一個頁面。

jsp:param:用於傳遞參數,必須和其他的標籤配合使用。

jsp:include:用於動態引入一個外部JSP頁面。

jsp:plugin:用於下載JavaBean或Applet到客戶端執行。

jsp:useBean:創建一個JavaBean實例的屬性值。

jsp:setProperty:設置JavaBean實例的屬性值。

jsp:getProperty:獲取JavaBean實例的屬性值。



1、forwar指令

forward指令用於將頁面響應轉發到另外的頁面。下面是forward指令的示例:

a.jsp:

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
	pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
<jsp:forward page="b.jsp"></jsp:forward>
</body>
</html>

b.jsp:

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
	pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
<p>Hello World</p>
</body>
</html>

當我們訪問a.jsp的時候,內容顯示的是"Hello World",但是在瀏覽器的地址欄中URL依然顯示的是a.jsp。


2、include指令

include指令是一個動態的include指令,雖然它也用於將一個外部頁面包含進來,但是它不會導入被include頁面的編譯指令,只是把被導入頁面的body內容插入。include代碼示例:

a.jsp:

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
	pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
<jsp:include page="b.jsp"></jsp:include>
</body>
</html>


b.jsp:

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
	pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
<p>Hello World</p>
</body>
</html>

當我們在瀏覽器中執行a.jsp的時候,顯示的內容會是"Hello World",我們發現它與靜態include運行的結果是一樣的,那它們的區別在哪裏呢?它們的區別主要有三個:

1、靜態導入是將被導入頁面的代碼完全融入,兩個頁面融合成一個整體Servlet,而動態導入則在Servlet中使用include方法來引入被導入的頁面內容。

2、靜態導入時被導入的編譯指令會起作用,動態導入只導入頁面的body內容。

3、動態包含還可以增加額外的參數,這點我們在param指令中講解。

關於第一點其實我們打開動態導入後編譯生成的Servlet文件可以看到,include指令被下面代碼所替代:

org.apache.jasper.runtime.JspRuntimeLibrary.include(request,response,"b.jsp",out,false);

而靜態頁面則是直接將另一個頁面的內容加入到了原頁面的Servlet中。


總結起來,如果我們導入的外部頁面很少改動,我們選擇使用靜態include,如果外部頁面經常變動,我們使用動態include。


3、useBean指令

useBean指令用來創建一個javabean實例,要使用它首先我們要在項目的src目錄下創建一個包,例如abc包,然後在這個包裏創建一個javabean類,接下來我們就可以在JSP代碼中用useBean創建一個實例了。

例如:在abc包中創建一個Person類:

package abc;

public class Person {
	private String name;
	private int age;
	public Person()
	{
		name="";
		age=0;
	}
	public void setName(String n)
	{
		name=n;
	}
	public void setAge(int a)
	{
		age=a;
	}
	public String getName()
	{
		return name;
	}
	public int getAge()
	{
		return age;
	}
}

a.jsp:

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
	pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
<jsp:useBean id="p1" class="abc.Person" scope="page"></jsp:useBean>
</body>
</html>

這樣我們就創建了一個javabean的實例p1,並且可以通過setProperty和getProperty方法來設置和獲取p1的屬性值。
在創建的時候id是我們創建的對象名稱,class是我們的javabean類名,scope則是指定了javaBean實例的作用範圍,它有四個選項:

page:只在該頁面有效。

request:只在本次請求中有效。

session:只在本次會話中有效。

application:在本web應用中一直有效。


4、setProperty指令

setProperty指令用來設置javabean實例的屬性值,例如在上個例子中我們可以用以下代碼設置p1屬性:

<jsp:setProperty property="age" name="p1" value="22"/>
<jsp:setProperty property="name" name="p1" value="wang"/>

5、getProperty指令

getproperty指令用來獲取javabean實例的屬性值,例如在上個例子中我們可以用以下代碼獲取p1屬性:

<jsp:getProperty property="name" name="p1"/>
<jsp:getProperty property="age" name="p1"/>

這兩行代碼會獲取p1的屬性值並且將其輸出。


6、plugin指令

plugin指令主要用於下載服務器端的JavaBean或者Applet到客戶端執行,由於程序要在客戶端執行,所以客戶端必須安裝虛擬機。


7、param指令

param指令用來設置參數值,這個指令必須配合include、forward或者plugin指令使用。

配合include指令代碼:

a.jsp:

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
	pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
<jsp:include page="b.jsp">
	<jsp:param value="2017" name="year"/>
</jsp:include>
</body>
</html>

b,jsp:

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
	pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
<%=request.getParameter("year") %>
</body>
</html>

在上面的例子中,我們在a.jsp中使用include包含b頁面,同時傳遞了一個"year=2017"的參數,然後b頁面通過request.getParameter()方法獲取參數值並使用輸出表達式輸出這個參數值,所以我們在瀏覽器中運行a.jsp會顯示一個數字2017。


配合forward指令:

a.jsp:

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
	pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
<jsp:forward page="b.jsp">
	<jsp:param value="2017" name="year"/>
</jsp:forward>
</body>
</html>

b.jsp:

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
	pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
<%=request.getParameter("year") %>
</body>
</html>

上面的例子同樣在a中使用forward時傳遞了一個“year=2017”的參數,這個參數在b中使用request.getParamter()方法獲取。在瀏覽器中運行以後會顯示數字“2017”。


關於plugin和param指令的配合使用這裏就不舉例說明了。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章