JSP系列三:JSP指令碼元素

來源:互聯網
上載者:User

一,指令碼元素:將Java代碼插入到與jsp頁面對應的servlet中。
 
 指令碼元素的3中形式:
  運算式,Scriptlet,聲明。
  
二,運算式:將資料或資料操作後的結果轉換為字串,插入到當前servlet的輸入資料流中(_jspService方法中)。

 1,JSP運算式標準文法:
  <%= JAVA運算式 %>

  JSP運算式xml文法:
   <jsp:expression>JAVA運算式</jsp:expression>

 2,JSP運算式後面不加分號;

 3,操作後的結果將轉換為字串,插入到當前servlet的輸入資料流中。 

 4,JSP運算式將產生Servlet的print語句。
  HTML轉換為print語句時,使用雙引號將文本引起來。
  JSP運算式轉換為沒有雙引號的print語句。

 5,這些語句都會放入_jspService方法中,無論doGet還是doPost都調用該_jspService方法。

三,Scriptlet(指令碼段): 將Java代碼插入到servlet的_jspService方法中。

 1,Scriptlet標準文法:
  <%  java代碼 %>

 Scriptlet的xml文法格式:
  <jsp:scriptlet> scriptlet </jsp:scriptlet>

 2,scriptlet 語句後面要加分號。

 3,Scriptlet可以訪問到運算式能夠訪問的所有自動定義變數。

 4,Scriptlet代碼會按出現的次序插入到_jspService方法中。

 5,在Scriptlet中聲明的變數都轉譯為_jspService方法中的本地變數。所以變數是安全執行緒的。

四,聲明(declaration):將方法或欄位定義插入到servlet類的主定義體中(_jspService方法除外)。

 1,聲明的文法:
  <%! 域或方法的聲明 %>

 聲明的xml文法格式:
  <jsp:declaration> 域或方法的聲明 </jsp:declaration>

 2,聲明只在當前JSP頁面中有效。

 3,聲明不產生輸出。

 4,不要使用JSP聲明覆蓋Servlet的(service方法)。

 5,可以使用JSP聲明覆蓋jspInit或jspDestroy方法來初始化和銷毀JSP頁面,而不要直接使用init和destroy方法。
  注意:這裡是jspInit和jspDestroy而不是_jspInit和_jspDestroy方法。JSP容器會在調用_jspInit和_jspDestroy方法後調用自訂的jspInit和jspDestroy方法。
  個人認為,這裡的使用了模板方法模式,jspInit和jspDestroy為模板方法_jspInit和_jspDestroy方法的鉤子方法。
  既然JSP實現提供了這樣的機制,那實現這些方法是理由充分的了。

  在擷取初始化參數的時候,需要在web.xml中配置JSP頁面的Servlet和ServletMapping。
  <servlet-name>即為帶尾碼的jsp檔案名稱 xxx.jsp。
  <jsp-file>代替<servlet-class>對jsp檔案做映射。
  <url-pattern>的路徑要指定jsp檔案的相對路徑的全稱包括尾碼。

  重點在於 如何解決由此帶來的資料並發訪問的問題。
  JSP容器只有一個servlet執行個體,請求線程的不同會造成並發的問題。為多個線程共用,這樣將造成使用聲明中資料的一致問題。

 6,使用單獨的Java類而非JSP聲明來定義多數方法。

 7,對於並發訪問,聲明中的域或者變數,除非是唯讀 ,否則是線程不安全的。

 8,聲明是產生_jspService方法之外的代碼,所以在聲明中是不能“直接”訪問“隱含對象”。
 

五,運算式,Scriptlet,聲明的比較
 
 文法:
  Scriptlet 和 聲明 都是java語句,而JSP運算式只是運算式。一個完整的語句需要分號表示結束,而運算式不需要。

 Java代碼插入位置:

  運算式:_jspService方法的輸出資料流的print方法中;
  Scriptlet :_jspService方法體中對應的位置。
  聲明:servlet類的主定義體中(_jspService方法除外);

 變數存取範圍:
  運算式:可以訪問serlvet類中的類的域和_jspService方法中的局部變數。
  Scriptlet:同運算式。
  聲明:不能訪問聲明外的局部變數,比如_jspService方法中的局部變數(隱含對象)。

 執行緒安全性:
  運算式和Scriptlet是安全執行緒的。
  聲明是線程不安全的。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.