<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    精彩的人生

    好好工作,好好生活

    BlogJava 首頁 新隨筆 聯系 聚合 管理
      147 Posts :: 0 Stories :: 250 Comments :: 0 Trackbacks
    作者: 高科華∣來源:Matrix

    J2EE 1.4簡介
    2003年11月24日,J2EE的JCP(Java Community Process)委員會投票一致通過了J2EE 1.4,這是過去兩年內發布的第一個主要版本。這個最新版的企業Java標準開放平臺增加了許多新的服務,J2EE 1.4 SDK支持這些服務,現在可以下載這個SDK了。這個SDK包括J2EE 1.4 應用服務器、J2SE 1.4.2和J2EE 1.4示例代碼。你可以下載整個SDK或單獨下載應用服務器或示例代碼。
    下面的技巧介紹了J2EE 1.4的一些新特點。也包括如何在Solaris、 Windows、 Linux、和 Mac OS X上安裝J2EE 1.4 SDK。但是沒有完全覆蓋這個平臺的所有新內容。關于J2EE 1.4新內容的更全面的介紹,請看J2EE v1.4 Application Server Release Notes。
    對Web Service的支持
    J2EE 1.4最重要、最受爭議的特點是對標準的Web Service的端對端的支持。有了J2EE 1.4,現在可以用HTTP之上的SOAP(Simple Object Access Protocol)使得J2EE組件(例如企業Bean和servlet)成為Web Service。
    J2EE 1.4要求應用服務器必須遵守WS-I Basic Profile 1.0,這個規范定義了Web service的傳輸和協議。這使得Web service是可以互操作的。
    與J2EE中Web service有關的關鍵技術如下:
    · Web Services for J2EE 1.1。結合單個J2EE技術創建Web service的主要是Web Services for J2EE。它定義了客戶端、service端以及容器之間的部署協議。新的部署描述符文件,webservices.xml,為每一種組件定義了部署模式。Web Services for J2EE 還定義了編程模型(JAX-RPC)、 使用JNDI查找提供service的對象、和安全。最后,它還提供了一個新的Handler對象,開發者可以用這種對象阻止和操作SOAP消息。
    · JAX-RPC 1.1 (Java API for XML-Remote Procedure Calls)。JAX-RPC是一個標準的遠程過程調用接口,它使用XML作為方法調用和返回值的序列化協議。JAX-RPC 把servlet和無狀態會話Beans定義為在SOAP和 WSDL (Web Services Description Language)的基礎上的XML Web service的service端。Service端是實現了Web service邏輯的軟件組件。JAX-RPC 的client接口定義了對Web service的遠程調用是如何發生的,以及參數和返回值(包括collection)是如何序列化的。JAX-RPC 1.1 還支持對安全Web services的基于SSL的驗證。
    · JAXR 1.0 (Java API for XML Registries)。 JAXR 把不同的XML注冊表統一到單個模型。程序員可以利用XML注冊表發現和查找service,訪問它們的內容和元數據。例如,你可以用應用創建工具訪問指定服務器上的注冊表,找出服務器提供了哪些service,設計SOAP客戶端使用其中的一個service。JARX還使得外部Web service客戶端可以訪問J2EE Web service。
    · SAAJ 1.2 (SOAP with Attachments API for Java)。SAAJ用具有MIME附件的SOAP消息處理客戶端和Web service之間的SOAP消息傳遞。MIME附件既可以用來發送文檔(對基于文檔的Web service而言)又可以用來發送傳遞大量數據的參數(對 RPC式的Web service)。 SAAJ還為帶附件的SOAP消息定義了DOM(Document Object model,文檔對象模型)。它允許用戶對如何編碼SOAP消息進行控制, 為重復或復雜的任務提供了automation hook。
    · JAXP 1.2 (Java API for XML Parsing)。這個包統一了解析和處理XML的各種方法。負責解析的類可以在部署時與運行時之間切換。JAXP 1.2包含了SAX 2.0、 DOM Level 2、和XSLT。
    Web層增強
    不是所有的J2EE 1.4中的Web層增強都與Web service有關?,F有的核心技術也得到了更新。
    J2EE 1.4中的Web層最大的增強在于JSP 2.0。JSTL(JavaServer Pages Standard Tag Library)提供了范圍廣泛的通用tag,這些tag極大地方便了Web層的開發。JSTL還定義了新的表達式語言,這種語言可以用來編寫存儲在任何范圍內的Web層JavaBean組件的表達式。下一個技巧說明了如何使用幾種這樣的tag。
    JSP另一個主要的增強是方便地定義定制tag的能力。在JSP 2.0以前的版本中,定義定制tag要求編寫實現Tag接口的類。JSP 2.0仍然支持這種方法,但是它還允許用JSP代碼片斷定義定制tag(在JSP文件中定義),然后在多個地方使用所定義的定制tag。
    EJB 2.1
    J2EE 1.4的另一個重要特點是EJB 2.1,EJB 2.1提供了幾個新的增強。這些包括:
    l 無狀態會話Bean可以用作Web service端。
    l 新的Timer service可以設置成定時調用企業Bean的ejbTimeout()方法??梢杂眠@個service定時調用商業邏輯。
    l EJB-QL增加了對結果集排序的ORDER BY子句和新的合計函數(AVG、MAX、MIN、SUM和COUNT)。
    l 現在消息驅動的Bean可以接受任何類型的消息,而不只是JMS消息(以前的版本只接受JMS消息)?,F在連接器可以直接與MDB通訊,通過適配器把從外部系統傳來的消息翻譯成對MDB的調用。
    企業Java BluePrint for J2EE 1.4
    Java BluePrint示例應用是J2EE平臺的必要部分。示例應用展示了應用設計和開發的最佳實踐,提供了如何使用J2EE技術的例子。J2EE 1.4 SDK開發版本包含了AdventureBuilder,這是新增的J2EE的Web service示例應用。它也包含了原有的Java Pet Store和無線游戲示例應用。
    其他變化
    J2EE平臺其他的一些重要變化包括:
    l JACC 1.0(Java Authorization Contract for Containers ):允許自由選擇安全和基于角色的授權提供者。
    l Java Deployment API 1.1: 獨立于服務器的部署工具。
    l Java Message Service (1.1) 增強
    l J2EE Connectors 1.5:包括了對異步、雙向、多線程連接器的完全支持。
    l J2EE Deployment 1.1:包括了可代替DTD的用XML模式定義的部署描述符,為了向后兼容保留了DTD.
    l J2EE Management 1.0:用Java工具或非Java工具管理企業資源。
    l 新版JavaMail (1.3),Java Transaction API (JTA 版本1.01B), 和JDBC 3.0
    安裝服務器
    用J2EE 1.4新的GUI安裝程序安裝服務器很簡單。所支持的操作系統如下:
    l Solaris SPARC 8
    l Solaris SPARC 9
    l Windows 2000 Pro SP3+
    l Windows XP Pro SP1+
    l Windows 2000 Server SP3+
    l Windows Server 2003
    l Linux RedHat 8
    除了對Linux RedHat的支持以外,只需作很少的修改,甚至不需修改,服務器就能在許多其他的Linux版本環境運行。在Linux上安裝的主要要求是J2RE 1.4.1以上的版本。
    在所支持的任意一個操作系統上安裝服務器的步驟是:
    1. 下載適當的軟件包(http://java.sun.com/j2ee/1.4/download-dr.html)。
    2. 運行下載的可執行程序。
    在Macintosh OS X 或Darwin上安裝J2EE 1.4 SDK是可能的,盡管沒有宣稱對它們的支持。要在OS X 或Darwin上安裝J2EE 1.4 SDK,你必須有root訪問權限,J2RE必須是1.4.1以上的版本。
    在OS X 或Darwin上安裝J2EE 1.4 SDK的步驟如下:
    1. 下載SDK的Linux版本(http://java.sun.com/j2ee/1.4/download-dr.html)。下載的文件將是ELF二進制文件。
    2. 用unzip命令行實用程序將壓縮文件解壓到一個空目錄。必須用unzip,用象StuffIt這樣的程序是不行的。在提示符(‘$’)后輸入:
    $ unzip j2eesdk-1_4-dr-linux-eval
    3. 開始安裝,輸入:
    $ java -cp package/PackageFormat.jar:. appserv
    安裝程序會開始安裝SDK。如果偶爾不能看到安裝時顯示的提示,這時可以調整窗口的大小。
    4. 安裝程序要求輸入Java路徑時,輸入:
    /Library/Java/Home
    安裝程序會給出一個提示信息“server requires JDK 1.4.2. Java 2 version 1.4.1 will work properly”,選擇<continue>。
    5. 安裝程序完成后,還必須做些工作。第一件要做的工作是改變安裝目錄img/bin的訪問權限。輸入:
    $ chmod a+x /Users/yourname/SUNWappserver/imq/bin
    這里yourname是你的用戶名。(這假定服務器安裝在/Users/yourname。)
    6. 最后一步要求root訪問權限。服務器在/Library/Java/Home/jre/bin內查找java和javac,這個目錄還不存在。你必須創建這個目錄,創建這些程序的二進制代碼的符號連接。輸入:
    $ sudo mkdir -p /Library/Java/Home/jre/bin
    $ cd /Library/Java/Home/jre/bin
    $ sudo ln -s /Library/Java/Home/bin/java java
    $ sudo ln -s /Library/Java/Home/bin/javac javac
    sudo命令在第一次運行時會要求你輸入口令。如果你不是系統管理員,你必須以root身份登錄或su到root才能完成這些工作。
    7. 安裝到此已經完成。啟動應用服務器,輸入:
    $ cd /Users/yourname/SUNWappserver/bin
    $ asadmin start-domain

    JSTL(THE JAVA STANDARD TAG LIBRARY)
    過去幾年,我們一直自己編寫定制tag實現JSP頁面的顯示邏輯。已經建立了幾個流行的tag庫,用來執行迭代、處理XML、調用輔助函數和訪問Web層JavaBean。這些庫的功能有許多重疊,更主要的是它們互不兼容。
    為了解決這個不兼容問題,JCP就一個共用邏輯和現實tag集達成了一致。這些tag通常在創建Web應用的視圖時非常有用。這個新的tag集被稱之為JSTL(JavaServer Pages Standard Tag Library)。
    JSTL不是J2EE 1.4必需的部分,因此,不要求應用服務器供應商對它的支持。然而,Sun的J2EE 1.4 SDK還是包含了JSTL,其他的供應商也很可能支持它。JSTL并不都是新的---J2EE 1.3容器早就有了JSTL 1.0。JSTL 1.1對JSTL進行了升級,以便利用JSP 2.0和J2EE 1.4的新特點。
    這個技巧說明了如何使用幾個新的JSTL tag。為了使用這些tag,必須了解新的JSP表達式語言(JSP Expression Language,JSP EL)。
    JSP表達式語言
    JSTL的基本思想是,JSP頁面格式化的大多數數據都是JSP Page狀態的。這些狀態包括:
    l page、request、session或application范圍的對象。
    l Request參數
    l JSP隱含對象(例如,pageContext)
    l HTTP header、cookie、和request 參數
    l Servlet上下文初始化參數
    關于JSP頁面可以使用的數據的完整列表,請看J2EE 1.4教程(http://java.sun.com/j2ee/1.4/docs/tutorial/doc/JSPIntro7.html)。
    用戶定義的JavaBean(包括JavaBean和對企業Bean的引用)可以綁定到任何范圍的狀態變量。如果你在一個頁面上用代碼片斷創建了一個新的Bean,你只需使用<jsp:useBean>tag。否則,只能在EL表達式中用名稱訪問Bean。JSP 2.0表達式語言使用JavaBean的命名機制操縱所連接的Bean。這個語言也為JSP tag中所用的表達式定義了語法。JSP頁面編譯器把分隔符${和}之間的JSP語句看成表達式。
    解釋JSP表達式是如何工作的最容易的方法是用例子,下面我們就看一看這個技巧的示例代碼。
    示例代碼
    示例代碼是一個使用了兩個JavaBean的Web應用。JavaBean ColorScheme是一個映照,這個映照的鍵名是顏色名稱,鍵值是ColorBean對象。ColorBean有名稱(用這個名稱注冊到ColorScheme),red、green和blue顏色組件。ColorScheme繼承了javax.util.TreeMap。對ColorScheme迭代按名稱順序取得它的所有ColorBean對象。ColorBean繼承了java.awt.Color,因此,在JSP EL中可以使用它繼承的所有方法(包括JavaBean屬性)。
    應用的歡迎頁面,index.jsp,操作有幾百個ColorBean對象的ColorScheme對象。這些對象的數據來源于Web歸檔文件中的文本文件(rgb.txt)。文件中的數據有下面的格式:
    R G B Name
    240 248 255 AliceBlue
    index.jsp前面的一段代碼初始化ColorScheme Bean,以名稱“scheme”用session狀態存儲這個Bean,如下所示:
    <jsp:useBean id="scheme"
    class="com.elucify.tips.dec2003.ColorScheme"
    scope="session">

    <!-- Initialize this bean -->
    <%
    // Open a stream to the init file
    InputStream stream =
    application.getResourceAsStream("/rgb.txt");

    // Get a reference to the scheme bean
    ColorScheme colorScheme =
    (ColorScheme)pageContext.findAttribute(
    "scheme");

    // Load colors from stream
    try {
    colorScheme.load(stream);
    } catch (IOException iox) {
    throw new JspException(iox);
    }
    %>
    </jsp:useBean>

    (注意,如果使用tag文件代替代碼片斷,這個應用會更好。Tag文件是JSP 2.0的新特點,將在以后的使用技巧中介紹。)
    上面的代碼典型地使用了<jsp:useBean>tag初始化這個tag所創建的Bean。在index.jsp對scheme Bean初始化并把它放在session范圍內以后,其他JSP頁面就可以對這個scheme Bean的數據進行格式化。
    打印ColorScheme集大小的JSP代碼可能是下面這個樣子:
    <%
    ColorScheme scheme =
    (ColorScheme)session.getAttribute("scheme");
    out.println("The current color scheme has " +
    scheme.size() + " colors.");
    %>
    使用JSTL和JSP表達式語言,這個任務會更簡單,可讀性也更強。示例頁面Count.jsp就是這樣做的:
    <%@ taglib uri="http://java.sun.com/jsp/jstl/functions"
    prefix="fn" %>

    The current color scheme has ${fn:length(scheme)} colors.

    第一行為JSTL函數包中的tag定義了前綴fn(關于這個包的更多信息,請看教程)。第二行是包含了表達式${fn:length(scheme)}的模板文本。JSP頁面在運行時用scheme對象的長度代換這個表達式。因為scheme是一個映照,其長度返回的是其中條目的個數。Length函數對所有Collection類型都是可用的。
    更有趣的示例是示例頁面ListColorNames.jsp,它列出了ColorScheme bean中的所有顏色的名稱:
    <%@ taglib uri="http://java.sun.com/jsp/jstl/core"
    prefix="c" %>

    This is a list of the names of all of the colors
    in the current color scheme:

    <ol>
    <c:forEach var="entry" items="${scheme}">
    <li>${entry.key}</li>
    </c:forEach>
    </ol>
    行<%@taglib%>定義c為JSTL Core tag的前綴。這個頁面的其他部分定義了一個有序列表。使用<c:forEach>對scheme集中的所有條目迭代。所有Collection類都可用ForEach tag。接著把在var屬性中給出名稱的page變量賦給這個集中的每個值。
    當forEach tag的item屬性中的表達式的值是java.util.Map時,在var中命名的變量被設置為類型是java.util.Map.Entry的item。這時,迭代變量被稱為entry,因此,用表達式${entry.key}取得鍵名。
    在下面的例子中你會看到,可以用表達式${entry.value}得到每個entry的值。這是因為java.util.Map.Entry對象有getKey和getValue方法,表達式語言遵守JavaBean的命名約定。
    通常,JSP EL表達式${a.b.c.d}是用代碼a.getB().getC().getD()來計算的。這種表達式是對JavaBean屬性的相繼調用的簡化。
    示例頁面ShowColors.jsp顯示了scheme中包含的顏色,如下所示:

    This table demonstrates all of the colors
    in the current scheme.

    <TABLE BORDER="1" BGCOLOR="WHITE">
    <TR><TH>Name</TH><TH>Sample Text</TH><TH>Color Swatch</TH>
    <TH>Hex Code</TH><TH>Opposite Color</TH></TR>

    <!-- Loop over color entries in the scheme -->
    <c:forEach var="entry" items="${scheme}">

    <!-- Set two variables to improve -->
    <!-- readability of HTML below -->
    <c:set var="color"
    value="${entry.value.rgbHex}"/>
    <c:set var="name"
    value="${entry.key}"/>

    <TR>
    <TD>${name}</TD>
    <TD><FONT COLOR="${color}">${name}</FONT></TD>
    <TD BGCOLOR="${color}">${name}</FONT></TD>
    <TD>${color}</TD>
    <TD BGCOLOR="${entry.value.rgbComplement}">
    ${name}</TD>
    </TR>

    </c:forEach>

    如上所示,這個例子使用了<c:forEach>。兩個 <c:set> tag 把page屬性color和name分別設置到顏色和顏色名稱的hex表示。按照JavaBean命名約定,下面的行:
    <c:set var="color" value="${entry.value.rgbHex}"/>
    等效于Java代碼
    ColorBean cb = (ColorBean)entry.getValue();
    pageContext.setAttribute("color", cb.getRgbHex());
    模板文本中使用的color和name變量用來創建JSP頁面輸出中的table行。不用使用<c:get>tag,因為EL變量的值總是可以作為表達式引用,就象${color}這樣。
    最后一個示例頁面,ColorNameGrid.jsp,給出了JSTL tag更多的用法。它說明了如何使用JSTL tag進行下面的工作:
    l 訪問request參數
    l 用兩個不同的方法執行有條件輸出
    l 使用EL比較和運算
    l 使用EL算術函數
    ColorNameGrid.jsp以多列的table打印ColorScheme中所有顏色的名稱。列數在1到10之間,根據request參數cols確定。如果列數超出了范圍就產生錯誤信息。
    ColorNameGrid.jsp的代碼如下:
    <!-- Initialize local variables -->
    <c:set var="cols" value="${param['cols']}"/>
    "c:set var="col" value="0"/>

    <!-- use the "choose" element to limit -->
    <!-- number of columns -->
    <c:choose>
    <c:when test="${cols > 0 && cols <= 10}">

    This is a grid of the names of all of the
    colors in the current color scheme:
    <p>

    <TABLE BORDER="0" BGCOLOR="#404040">
    <TR>
    <c:forEach var="entry" items="${scheme}">
    <c:set var="color" value="${entry.value}"/>

    <TD><FONT COLOR="${color.rgbHex}">${entry.key}
    </FONT></TD>

    <c:set var="col" value="${col+1}"/>

    <c:if test="${(col % cols) == 0}">
    </TR><TR>
    </c:if>

    </c:forEach>
    </TR>

    </TABLE>
    </c:when>

    <c:otherwise>
    <!-- Complain about unreasonable input -->

    ${cols} is an unreasonable number of columns.
    <p>
    Click <a href="index.jsp">here</a> to try again.
    </c:otherwise>

    </c:choose>
    第一個<c:set>tag取得request參數cols,把它賦給page屬性(屬性名也是cols),如下所示:
    <c:set var="cols" value="${param['cols']}"/>
    (這個頁面也可以不用page屬性cols,在需要的地方使用${param['cols']}。定義page屬性是為了使該頁面的可讀性更強。)
    第二個<c:set>tag用值1對page屬性col初始化。這個變量用來分隔列。
    <c:choose>tag很象Java中的if-else語句。<c:when>tag就象if and else if語句,<c:otherwise>tag就象最后的else語句。<c:choose>tag包含了一系列的<c:when>tag,每一個<c:when>tag都有一個包含表達式的test屬性。第一個<c:when>tag體的test表達式返回true,這個tag體執行后包含在輸出中。如果沒有一個<c:when>的test表達式返回true,就執行<c:otherwise>tag體,將結果送到輸出。
    在這個例子中,第一個<c:when>tag的test表達式是邏輯表達式:
    <c:when test="${cols > 0 && cols <= 10}">
    這里所用的變量cols是在上面討論的第一個<c:set>tag中定義的page屬性。如果所要求的列數在1到10之間,這個頁面就會產生一個顏色的table。否則(在<c:otherwise> tag中),這個頁面就顯示一個提示:
    <c:otherwise>
    <!-- Complain about unreasonable input -->
    ${cols} is an unreasonable number of columns.<p>
    Click <a href="index.jsp">here</a> to try again.
    </c:otherwise>
    在第一個<c:when>tag體內的是建table的代碼。<c:forEach>tag對table內的所有color迭代,把page屬性color賦給ColorScheme中的每個ColorBean:
    <c:if test="${(col % cols) == 0}">
    </TR><TR>
    </c:if>
    每個顏色名用它所代表的顏色打印出來,用表達式(${color.rgbHex})從color Bean得到顏色的hex表示。變量col在循環的末尾加1,以便正確分行:
    <c:set var="col" value="${col+1}"/>
    最后,循環在一行結束時用算術表達式和<c:if>tag強迫分行。
    上面的例子僅僅使我們對JSTL tag能做些什么有個初步印象。JSTL tag可以用來處理URL、傳遞請求、包含其他Web資源的內容、處理XML、創建國際化內容、執行SQL查詢,還有很多。利用JSTL提供的強大的新工具可以使JSP的開發更容易。

    運行示例代碼
    下載以上兩個技巧的示例代碼的歸檔文件(http://java.sun.com/developer/EJTechTips/download/ttdec2003.war)。應用上下文的root是ttdec2003。下載的war文件還包含了這個示例應用的全部源代碼。
    你可以用deploytool程序或admin console在J2EE 1.4應用服務器上部署應用歸檔文件(ttdec2003.war)。你也可以用asadmin命令部署應用,如下所示:
    asadmin deploy install_dir/ttdec2003.war
    用war文件所在的目錄代替install_dir。
    可以用http:// ://localhost:8000/ttdec2003訪問應用。
    對于與J2EE 1.4兼容的其他應用服務器,用你所用的服務器部署工具把應用部署到你的平臺上。
    你應該在啟動應用時看到下面的頁面:


    posted on 2006-03-09 11:10 hopeshared 閱讀(1071) 評論(0)  編輯  收藏 所屬分類: Java
    主站蜘蛛池模板: 亚洲丝袜中文字幕| 亚洲第一精品福利| 久久国产乱子伦精品免费看| 五月婷婷亚洲综合| 羞羞漫画登录页面免费| 免费国产小视频在线观看| 男男gvh肉在线观看免费| 亚洲国产精品成人| 一区二区免费电影| 亚洲国产精品无码中文字| 久久久国产精品无码免费专区| 亚洲AV天天做在线观看| 亚洲免费在线播放| 亚洲五月综合网色九月色| 在线免费观看中文字幕| 国产大陆亚洲精品国产| 久久久久一级精品亚洲国产成人综合AV区| 亚洲国产免费综合| 亚洲视频中文字幕| 性色av免费观看| 曰批免费视频播放免费| 亚洲精品二区国产综合野狼| 精品一区二区三区免费毛片爱 | 亚洲精品夜夜夜妓女网| 国产一区二区免费| 亚洲人成小说网站色| 亚洲阿v天堂在线2017免费| 全免费a级毛片免费看| 亚洲精品456人成在线| 国产精品亚洲美女久久久| 久久久久国产免费| 亚洲av色香蕉一区二区三区| 亚洲宅男天堂在线观看无病毒| 亚洲国产熟亚洲女视频| 亚洲福利在线播放| 99久久精品免费精品国产| 亚洲精品国产av成拍色拍| 黑人大战亚洲人精品一区| 午夜宅男在线永久免费观看网| 污视频网站在线免费看| 亚洲美女视频一区|