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

首頁 > 編程 > JSP > 正文

動態網頁技術---JSP

2019-11-15 00:20:49
字體:
來源:轉載
供稿:網友
動態網頁技術---jsp

JSP(全稱JavaServerPages)是由Sun Microsystems公司倡導和許多公司參與共同創建的一種使軟件開發者可以響應客戶端請求,而動態生成HTML、xml或其他格式文檔的Web網頁的技術標準。JSP技術是以java語言作為腳本語言的,JSP網頁為整個服務器端的Java庫單元提供了一個接口來服務于HTTP的應用程序。

JSP使Java代碼和特定的預定義動作可以嵌入到靜態頁面中。JSP句法增加了被稱為JSP動作的XML標簽,它們用來調用內建功能。另外,可以創建JSP標簽庫,然后像使用標準HTML或XML標簽一樣使用它們。標簽庫提供了一種和平臺無關的擴展服務器性能的方法。

JSP被JSP編譯器編譯成Java Servlets。一個JSP編譯器可以把JSP編譯成JAVA代碼寫的servlet然后再由JAVA編譯器來編譯成機器碼,也可以直接編譯成二進制碼。

目錄
  • 1 JSP和Servlets
    • 1.1 JSP指令
    • 1.2 JSP腳本元素和變量
      • 1.2.1 標準腳本變量
      • 1.2.2 腳本元素
    • 1.3 JSP動作
      • 1.3.1動作樣例
        • 1.3.1.1 jsp:include
        • 1.3.1.2 jsp:forward
        • 1.3.1.3 jsp:plugin
        • 1.3.1.4 jsp:useBean
    • 1.4 JSP標簽庫
  • 2. 本地化
  • 3. JSP2.0
  • 4. 模型-視圖-控制器 模式
  • 5. 樣例
  • 6. 出版物
  • 關注交流

JSP和Servlets

從架構上說,JSP可以被看作是從Servlets高級提煉而作為JAVA Servlet2.1 API的擴展而應用。Servlets和JSP最早都是由Sun Microsystems(太陽公司)開發的。從JSP1.2版本以來,JSP處于Java Community PRocess(有人譯為:JAVA社區組織)開發模式下。JSR-53規定了JSP 1.2和Servlet 2.4的規范,JSR-152規定了JSP 2.0的規范。2006年5月,JSP 2.1的規范作為Java EE5的一部分,在JSR-245中發布。

靜態數據在輸入文件中的內容和輸出給HTTP響應的內容完全一致。此時,該JSP輸入文件會是一個沒有內嵌JAVA或動作的HTML頁面。而且,客戶端每次請求都會得到相同的響應內容。

JSP指令

JSP指令控制JSP編譯器如何去生成servlet,以下是可用的指令:

  • 包含指令include –包含指令通知JSP編譯器把另外一個文件完全包含入當前文件中。效果就好像被包含文件的內容直接被粘貼到當前文件中一樣。這個功能和C預處理器所提供的很類似。被包含文件的擴展名一般都是"jspf"(即JSPFragment,JSP碎片):
<%@ include file="somefile.jsp" %>
  • 頁面指令page –頁面指令有以下幾個選項:
import使一個JAVA導入聲明被插入到最終頁面文件。
contentType規定了生成內容的類型。當生成非HTML內容或者當前字符集character set并非默認字符集時使用。
errorPage處理HTTP請求時,如果出現異常則顯示該錯誤提示信息頁面。
isErrorPage如果設置為TRUE,則表示當前文件是一個錯誤提示頁面。
isThreadSafe表示最終生成的servlet是否線程安全(threadsafe)。
<%@ page import="java.util.*" %> //example import導入樣例<%@ page contentType="text/html" %> //example contentType頁面類型樣例<%@ page isErrorPage=false %> //example for non error page無錯頁面樣例<%@ page isThreadSafe=true %> //example for a thread safe JSP線程安全JSP樣例

注意:在同一個JSP文件中只有"import"導入頁面指令可以被多次使用。

  • 標簽庫指令taglib –標簽庫指令描述了要使用的JSP標簽庫。該指令需要指定一個前綴prefix(和C++的命名空間很類似)和標簽庫的描述URI:
<%@ taglib prefix="myprefix" uri="taglib/mytag.tld" %>
JSP腳本元素和變量標準腳本變量

以下是永遠可用的腳本變量:

  • out:JSPWriter,用來寫入響應流的數據
  • page:servlet自身
  • pageContext:一個PageContext實例包括和整個頁面相聯系的數據,一個給定的HTML頁面可以在多個JSP之間傳遞。
  • request:HTTP request(請求)對象
  • response:HTTP response(響應)對象
  • session:HTTP session(服務端會話)對象
腳本元素

有三個基本的腳本元素,作用是使JAVA代碼可以直接插入servlet.

  • 一種是聲明標簽,在JAVA SERVLET的類體中放入一個變量的定義。靜態的數據成員也可以如此定義。
    <%! int serverInstanceVariable = 1; %>
  • 一種是腳本標簽,在JAVA SERVLET的類的_jspService()方法中放入所包含的語句。
    <% int localStackBasedVariable = 1;  out.println(localStackBasedVariable); %>
  • 一種是表達式標簽,在JAVA SERVLET的類中放入待賦值的表達式,表達式注意不能以分號結尾。
    <%= "expanded inline data " + 1 %>
JSP動作

JSP動作是一系列可以調用內建于網絡服務器中的功能的XML標簽。JSP提供了以下動作:

jsp:include和子過程類似,JAVA SERVLET暫時接管對其它指定的JSP頁的請求和響應。當處理完該JSP頁后就馬上把控制權交還當前JSP頁。這樣JSP代碼就可以在多個JSP頁中共享而不用復制。
jsp:param可以在jsp:include, jsp:forward或jsp:params塊之間使用。指定一個將加入請求的當前參數組中的參數。
jsp:forward用于處理對另一個JSP或SERVLET的請求和響應??刂茩嘤肋h不會交還給當前JSP頁。
jsp:pluginNetscape Navigator的老版本和Internet Explorer使用不同的標簽以嵌入一個applet。這個動作產生為嵌入一個APPLET所需要的指定瀏覽器標簽。
jsp:fallback如果瀏覽器不支持APPLETS則會顯示的內容。
jsp:getProperty從指定的JavaBean中獲取一個屬性值。
jsp:setProperty在指定的JavaBean中設置一個屬性值。
jsp:useBean創建或者復用一個JavaBean變量到JSP頁。
標簽樣例jsp:include
1 <html>2 <head></head>3 <body>4 <jsp:include page="mycommon.jsp" >5     <jsp:param name="extraparam" value="myvalue" />6 </jsp:include>7 name:<%=request.getParameter("extraparam")%>8 </body>9 </html>
jsp:forward
1 <jsp:forward page="subpage.jsp" >2      <jsp:param name="forwardedFrom" value="this.jsp" />3 </jsp:forward>

在本例中,請求被傳遞到"subpage.jsp",而且請求的處理權不會再返回前者。

jsp:plugin
 1 <jsp:plugin type=applet height="100%" width="100%" 2             archive="myjarfile.jar,myotherjar.jar" 3             codebase="/applets" 4             code="com.foo.MyApplet" > 5     <jsp:params> 6         <jsp:param name="enableDebug" value="true" /> 7     </jsp:params> 8     <jsp:fallback> 9         Your browser does not support applets.10     </jsp:fallback>11 </jsp:plugin>
View Code

上述plugin例子說明了一種在網頁中嵌入applet的統一方法。在<OBJECT>標簽出現之前,并沒有一種嵌入applets的通用方法。這個標簽設計得并不好,但有希望在以后加入動態屬性(height="${param.height}", code="${chart}"等)和動態參數的新功能。目前jsp:plugin標簽不允許動態調用applets。例如,你如果有一個圖表applet需要數據點以參數形式被傳入,除非數據點的數量是一個常量,否則你就不能使用ResultSet循環來創建jsp:param標簽,你不得不手寫每個jsp:param標簽的代碼。而每個上述jsp:param標簽可以有一個動態命名和動態值。

jsp:useBean
1 <jsp:useBean id="myBean" class="com.foo.MyBean" scope="request" />2 <jsp:getProperty name="myBean" property="lastChanged" />3 <jsp:setProperty name="myBean" property="lastChanged" value="<%= new Date()%>" />
View Code

scope屬性可以是request, page, session or application,它有以下用意:

  • request— 該屬性在請求的生命周期內有效,一旦請求被所有的JSP頁處理完后,那么該屬性就不可引用。
  • page— 該屬性只是當前頁中有效。
  • session— 該屬性在用戶會話的生命周期內有效。
  • application— 該屬性在各種情況下都有效,并且永遠不會被變為不可引用,和全局變量global variable相同。

上述例子將會用一個創建一個類的實例,并且把該實例存儲在屬性中,該屬性將在該請求的生命周期內有效。它可以在所有被包含或者從主頁面(最先接收請求的頁面)轉向到的JSP頁之間共享。

JSP標簽庫

除了JSP預定義動作之外,開發者還可以使用JSP標簽擴展API添加他們自定義的動作。開發者寫一種實現一個標簽的界面和一個標簽庫的XML描述文件的JAVA類,這就能指定標簽和實現標簽的JAVA類 請看如下JSP:

<%@ taglib uri="mytaglib.tld" prefix="myprefix" %>...<myprefix:myaction> <%-- the start tag %>...</myprefix:myaction> <%-- the end tag %>...

JSP編譯器將會載入mytaglib.tld這個XML文件,然后可以看到標簽myaction由JAVA類MyActionTag實現。當該標簽首次在文件中使用時,將會創建一個MyActionTag的實例。然后(而且當每次該標簽被使用時),當出現開始標簽時,將會調用doStartTag()方法,根據開始標簽的結果,來決定如何處理標簽的主體。主體是指開始標簽和結束標簽之間的文本。這個doStartTag()方法將會返回如下之一:

  • SKip_BODY - 標簽之間不做處理。
  • EVAL_BODY_INCLUDE - 對標簽之內主體進行賦值。
  • EVAL_BODY_TAG - 對標簽之內主體進行賦值并把結果輸出到流(保存在標簽的主體內容屬性中)。
注意:如果標簽擴展了BodyTagSupport類,當主體被執行時會在調用doEndTag()之前調用doAfterBody()方法。該方法用于實現循環結構。

當結束標簽出現時,它會調用doEndTag()方法,該方法會返回如下兩做之一:

  • EVAL_PAGE - 表示JSP文件的剩余部分將會被執行。this indicates that the rest of the JSP file should be processed.
  • SKIP_PAGE - 表示將不會再有更多執行操作。當前JSP頁交出控制權。就象在轉發動作中的作用一樣。

上述myaction標簽tag會有一個類似下面例子的用于實現的類:

 1 public class MyActionTag extends  TagSupport { 2     //Releases all instance variables. 3     public void release() {...} 4   5     public MyActionTag() { ... } 6   7     //called for the start tag 8     public int doStartTag() { ... } 9  10     //called at the end tag11 }
View Code

本地化

JSP的本地化是通過和JAVA應用程序相同的方式完成的,即使用資源包。

JSP 2.0

新的JSP規范版本包括新的用于提升程序員工作效率功能,主要有:

  • AnExpression Language(EL)允許開發者創建Velocity-樣式templates(among other things).
  • 更快更簡單的創建新標簽的方法。
Hello, ${param.visitor}  <%-- same as: Hello, <%=request.getParameter("visitor")%> --%>
模型-視圖-控制器 模式

為了把表現層presentation從請求處理request processing和數據存儲data storage中分離開來,太陽公司推薦在JSP文件中使用一種模型-視圖-控制器Model-view-controller模式。規范的SERVLET或者分離的JSP文件用于處理請求。當請求處理完后,控制權交給一個只作為創建輸出作用的JSP頁。有幾種平臺都基于服務于網絡層的模-視圖-控件 模式(比如Struts和Spring framework)。

樣例

不管JSP編譯器是生成SERVLET的JAVA源碼,或者是直接發布二進制碼,了解一下JSP編譯器是如何把文件轉換成一個JAVA SERVLET,都是很有幫助的。例如,看一下如下輸入JSP和它最后生成的JAVA SERVLET:

Input JSP

 1 <%@ page errorPage="myerror.jsp" %> 2 <%@ page import="com.foo.bar" %> 3   4 <html> 5 <head> 6 <%! int serverInstanceVariable = 1;%> 7 ... 8 <% int localStackBasedVariable = 1; %> 9 <table>10     <tr><td><%= "expanded inline data " + 1 %></td></tr>11     ...
View Code

Resulting servlet

 1 package jsp_servlet; 2 import java.util.*; 3 import java.io.*; 4 import javax.servlet.*; 5 import javax.servlet.http.*; 6 import javax.servlet.jsp.*; 7 import javax.servlet.jsp.tagext.*; 8   9 import com.foo.bar; //imported as a result of <%@ page import="com.foo.bar" %>10 import ...11  12 class _myserlvet implements javax.servlet.Servlet, javax.servlet.jsp.HttpJspPage {13     //inserted as a14     //result of <%! int serverInstanceVariable = 1;%>15     int serverInstanceVariable = 1;16     ...17  18     public void _jspService( javax.servlet.http.HttpServletRequest request,19                             javax.servlet.http.HttpServletResponse response )20         throws javax.servlet.ServletException,21                java.io.IOException22     {23         javax.servlet.ServletConfig config = ...;//get the servlet config24         Object page = this;25         PageContext pageContext = ...;//get the page context for this request26         javax.servlet.jsp.JspWriter out = pageContext.getOut();27         HttpSession session = request.getSession( true );28         try {29              out.print( "<html>/r/n" );30              out.print( "<head>/r/n" );31              ...32              //from <% int localStackBasedVariable = 1; %>33              int localStackBasedVariable = 1;34              ...35              out.print( "<table>/r/n" );36              out.print( "   <tr><td>" );37              //note, toStringOrBlank() converts the expression into a string or if38              // the expression is null, it uses the empty string.39              //from <%= "expanded inline data " + 1 %>40              out.print( toStringOrBlank( "expanded inline data " + 1 ) );41              out.print( "   </td></tr>/r/n" );42              ...43         } catch ( Exception _exception ) {44            //clean up and redirect to error page in <%@ page errorPage="myerror.jsp" %>45         }46     }47 }
View Code

出版物

JavaServer Pages, Third Edition,Hans Bergsten,O'Reilly & Associates, Inc.,Sebastopol, California, 2003.ISBN 0-596-00563-6


關注交流

個人公眾微信公眾號:華少



發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
久久成人av网站| 久久夜精品va视频免费观看| 日韩亚洲欧美中文高清在线| 亚洲一区二区中文| 亚洲男人天堂视频| 亚洲欧美日韩中文在线制服| 精品视频在线导航| 成人444kkkk在线观看| 国产精品美女久久久久久免费| 久久久久中文字幕| 国产不卡av在线免费观看| 欧美精品videossex性护士| 国产精品九九久久久久久久| 九九热r在线视频精品| 伊人久久五月天| 欧美性猛交xxxx乱大交| 国产精品成人av性教育| 国产精品91久久久| 91九色视频在线| 成人精品视频久久久久| 国产精品aaaa| 国产福利精品在线| 揄拍成人国产精品视频| 久久欧美在线电影| 欧美成人一区二区三区电影| 亚洲一区二区三| 欧美在线精品免播放器视频| 国产精品极品尤物在线观看| 久久99久国产精品黄毛片入口| 视频在线一区二区| 久久九九亚洲综合| 91成品人片a无限观看| 日韩**中文字幕毛片| 亚洲久久久久久久久久久| 色樱桃影院亚洲精品影院| 亚洲图片在线综合| 日韩黄色在线免费观看| 国产成人在线精品| 91免费精品国偷自产在线| 色午夜这里只有精品| 日韩美女在线播放| 中文字幕精品国产| 九九热在线精品视频| 亚洲天堂视频在线观看| 欧美在线观看网站| 欧美成人全部免费| 一区二区三区亚洲| 国产精品视频地址| 国产精品国模在线| 欧美一级片久久久久久久| 国内免费久久久久久久久久久| 国产精品高清在线| 久久精品国产v日韩v亚洲| 最近2019年好看中文字幕视频| 久久亚洲国产成人| 九九热这里只有精品6| 国产国语刺激对白av不卡| 中文字幕欧美精品在线| 欧美壮男野外gaytube| 这里精品视频免费| 视频直播国产精品| 亚洲第一精品自拍| 亚洲人午夜精品免费| 欧美日韩高清在线观看| 亚洲精品乱码久久久久久按摩观| 国产在线观看91精品一区| 国产精品成人av在线| 亚洲激情视频在线观看| 青青a在线精品免费观看| 国内精品在线一区| 欧美在线观看一区二区三区| 国产精品成av人在线视午夜片| 国产亚洲福利一区| 国产精品第1页| 亚洲精品影视在线观看| 亚洲性猛交xxxxwww| 国产视频一区在线| 深夜福利亚洲导航| 色综合久久88色综合天天看泰| 日韩美女写真福利在线观看| 日本最新高清不卡中文字幕| 亚洲日本欧美中文幕| 国产视频精品va久久久久久| 日韩成人在线免费观看| 91免费观看网站| 日日狠狠久久偷偷四色综合免费| 日韩欧美在线一区| 日韩激情av在线免费观看| 日本19禁啪啪免费观看www| 日韩少妇与小伙激情| 裸体女人亚洲精品一区| 久久综合免费视频影院| 日韩精品在线影院| 最近2019中文字幕第三页视频| 亚洲欧美国产日韩天堂区| 神马久久桃色视频| 亚洲一区久久久| 成人妇女淫片aaaa视频| yellow中文字幕久久| 91色p视频在线| 伊人久久久久久久久久| 色久欧美在线视频观看| 国产香蕉97碰碰久久人人| 国产99久久精品一区二区 夜夜躁日日躁| 国产香蕉精品视频一区二区三区| 欧美日韩国产影院| 国产在线观看一区二区三区| 2020欧美日韩在线视频| 久久中国妇女中文字幕| 岛国av一区二区三区| 欧美专区国产专区| 日韩欧美中文字幕在线观看| 国产欧美日韩综合精品| 一区二区在线视频播放| 伊是香蕉大人久久| 88国产精品欧美一区二区三区| 97精品视频在线播放| 亚洲国产91色在线| 亚洲欧洲偷拍精品| 欧美精品电影免费在线观看| 欧美大片免费观看| 亚洲国产精品yw在线观看| 国产成人精品免费视频| yw.139尤物在线精品视频| 日韩在线免费观看视频| 在线色欧美三级视频| 日本欧美黄网站| 精品露脸国产偷人在视频| 亚洲人成电影网站| 亚洲视频在线观看视频| xvideos亚洲人网站| 国产不卡av在线| 91在线色戒在线| www国产亚洲精品久久网站| 欧美亚洲在线播放| 91香蕉嫩草神马影院在线观看| 91视频国产一区| 久久亚洲春色中文字幕| 91精品国产自产在线观看永久| 美女少妇精品视频| 日韩人在线观看| 亚洲精品一区久久久久久| 亚洲欧美一区二区精品久久久| 日韩av成人在线观看| 国产欧美日韩免费看aⅴ视频| 国产免费一区二区三区香蕉精| 久久久精品国产网站| 久久久久久久久中文字幕| 久久影视电视剧免费网站| 一本色道久久88综合亚洲精品ⅰ| 欧美日韩国产一中文字不卡| 国产精品人人做人人爽| 色诱女教师一区二区三区| 中文字幕成人精品久久不卡| 91精品国产色综合久久不卡98口| 国产精品久久中文| 亚洲高清不卡av| 日本视频久久久| 午夜免费久久久久| 日韩亚洲在线观看| 国产精品看片资源| 日韩精品免费在线视频观看| 亚洲免费视频在线观看| 68精品久久久久久欧美|