成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

JSP開發中的腳本編程淺析

開發 后端
在JSP開發中腳本編程的重要性是什么呢?JSP開發的深入,使你可以把HTML的表達邏輯從植入Servlets中的復雜的商務邏輯區分開來。這樣使得腳本編程可以編寫表達層代碼。

在JSP開發中腳本編程的重要性是什么呢?首先我們來看如果你是直接使用Java Servlets,那你將不得不在Java類中處理HTTP輸入和HTML輸出,你需要豐富的Java編程經驗來構建復雜的應用程序。JSP的加入,使你可以把HTML的表達邏輯從植入Servlets中的復雜的商務邏輯區分開來。這意味著可以由有經驗的腳本編寫者來編寫表達層代碼,而高級的Java開發者能夠集中精力去解決Servlets和bean中更為復雜的問題。

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

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

◆使用declarations(聲明),可以定義全局變量或是在頁內任何地方都可以訪問的Java方法。聲明被包含在標記﹤;%!……%﹥中。

◆使用scriptlets(腳本片斷),你能書寫頁內處理所需的任何邏輯,它們包含在﹤;%……%﹥標記內。

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

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

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

◆Directives(指令)

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

﹤;%@ directive attribute="value" …… %﹥

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

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

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

◆Declarations(聲明)

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

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

◆Expressions(表達式)

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

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

﹤;H2﹥Welcome, ﹤;%= mybean.getName() %﹥﹤;/H2﹥

事實上,在生成動態輸出之前,JSP必須把方法的返回值轉變為Java中的String對象。JSP規范中詳細描述了在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 對象)供你在表達式和腳本片斷中使用?!禞SP 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表單句柄用來驗證輸入,然后有條件地地生成基于回饋的輸出。

按鈕:submit query——提交;reset――重填

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

例2

  1. ﹤;HTML﹥  
  2.  
  3. ﹤;HEAD﹥  
  4.  
  5. ﹤;META. NAME="GENERATOR" Content="NetObjects ScriptBuilder 2.01"﹥  
  6.  
  7. ﹤;TITLE﹥Feedback Results﹤;/TITLE﹥  
  8.  
  9. ﹤;/HEAD﹥  
  10.  
  11. ﹤;%!  
  12.  
  13. // 姓名和意見欄不能為空白  
  14.  
  15. // 檢查它們的值并返回結果  
  16.  
  17. boolean validateInput(String name, String comment) {  
  18.  
  19. boolean result = true;  
  20.  
  21. // 如果姓名或意見未填寫,返回 false 以表明輸入無效  
  22.  
  23. if (name.length() == 0)  
  24.  
  25. result = false;  
  26.  
  27. if (comment.length() == 0)  
  28.  
  29. result = false;  
  30.  
  31. return result;  
  32.  
  33. } // 結束輸入驗證validateInput  
  34.  
  35. // 根據表單上的意見欄輸出結果  
  36.  
  37. String getStringCheese (String comment) {  
  38.  
  39. String cheese = "I like cheese.";  
  40.  
  41. String result;  
  42.  
  43. if (comment.compareTo(cheese) == 0)  
  44.  
  45. result = "We like cheese too!";  
  46.  
  47. else  
  48.  
  49. result = "We hope someday you'll learn to like cheese.";  
  50.  
  51. return result;  
  52.  
  53. } //結束 getStringCheese  
  54.  
  55. %﹥  
  56.  
  57. ﹤;BODY BGCOLOR="#F0F0E0"﹥  
  58.  
  59. ﹤;%  
  60.  
  61. // 獲取通過表單提交的數據  
  62.  
  63. String name = request.getParameter("name");  
  64.  
  65. String age = request.getParameter("age");  
  66.  
  67. String comment = request.getParameter("comment");  
  68.  
  69. boolean isValid;  
  70.  
  71. isValid = validateInput(name, comment);  
  72.  
  73. // 根據用戶是否未填寫姓名或意見欄決定輸出內容  
  74.  
  75. if (isValid) {  
  76.  
  77. %﹥  
  78.  
  79. ﹤;H2﹥Thank you for your feedback!﹤;/H2﹥  
  80.  
  81. ﹤;H3﹥  
  82.  
  83. ﹤;%  
  84.  
  85. //輸出意見欄的查詢結果  
  86.  
  87. out.println(getStringCheese(comment));  
  88.  
  89. } // 結束 if 程序段  
  90.  
  91. else {  
  92.  
  93. out.println("You didn't give us your name or a comment.");  
  94.  
  95. %﹥  
  96.  
  97. ﹤;/H3﹥  
  98.  
  99. Please ﹤;a href="feedback_form.html"﹥try again﹤;/a﹥  
  100.  
  101. ﹤;%  
  102.  
  103. } //結束 else 程序段  
  104.  
  105. %﹥  
  106.  
  107. ﹤;/BODY﹥  
  108.  
  109. ﹤;/HTML﹥  
  110.  

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

這個例子對于JSP開發腳本編程非常簡單易懂。即便你只是一個JavaScript程序員,你也應該可以理解它。我還要指出這個例子中體現的在JSP規范中并不很明顯的一些特性。

 

【編輯推薦】

  1. 對JSP中的內置對象簡單概述
  2. JSP和Servlet中的幾個編碼的作用及原理
  3. 使用JSP include機制改進外觀
  4. JSP教程基礎之腳本的使用
  5. JSP教程基礎篇之HTML表單演示
責任編輯:仲衡 來源: 51CTO整理
相關推薦

2009-07-02 11:34:42

JSP指令JSP開發

2009-03-17 16:18:51

JspActionStruts

2009-07-14 10:47:47

MyEclipse J

2009-07-14 15:42:38

MyEclipse開發

2009-06-16 15:20:48

ApplicationJSP程序

2009-07-03 17:48:34

JSP頁面翻譯

2009-07-06 13:52:56

編寫JSP Tag

2009-06-29 17:39:31

JSP設計模式

2009-07-01 18:20:29

JSP的優勢

2009-07-14 16:25:04

MyEclipse開發

2009-07-14 16:07:46

MyEclipse開發

2009-03-02 09:45:45

2009-01-16 09:58:07

C#編程C#內存管理垃圾收集

2009-03-10 13:59:41

C#套接字編程

2009-07-06 17:11:38

Servlet文件上傳

2009-07-03 09:08:23

JSP標記學習筆記

2009-07-03 09:08:23

JSP標記學習筆記

2009-07-06 14:05:11

JSP服務器

2011-08-18 10:02:47

iPhone SDKOpenFlow

2011-08-18 09:52:13

iPhone SDKUIPageContr
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 精品综合久久 | 一区二区蜜桃 | 好好的日在线视频 | 久久久久久久av | 91精品国产综合久久婷婷香蕉 | 日韩视频在线免费观看 | 欧美中文字幕一区二区三区亚洲 | 欧美性吧 | 日本中文字幕在线观看 | 国产精品久久久久久吹潮 | 手机三级电影 | 日韩精品一区二区三区中文字幕 | 日日日日日日bbbbb视频 | 欧美日一区二区 | 午夜精品一区二区三区在线观看 | 国产高清精品一区二区三区 | 中文字幕一区二区三区乱码在线 | 毛片一级网站 | 精品粉嫩aⅴ一区二区三区四区 | 亚洲精品成人网 | 日韩一 | 欧美一区在线视频 | 中文字幕在线第一页 | 97久久精品午夜一区二区 | 色偷偷人人澡人人爽人人模 | 亚洲精品一区在线观看 | 日韩欧美一区二区三区免费观看 | 国产在线观看一区二区三区 | 国产成人免费视频 | 91精品国产91 | 日韩欧美国产精品一区二区 | 羞羞涩涩在线观看 | 国外成人在线视频网站 | 亚洲一区二区在线播放 | 黄色大片在线免费观看 | 麻豆精品久久久 | 欧美福利久久 | 午夜视频免费 | 91精品国产91久久久久久最新 | 国产成人一区二区 | 日韩欧美国产综合 |