国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發(fā) > 綜合 > 正文

令人興奮的腳本編程

2024-07-21 02:14:24
字體:
來源:轉載
供稿:網友

如果你是直接使用java servlets,那你將不得不在java類中處理http輸入和html輸出,你需要豐富的java編程經驗來構建復雜的應用程序。jsp的加入,使你可以把html的表達邏輯從植入servlets中的復雜的商務邏輯區(qū)分開來。這意味著可以由有經驗的腳本編寫者來編寫表達層代碼,而高級的java開發(fā)者能夠集中精力去解決servlets和bean中更為復雜的問題。

   不管你有沒有java編程知識,都能夠使用jsp。jsp包含了一些服務器端的標簽,使得不用寫一行java代碼就能顯示動態(tài)數據。你可以直接訪問bean來完成操作,然后使用jsp標簽把結果顯示為動態(tài)內容。你還可以用servlets生成bean,servlets 操作的運算結果存于其中,然后再使用jsp標簽顯示結果,同樣不需要在jsp頁中寫java代碼。

   有三種方式可以用來在你的網頁中加入java代碼:

   1、使用declarations(聲明),可以定義全局變量或是在頁內任何地方都可以訪問的java方法。聲明被包含在標記<%!...%>中。

   2、使用scriptlets(腳本片斷),你能書寫頁內處理所需的任何邏輯,它們包含在<%...%>標記內。

   3、expressions(表達式),包含于<%=...%>中。它提供一種簡單的方法來顯示java表達式的結果。被附加上的表達式將被計算并在頁面上顯示出來,就好像你已經在代碼中明確寫出了運算結果的數值一樣。

   在你自己編寫的代碼中,可以使用一些隱含變量(implicit variables)――jsp提供的預定義的java對象。另外,通過使用jsp的指令(directives), 還可以包含非java代碼模塊,比如來自其他文件的html文本。

   下面我們來仔細看一看這些腳本元素,在編寫你自己的jsp腳本時將會經常用到它們。

directives(指令)
   jsp定義了三個頁內指令用于設置jsp參數或擴充代碼。它們是 page,include和taglib,必須寫在jsp頁的第一行。語法如下:

   <%@ directive attribute="value" ... %>

   page指令允許你為網頁設定一些基本參數,包括設置所用腳本語言的參數(默認為java)、你的腳本片斷中引入的java類、設置輸出緩沖區(qū)等等。完整的page指令參數表見《jsp specification version 1.0》(《jsp規(guī)范1.0》)的2.8.1章。

   使用include指令,可以包含其他文件的內容,比如存于單獨文件中的html報頭和頁腳。

   taglib指令用于擴充標準的jsp標簽集,這超出了本文的討論范圍。然而,了解jsp定義了一種擴充其標簽集的方法還是很有好處的,當你是一個軟件商,想擴充jsp的原始功能而又不想破壞其兼容性時,這一點尤為重要。

declarations(聲明)
   使用declarations,你可以在jsp頁中定義方法或變量,它們可被同一頁中的其他代碼訪問。在大多數情況下,你可能會在自己的bean中定義方法。然而,有時候在網頁內定義方法可能更方便一些,尤其是當代碼只用于單一頁面時。不論定義方法還是變量,聲明都包含在<%! %>標記內。

   注意,聲明并不在jsp頁內產生任何輸出。它們僅僅用于定義,而不生成輸出結果。要生成輸出結果,你應該用jsp表達式或腳本片斷。

expressions(表達式)
   expressions是一種非常簡單的jsp標簽,它用來把在<%= %>中定義的jsp表達式的值轉換成字串并將這個值以動態(tài)文本的形式送出。expression的確是一條生成文本的捷徑,有了它,你不必在每次要顯示一段動態(tài)文本的時候都去調用print()方法。典型的應用就是,你可以用expressions顯示簡單的變量值或bean中的方法的返回值。

   例如,下面的代碼將會生成getname()方法的返回值:

   <h2>welcome, <%= mybean.getname() %></h2>

   事實上,在生成動態(tài)輸出之前,jsp必須把方法的返回值轉變?yōu)閖ava中的string對象。jsp規(guī)范中詳細描述了在jsp表達式中,什么樣的java類型和java類會被轉變成字串。

scriptlets(腳本片斷)
   到現在為止你已經學會了使用指令來引入任何java類或java包,你能定義頁面級的方法或變量并在頁中使用它們,你還可以使用提供普通web處理功能的隱含變量。還能在jsp頁內做些什么就取決于你了,因為你可以在scriptlets(腳本片斷)里編寫任何你想要的java代碼,如下所示:

   <% ...code... %>

   通過在page指令中使用import參數,你可以從腳本片斷內調用所有java api。因為你寫的所有jsp代碼實際上都被編譯構成java servlet,它本身就是一個java類,所以你所用的語言本身就是java,而不是任何一種修改或整理過的版本。這就像在ssjs中你可以編寫任何代碼一樣。而與ssjs不同,在jsp中你有權使用整套豐富的java api,因此幾乎沒有任何局限性。

implicit variables(隱含變量)
   前面提到過,jsp定義了一些隱含變量(即java 對象)供你在表達式和腳本片斷中使用。《jsp specification version 1.0》的表2-2列出了jsp1.0中可用的隱含變量。這里列出一些常用的對象:

   out對象,類型為javax.servlet.jsp.jspwriter,提供對方法(例如print()方法)的訪問,用來在腳本片斷內生成輸出結果。

   request對象直接與java中的javax.servlet.http.httpservletrequest類對應,具有該類的對象的一切屬性和方法。舉個例子,要獲取一個從html表單或url查詢字串傳入的值,可以調用request.getparameter()方法,根據名字獲取參量。

   response對象與java中的javax.servlet.http.httpservletresponse類對應,提供對你的網頁產生的html響應的參數的訪問權。因此,要在jsp頁返回的html響應報頭中加入一個值,你就可以調用the response.setheader() 方法來實現。

另一個簡單的例子
   在下面的例子中,我們來看一看一個表單和它的jsp表單句柄之間的交互過程。使用前面討論過的腳本元素,我實現了一個簡單的web站點回饋表單(見圖2)和一個jsp表單句柄用來驗證輸入,然后有條件地地生成基于回饋的輸出。

   圖2.一個web站點回饋表單


   圖中按鈕:submit query--提交;reset――重填

   表單句柄將會檢驗名稱和意見欄以確定它們已被填寫,如果其中任何一個或兩個是空白的,表單句柄會生成一條錯誤信息;否則它將繼續(xù)查看用戶意見是否與預先設定的字串匹配。如果匹配,它就輸出一條專門的信息;否則輸出“thank you”。

   例2

   <html>

   <head>

   <meta name="generator" content="netobjects scriptbuilder 2.01">

   <title>feedback results</title>

   </head>

   <%!

   // 姓名和意見欄不能為空白

   // 檢查它們的值并返回結果

   boolean validateinput(string name, string comment) {

   boolean result = true;

   // 如果姓名或意見未填寫,返回 false 以表明輸入無效

   if (name.length() == 0)

     result = false;

   if (comment.length() == 0)

     result = false;

   return result;

   } // 結束輸入驗證validateinput



   // 根據表單上的意見欄輸出結果

   string getstringcheese (string comment) {

   string cheese = "i like cheese.";

   string result;

   if (comment.compareto(cheese) == 0)

     result = "we like cheese too!";

   else

     result = "we hope someday you'll learn to like cheese.";

   return result;

   } //結束 getstringcheese

   %>

   <body bgcolor="#f0f0e0">

   <%

   // 獲取通過表單提交的數據

   string name = request.getparameter("name");

   string age = request.getparameter("age");

   string comment = request.getparameter("comment");

   boolean isvalid;

   isvalid = validateinput(name, comment);

   // 根據用戶是否未填寫姓名或意見欄決定輸出內容

   if (isvalid) {

   %>

   <h2>thank you for your feedback!</h2>

   <h3>

   <%

     //輸出意見欄的查詢結果

     out.println(getstringcheese(comment));

   } // 結束 if 程序段

   else {

     out.println("you didn't give us your name or a comment.");

   %>

   </h3>

   please <a href="feedback_form.html">try again</a>

   <%

   } //結束 else 程序段

   %>

   </body>

   </html>

   這個例子假定用戶輸入的意見是“i like cheese."(我喜歡奶酪)在代碼中可以看到,這一響應是為填寫這條意見的用戶定制的。表單句柄將會返回如圖3所示的頁面:

   圖3.表單句柄輸出


   圖中文字:謝謝你的反饋!我們也喜歡奶酪。

   這個例子非常簡單易懂。即便你只是一個javascript程序員,你也應該可以理解它。我還要指出這個例子中體現的在jsp規(guī)范中并不很明顯的一些特性。首先,請注意我在聲明部分(<%'...%>中的部分)定義了一些方法,與在java類中定義方法一模一樣。這是因為jsp引擎把這些方法轉變?yōu)榈讓拥膉ava servlets,在瀏覽器向網頁發(fā)出請求時由服務器來執(zhí)行它們。因此,任何變量和方法的定義都必須遵守標準的java語法。

   還應注意到,在我的腳本片斷的代碼中,我把一個if...else語句分開了,它跨越了兩個不同的腳本片斷段。這完全是合法的!不僅合法,而且把腳本片斷代碼和靜態(tài)html交叉起來是有條件生成html的好辦法,就像我在本例中所做到的一樣。

   最后,你可以看到我通過調用request.getparameter()方法取得表單元素的值并把它賦給一個臨時變量。這是處理從表單或查詢字串輸入的值的標準方法。

上一篇:對比與總結

下一篇:JDBC 入門(一) - 開始

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 武定县| 临汾市| 汾阳市| 土默特右旗| 育儿| 民县| 岑巩县| 垦利县| 买车| 宿州市| 香河县| 宜昌市| 贵南县| 鄂托克前旗| 汕尾市| 永顺县| 高密市| 平乐县| 湟中县| 仁布县| 丹棱县| 常德市| 滦平县| 合江县| 湘阴县| 平昌县| 民勤县| 莱西市| 延安市| 吴川市| 弋阳县| 荥阳市| 红河县| 高雄县| 耿马| 崇州市| 苏尼特左旗| 伊金霍洛旗| 离岛区| 平乐县| 水城县|