亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > JSP > 正文

十三、JSP動作

2024-09-05 00:20:47
字體:
來源:轉載
供稿:網友
JSP動作利用XML語法格式的標記來控制Servlet引擎的行為。利用JSP動作可以動態地插入文件、重用JavaBean組件、把用戶重定向到另外的頁面、為Java插件生成HTML代碼。 

   JSP動作包括: 

jsp:include:在頁面被請求的時候引入一個文件。 
jsp:useBean:尋找或者實例化一個JavaBean。 
jsp:setProperty:設置JavaBean的屬性。 
jsp:getProperty:輸出某個JavaBean的屬性。 
jsp:forward:把請求轉到一個新的頁面。 
jsp:plugin:根據瀏覽器類型為Java插件生成OBJECT或EMBED標記。 
   13.1 jsp:include動作 

   該動作把指定文件插入正在生成的頁面。其語法如下: 
<jsp:include page="relative URL" flush="true" />



   前面已經介紹過include指令,它是在JSP文件被轉換成Servlet的時候引入文件,而這里的jsp:include動作不同,插入文件的時間是在頁面被請求的時候。jsp:include動作的文件引入時間決定了它的效率要稍微差一點,而且被引用文件不能包含某些JSP代碼(例如不能設置HTTP頭),但它的靈活性卻要好得多。 

   例如,下面的JSP頁面把4則新聞摘要插入一個“What's New ?”頁面。改變新聞摘要時只需改變這四個文件,而主JSP頁面卻可以不作修改: 

   WhatsNew.jsp 
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
<HEAD>
<TITLE>What's New</TITLE>
</HEAD>

<BODY BGCOLOR="#FDF5E6" TEXT="#000000" LINK="#0000EE"
VLINK="#551A8B" ALINK="#FF0000">

<CENTER>
<TABLE BORDER=5 BGCOLOR="#EF8429">
<TR><TH CLASS="TITLE">
What's New at JspNews.com</TABLE>
</CENTER>
<P>
Here is a summary of our four most recent news stories:
<OL>
<LI><jsp:include page="news/Item1.html" flush="true"/>
<LI><jsp:include page="news/Item2.html" flush="true"/>
<LI><jsp:include page="news/Item3.html" flush="true"/>
<LI><jsp:include page="news/Item4.html" flush="true"/>
</OL>
</BODY>
</HTML>



   13.2 jsp:useBean動作 

   jsp:useBean動作用來裝載一個將在JSP頁面中使用的JavaBean。這個功能非常有用,因為它使得我們既可以發揮Java組件重用的優勢,同時也避免了損失JSP區別于Servlet的方便性。jsp:useBean動作最簡單的語法為: 
<jsp:useBean id="name" class="package.class" />



   這行代碼的含義是:“創建一個由class屬性指定的類的實例,然后把它綁定到其名字由id屬性給出的變量上”。不過,就象我們接下來會看到的,定義一個scope屬性可以讓Bean關聯到更多的頁面。此時,jsp:useBean動作只有在不存在同樣id和scope的Bean時才創建新的對象實例,同時,獲得現有Bean的引用就變得很有必要。 

   獲得Bean實例之后,要修改Bean的屬性既可以通過jsp:setProperty動作進行,也可以在Scriptlet中利用id屬性所命名的對象變量,通過調用該對象的方法顯式地修改其屬性。這使我們想起,當我們說“某個Bean有一個類型為X的屬性foo”時,就意味著“這個類有一個返回值類型為X的getFoo方法,還有一個setFoo方法以X類型的值為參數”。 

   有關jsp:setProperty動作的詳細情況在后面討論。但現在必須了解的是,我們既可以通過jsp:setProperty動作的value屬性直接提供一個值,也可以通過param屬性聲明Bean的屬性值來自指定的請求參數,還可以列出Bean屬性表明它的值應該來自請求參數中的同名變量。 

   在JSP表達式或Scriptlet中讀取Bean屬性通過調用相應的getXXX方法實現,或者更一般地,使用jsp:getProperty動作。 

   注意包含Bean的類文件應該放到服務器正式存放Java類的目錄下,而不是保留給修改后能夠自動裝載的類的目錄。例如,對于Java Web Server來說,Bean和所有Bean用到的類都應該放入classes目錄,或者封裝進jar文件后放入lib目錄,但不應該放到servlets下。 

   下面是一個很簡單的例子,它的功能是裝載一個Bean,然后設置/讀取它的message屬性。 

   BeanTest.jsp 
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
<HEAD>
<TITLE>Reusing JavaBeans in JSP</TITLE>
</HEAD>

<BODY>
<CENTER>
<TABLE BORDER=5>
<TR><TH CLASS="TITLE">
Reusing JavaBeans in JSP</TABLE>
</CENTER>
<P>

<jsp:useBean id="test" class="hall.SimpleBean" />
<jsp:setProperty name="test" 
property="message" 
value="Hello WWW" />
<H1>Message: <I>
<jsp:getProperty name="test" property="message" />
</I></H1>

</BODY>
</HTML>



   SimpleBean.java 

   BeanTest頁面用到了一個SimpleBean。SimpleBean的代碼如下: 
package hall;

public class SimpleBean {
private String message = "No message specified";

public String getMessage() {
return(message);
}

public void setMessage(String message) {
this.message = message;
}
}



   13.3 關于jsp:useBean的進一步說明 

   使用Bean最簡單的方法是先用下面的代碼裝載Bean: 
<jsp:useBean id="name" class="package.class" /> 



   然后通過jsp:setProperty和jsp:getProperty修改和提取Bean的屬性。不過有兩點必須注意。第一,我們還可以用下面這種格式實例化Bean: 
<jsp:useBean ...> 
Body 
</jsp:useBean>



   它的意思是,只有當第一次實例化Bean時才執行Body部分,如果是利用現有的Bean實例則不執行Body部分。正如下面將要介紹的,jsp:useBean并非總是意味著創建一個新的Bean實例。 

   第二,除了id和class外,jsp:useBean還有其他三個屬性,即:scope,type,beanName。下表簡要說明這些屬性的用法。 屬性 用法 
id 命名引用該Bean的變量。如果能夠找到id和scope相同的Bean實例,jsp:useBean動作將使用已有的Bean實例而不是創建新的實例。 
class 指定Bean的完整包名。 
scope 指定Bean在哪種上下文內可用,可以取下面的四個值之一:page,request,session和application。 
默認值是page,表示該Bean只在當前頁面內可用(保存在當前頁面的PageContext內)。 
request表示該Bean在當前的客戶請求內有效(保存在ServletRequest對象內)。 
session表示該Bean對當前HttpSession內的所有頁面都有效。 
最后,如果取值application,則表示該Bean對所有具有相同ServletContext的頁面都有效。 
scope之所以很重要,是因為jsp:useBean只有在不存在具有相同id和scope的對象時才會實例化新的對象;如果已有id和scope都相同的對象則直接使用已有的對象,此時jsp:useBean開始標記和結束標記之間的任何內容都將被忽略。 

type 指定引用該對象的變量的類型,它必須是Bean類的名字、超類名字、該類所實現的接口名字之一。請記住變量的名字是由id屬性指定的。 
beanName 指定Bean的名字。如果提供了type屬性和beanName屬性,允許省略class屬性。 


   13.4 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屬性是必需的。它表示要設置屬性的是哪個Bean。 
property property屬性是必需的。它表示要設置哪個屬性。有一個特殊用法:如果property的值是“*”,表示所有名字和Bean屬性名字匹配的請求參數都將被傳遞給相應的屬性set方法。 
value value屬性是可選的。該屬性用來指定Bean屬性的值。字符串數據會在目標類中通過標準的valueOf方法自動轉換成數字、boolean、Boolean、byte、Byte、char、Character。例如,boolean和Boolean類型的屬性值(比如“true”)通過Boolean.valueOf轉換,int和Integer類型的屬性值(比如“42”)通過Integer.valueOf轉換。 
value和param不能同時使用,但可以使用其中任意一個。 

param param是可選的。它指定用哪個請求參數作為Bean屬性的值。如果當前請求沒有參數,則什么事情也不做,系統不會把null傳遞給Bean屬性的set方法。因此,你可以讓Bean自己提供默認屬性值,只有當請求參數明確指定了新值時才修改默認屬性值。 
例如,下面的代碼片斷表示:如果存在numItems請求參數的話,把numberOfItems屬性的值設置為請求參數numItems的值;否則什么也不做。 

<jsp:setProperty name="orderBean" 
property="numberOfItems" 
param="numItems" /> 

如果同時省略value和param,其效果相當于提供一個param且其值等于property的值。進一步利用這種借助請求參數和屬性名字相同進行自動賦值的思想,你還可以在property(Bean屬性的名字)中指定“*”,然后省略value和param。此時,服務器會查看所有的Bean屬性和請求參數,如果兩者名字相同則自動賦值。 



   下面是一個利用JavaBean計算素數的例子。如果請求中有一個numDigits參數,則該值被傳遞給Bean的numDigits屬性;numPrimes也類似。 

   JspPrimes.jsp 
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
<HEAD>
<TITLE>在JSP中使用JavaBean</TITLE>
</HEAD>

<BODY>

<CENTER>
<TABLE BORDER=5>
<TR><TH CLASS="TITLE">
在JSP中使用JavaBean</TABLE>
</CENTER>
<P>

<jsp:useBean id="primeTable" class="hall.NumberedPrimes" />
<jsp:setProperty name="primeTable" property="numDigits" />
<jsp:setProperty name="primeTable" property="numPrimes" />

Some <jsp:getProperty name="primeTable" property="numDigits" /> 
digit primes: 
<jsp:getProperty name="primeTable" property="numberedList" />

</BODY>
</HTML>



   注:NumberedPrimes的代碼略。 

   13.5 jsp:getProperty動作 

   jsp:getProperty動作提取指定Bean屬性的值,轉換成字符串,然后輸出。jsp:getProperty有兩個必需的屬性,即:name,表示Bean的名字;property,表示要提取哪個屬性的值。下面是一個例子,更多的例子可以在前文找到。 
<jsp:useBean id="itemBean" ... />
...
<UL>
<LI>Number of items: 
<jsp:getProperty name="itemBean" property="numItems" />
<LI>Cost of each:
<jsp:getProperty name="itemBean" property="unitCost" />
</UL>



   13.6 jsp:forward動作 

   jsp:forward動作把請求轉到另外的頁面。jsp:forward標記只有一個屬性page。page屬性包含的是一個相對URL。page的值既可以直接給出,也可以在請求的時候動態計算,如下面的例子所示: 
<jsp:forward page="/utils/errorReporter.jsp" />
<jsp:forward page="<%= someJavaExpression %>" />



   13.7 jsp:plugin動作 

   jsp:plugin動作用來根據瀏覽器的類型,插入通過Java插件 運行Java Applet所必需的OBJECT或EMBED元素。 

   附錄:JSP注釋和字符引用約定 

   下面是一些特殊的標記或字符,你可以利用它們插入注釋或可能被視為具有特殊含義的字符。 語法 用途 
<%-- comment --%> JSP注釋,也稱為“隱藏注釋”。JSP引擎將忽略它。標記內的所有JSP腳本元素、指令和動作都將不起作用。 
<!-- comment --> HTML注釋,也稱為“輸出的注釋”,直接出現在結果HTML文檔中。標記內的所有JSP腳本元素、指令和動作正常執行。 
<\% 在模板文本(靜態HTML)中實際上希望出現“<%”的地方使用。 
%\> 在腳本元素內實際上希望出現“%>”的地方使用。 
\' 使用單引號的屬性內的單引號。不過,你既可以使用單引號也可以使用雙引號,而另外一種引號將具有普通含義。 
\" 使用雙引號的屬性內的雙引號。參見“\'”的說明。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
中文字幕日韩电影| 97精品国产97久久久久久| 欧美日韩成人在线观看| 国产成人综合亚洲| 亚洲高清色综合| 九九久久国产精品| 欧美亚洲一级片| 亚洲精品一区在线观看香蕉| 国产精品国产三级国产专播精品人| 美女av一区二区| 97精品在线观看| 国产精品69精品一区二区三区| 7777精品久久久久久| 精品国产一区二区三区久久狼黑人| 亚洲欧美日韩一区在线| 精品调教chinesegay| 国产精品久久久久久av福利| 一区二区亚洲欧洲国产日韩| 日韩精品高清视频| 国产精品视频久久久久| 在线亚洲欧美视频| 欧美大尺度在线观看| 亚洲第一精品夜夜躁人人躁| 欧美在线精品免播放器视频| 成人久久久久久| 在线一区二区日韩| 国产精品日日做人人爱| 欧洲成人免费aa| 91精品国产综合久久香蕉| 青青久久aⅴ北条麻妃| 亚洲国产成人久久综合| 久久久亚洲成人| 日韩免费高清在线观看| 国产色综合天天综合网| 欧美日韩激情视频| 亚洲精品欧美日韩专区| 欧美亚洲国产成人精品| 亚洲精品国产精品国自产在线| 日韩电影在线观看中文字幕| 欧美激情手机在线视频| 一区二区在线视频播放| 国内揄拍国内精品| 国外色69视频在线观看| 欧美性精品220| 精品动漫一区二区| 国外视频精品毛片| 亚洲视频欧美视频| 欧美成人高清视频| 日韩经典第一页| 亚洲经典中文字幕| 国产精品爽黄69天堂a| 欧美日韩视频免费播放| 欧美精品日韩www.p站| 国产成人精品久久久| 欧美日韩精品国产| 亚洲一区二区黄| 日本高清不卡的在线| 色综合久久精品亚洲国产| 久久伊人精品一区二区三区| 欧美精品在线免费播放| 在线视频精品一| 日韩禁在线播放| 中文字幕精品视频| 亚洲一区二区免费在线| 欧美日韩ab片| 久久久精品中文字幕| 91精品国产99久久久久久| 成人激情在线观看| 亚洲女成人图区| 欧美第一页在线| 激情av一区二区| 国产精品久久久久久久7电影| 日韩激情视频在线播放| 91在线观看免费高清完整版在线观看| 日韩av网站在线| 欧日韩不卡在线视频| 日韩在线视频观看| 91精品综合视频| 亚洲精品福利在线| 青青草精品毛片| 欧美福利小视频| 日韩经典中文字幕| 国产一区二区三区免费视频| 精品日韩美女的视频高清| 国产精品成人观看视频国产奇米| 国产成人精品优优av| 国产免费一区二区三区在线能观看| 91深夜福利视频| 国产日产亚洲精品| 亚洲图片欧洲图片av| 成人福利视频在线观看| 亚洲第一页自拍| 欧美激情网站在线观看| 欧美国产日本高清在线| 欧美日韩美女在线| 欧美午夜精品久久久久久浪潮| 亚洲一区二区三区成人在线视频精品| 亚洲国产女人aaa毛片在线| 久久6免费高清热精品| 这里只有精品丝袜| 自拍视频国产精品| 热99久久精品| 91香蕉嫩草影院入口| 日韩精品在线免费观看| 久久成人综合视频| 国产97在线播放| 国产最新精品视频| 日韩精品亚洲元码| 福利视频第一区| 国产午夜精品全部视频播放| 国产成人精品日本亚洲| 久久久久久亚洲精品| 国产亚洲日本欧美韩国| 日韩一区二区三区国产| 91免费在线视频| 黄网动漫久久久| 91在线视频精品| 亚洲人午夜精品免费| 欧美中文字幕在线观看| 亚洲黄色片网站| 国产裸体写真av一区二区| 欧美在线激情网| 日本视频久久久| 日本不卡高字幕在线2019| 亚洲午夜未删减在线观看| 热草久综合在线| 国产一区玩具在线观看| 亚洲人高潮女人毛茸茸| 欧美视频专区一二在线观看| 久久电影一区二区| 亚洲欧美色图片| 国产免费一区二区三区香蕉精| 在线国产精品视频| 亚洲欧美一区二区三区久久| 日产精品99久久久久久| 国产精品视频中文字幕91| 欧美精品一区三区| 亚洲一区二区日本| 成人97在线观看视频| 久久99久久99精品免观看粉嫩| 中文字幕自拍vr一区二区三区| 亚洲毛片在线观看.| 亚洲电影免费观看高清完整版在线| 亚洲精品久久久久中文字幕二区| 欧美成人精品一区| 中国日韩欧美久久久久久久久| 成人写真福利网| 欧美大片免费观看| 欧美日韩午夜视频在线观看| 最新的欧美黄色| 亚洲女人天堂视频| 日产精品久久久一区二区福利| 欧美性猛交xxxx乱大交蜜桃| 色琪琪综合男人的天堂aⅴ视频| 亚洲va欧美va国产综合久久| 国产视频福利一区| 伦伦影院午夜日韩欧美限制| 国产欧美精品一区二区三区-老狼| 97在线免费视频| 亚洲欧美三级伦理| 中文字幕日韩欧美在线视频| 久久亚洲精品毛片| 国产精品在线看| 欧美国产日韩二区|