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

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

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

    BlogJava 聯系 聚合 管理  

    Blog Stats

    隨筆檔案

    exams


    java世界

    世界Java

    #

    時常看到一些人說掌握了Java,但是讓他們用Java做一個實際的項目可能又困難重重,在這里,筆者根據自己的一點理解斗膽提出自己的一些對掌握Java這個說法的標準,當然對于新手,也可以提供一個需要學習哪些內容的參考。另外這個標準僅限于J2SE部分,J2EE部分的內容有時間再另說。
    1、語法:必須比較熟悉,在寫代碼的時候IDE的編輯器對某一行報錯應該能夠根據報錯信息知道是什么樣的語法錯誤并且知道任何修正。
    2、命令:必須熟悉JDK帶的一些常用命令及其常用選項,命令至少需要熟悉:appletviewer、HtmlConverter、jar、java、javac、javadoc、javap、javaw、native2ascii、serialver,如果這些命令你沒有全部使用過,那么你對java實際上還很不了解。
    3、工具:必須至少熟練使用一種IDE的開發工具,例如Eclipse、Netbeans、JBuilder、Jdeveloper、IDEA、JCreator或者Workshop,包括進行工程管理、常用選項的設置、插件的安裝配置以及進行調試。
    4、API:Java的核心API是非常龐大的,但是有一些內容筆者認為是必須熟悉的,否則不可能熟練的運用Java,包括:
        1)、java.lang包下的80%以上的類的功能的靈活運用。
        2)、java.util包下的80%以上的類的靈活運用,特別是集合類體系、規則表達式、zip、以及時間、隨機數、屬性、資源和Timer。
        3)、java.io包下的60%以上的類的使用,理解IO體系的基于管道模型的設計思路以及常用IO類的特性和使用場合。
        4)、java.math包下的100%的內容。
        5)、java.net包下的60%以上的內容,對各個類的功能比較熟悉。
        6)、java.text包下的60%以上的內容,特別是各種格式化類。
        7)、熟練運用JDBC。
        8)、java.security包下40%以上的內容,如果對于安全沒有接觸的話根本就不可能掌握java。
        9)、AWT的基本內容,包括各種組件事件、監聽器、布局管理器、常用組件、打印。
        10)、Swing的基本內容,和AWT的要求類似。
        11)、XML處理,熟悉SAX、DOM以及JDOM的優缺點并且能夠使用其中的一種完成XML的解析及內容處理。
    5、測試:必須熟悉使用junit編寫測試用例完成代碼的自動測試。
    6、管理:必須熟悉使用ant完成工程管理的常用任務,例如工程編譯、生成javadoc、生成jar、版本控制、自動測試( 1T6-530  ) 。
    7、排錯:應該可以根據異常信息比較快速的定位問題的原因和大致位置。
    8、思想:必須掌握OOP的主要要求,這樣使用Java開發的系統才能是真正的Java系統。
    9、規范:編寫的代碼必須符合流行的編碼規范,例如類名首字母大寫,成員和方法名首字母小寫,方法名的第一個單詞一般是動詞,包名全部小寫等,這樣程序的可讀性才比較好。
    posted @ 2007-10-09 10:22 java2java 閱讀(3102) | 評論 (10)編輯 收藏

    數據庫操作現在是項目開發的根本,學習Java首先應該學會怎么樣連接數據庫,用Java連接數據庫可不像用Delphi這類工具那樣設幾個屬性就OK,說簡單也簡單,說復雜,其實也挺復雜的,而且很麻煩,如果是初學,根本不能保證第一次就連接成功,下面以SQL Server 2000為例,說說Java連接數據庫的基本方法,也記錄一下心得。


    1、下載SQL Server 2000 driver for JDBC
           SQL Server 2000 Driver For JDBC Downloads
          
    該驅動截止目前有四個版本,建議下載最新的SP3版。

          
    該驅動安裝成功后,請將安裝目錄下的lib目錄下的三個.jar文件加到CLASSPATH中;如果你使用的是JBuilderEclipse,將這三個文件根據IDE的提示加到工程中也可。


    2、升級你的SQL Server 2000,為其打上最新的補丁。
          
    這一步可能不是必需的,因操作系統環境而定,在不打補丁的情況,有時可以正常連接,有時卻不能,所以建議還是安裝最新的SQL Server 2000補丁(SP4)和JDBC驅動(SP3)。
          
    如果你的程序在運行時提示:Error establishing socket,一般情況下,打上SQL Server 2000的補丁就可解決 190-534 1T6-530 。

    3、驅動的加載方法
         
    在建立連接之前,要先加載SQL Server 2000 JDBC的驅動,代碼形式如下:
          Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver");
         
    在此注意,forName方法的參數字符串必須完全相同于以上內容,大小寫是區分的,其實這個串就是驅動類的完整名稱:包名+類名。


    4、獲得一個連接
         
    在操作數據庫之前,要先獲得與數據庫的一個連接,使用如下代碼格式:
          DriverManager.getConnection(
    連接字符串, 登錄用戶名, 登錄密碼);
         
    例:

          DriverManager.getConnection("jdbc:microsoft:sqlserver://localhost:1433; DatabaseName=pubs", "sa", "");
         
    在此處關鍵的是連接字符串的內容,localhost部分即服務器的名字,可以更改;1433部分為SQL Server使用的端口號,根據實際情況修改即可;DatabaseName即為要連接的數據庫的名字,在此注意DatabaseName之前的是分號,而不是冒號。


    5、代碼實例


    // 導入Java SQL包,連接數據庫必需;
    import java.sql.*;


    public class TestDB {
       public static void main(String[] args) {
           String driverName = "com.microsoft.jdbc.sqlserver.SQLServerDriver";
           String dbURL = "jdbc:microsoft:sqlserver://localhost:1433; DatabaseName=pubs";
           String userName = "sa";
           String userPwd = "";
           Connection dbConn


           try {
               Class.forName(driverName);
               dbConn = DriverManager.getConnection(dbURL, userName, userPwd);
               System.out.println("Connection Successful!");
           }
           Catch (Exception e) {
               e.printStackTrace();
           }
       }
    }


    6、可能出現的問題
         
    如果以上的代碼運行后,輸出"Connection Successful!",那就代表一切正常,連接數據庫成功,你可以進行StatementResultSet的操作了;反之的話,一定是出現了相應的異常。
         
    如果提示錯誤"Error establishing socket",請根據之前的說明安裝相應的SQL Server 2000補丁即可。
         
    如果提示"ClassNotFoundException",那一定是 Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver"); 該段代碼拼寫有誤,或者是SQL Server 2000 Driver For JDBC Lib目錄下的三個.jar文件未加入到CLASSPATH中。

    posted @ 2007-10-07 11:23 java2java 閱讀(1358) | 評論 (1)編輯 收藏

         摘要:   閱讀全文
    posted @ 2007-09-29 11:32 java2java 閱讀(716) | 評論 (2)編輯 收藏

         摘要: 1.java數據庫操作基本流程
    a .數據庫連接1.Drivermanager 鏈接數據庫
    String className,url,uid,pwd;
    className="oracle.jdbc.driver.OracleDriver";
    uid="scott";
    pwd="tiger";
    url="jdbc:oracle:thin:@localhost:1521:ora92";
      閱讀全文
    posted @ 2007-09-27 11:02 java2java 閱讀(721) | 評論 (3)編輯 收藏

    request對象

        客戶端的請求信息被封裝在request對象中,通過它才能了解到客戶的需求,然后做出響應。它是HttpServletRequest類的實例。

    序號 方 法 說 明
    1  object getAttribute(String name) 返回指定屬性的屬性值
    2  Enumeration getAttributeNames() 返回所有可用屬性名的枚舉
    3  String getCharacterEncoding() 返回字符編碼方式
    4  int getContentLength() 返回請求體的長度(以字節數)
    5  String getContentType() 得到請求體的MIME類型
    6  ServletInputStream getInputStream() 得到請求體中一行的二進制流
    7  String getParameter(String name) 返回name指定參數的參數值
    8  Enumeration getParameterNames() 返回可用參數名的枚舉
    9  String[] getParameterValues(String name) 返回包含參數name的所有值的數組
    10  String getProtocol() 返回請求用的協議類型及版本號
    11  String getScheme() 返回請求用的計劃名,如:http.https及ftp等
    12  String getServerName() 返回接受請求的服務器主機名
    13  int getServerPort() 返回服務器接受此請求所用的端口號
    14  BufferedReader getReader() 返回解碼過了的請求體
    15  String getRemoteAddr() 返回發送此請求的客戶端IP地址
    16  String getRemoteHost() 返回發送此請求的客戶端主機名
    17  void setAttribute(String key,Object obj) 設置屬性的屬性值
    18  String getRealPath(String path) 返回一虛擬路徑的真實路徑
    19    
    20    
         

    <%@ page contentType="text/html;charset=gb2312"%>
    <%request.setCharacterEncoding("gb2312");%>
    <html>
    <head>
    <title>request a00-206 </title>
    </head>
    <body bgcolor="#FFFFF0">
    <form action="" method="post">
      <input type="text" name="qwe">
      <input type="submit" value="提交">
    </form>
    請求方式:<%=request.getMethod()%><br>
    請求的資源:<%=request.getRequestURI()%><br>
    請求用的協議:<%=request.getProtocol()%><br>
    請求的文件名:<%=request.getServletPath()%><br>
    請求的服務器的IP:<%=request.getServerName()%><br>
    請求服務器的端口:<%=request.getServerPort()%><br>
    客戶端IP地址:<%=request.getRemoteAddr()%><br>
    客戶端主機名:<%=request.getRemoteHost()%><br>
    表單提交來的值:<%=request.getParameter("qwe")%><br>
    </body>
    </html>
    <%@ page contentType="text/html;charset=gb2312"%>
    <%request.setCharacterEncoding("gb2312");%>
    <%@ page import="java.util.Enumeration"%>
    <html>
    <head>
      <title>request 250-10 </title>
    </head>
    <body bgcolor="#FFFFF0">
    <form action="" method="post">
       用戶名:<input type="text" name="username">&nbsp;&nbsp;
       密 碼:<input type="text" name="userpass">&nbsp;&nbsp;
       <input type="submit" value="進入" >
    </form>
    <%
    String str="";
    if(request.getParameter("username")!=null && request.getParameter("userpass")!=null){
       Enumeration enumt = request.getParameterNames();
       while(enumt.hasMoreElements()){
          str=enumt.nextElement().toString();
          out.println(str+":"+request.getParameter(str)+"<br>");
       }
    }
    %>
    </body>
    </html>
    <%@ page contentType="text/html;charset=gb2312"%>
    <%request.setCharacterEncoding("gb2312");%>
    <html>
    <head>
       <title> e20-090 </title>
    </head>
    <body bgcolor="#FFFFF0">
    <form action="" method="post">
      擅長:<input type="checkbox" name="cb" value="ON1">VC++&nbsp;
           <input type="checkbox" name="cb" value="ON2">JAVA&nbsp;
           <input type="checkbox" name="cb" value="ON3">DELPHI&nbsp;
           <input type="checkbox" name="cb" value="ON4">VB&nbsp;
           <br>
           <input type="submit" value="進入" name="qwe">
    </form>
    <%
    if(request.getParameter("qwe")!=null ){
       for(int i=0;i<request.getParameterValues("cb").length;i++){
          out.println("cb"+i+":"+request.getParameterValues("cb")[i]+"<br>");
       }
       out.println(request.getParameter("qwe"));
    }
    %>
    </body>
    </html>

    posted @ 2007-09-26 09:53 java2java 閱讀(2887) | 評論 (1)編輯 收藏

    內容簡介

    STEVEN GOULD在文中介紹了JAVA2平臺企業版(J2EE)的13種核心技術:JDBC, JNDI, EJBS, RMI, JSP, JAVA SERVLETS, XML, JMS, JAVA IDL, JTS, JTA, JAVAMAIL 和 JAF。為了聯系實際,GOULD基于WEBLOGIC應用服務器?來自BEA SYSTEMS公司的一種廣為應用的產品?環境來介紹J2EE的這些技術。

    JAVA最初是在瀏覽器和客戶端機器中粉墨登場的。當時,很多人質疑它是否適合做服務器端的開發。現在,隨著對JAVA2平臺企業版(J2EE)第三方支持的增多,JAVA被廣泛接納為開發企業級服務器端解決方案的首選平臺之一。

    J2EE平臺由一整套服務(SERVICES)、應用程序接口(APIS)和協議構成,它對開發基于WEB的多層應用提供了功能支持。

    在本文中我將解釋支撐J2EE的13種核心技術:JDBC, JNDI, EJBS, RMI, JSP, JAVA SERVLETS, XML, JMS, JAVA IDL, JTS, JTA, JAVAMAIL 和 JAF,同時還將描述在何時、何處需要使用這些技術。當然,我還要介紹這些不同的技術之間是如何交互的。

    此外,為了讓您更好地感受 J2EE的真實應用,我將在WEBLOGIC應用服務器?來自BEA SYSTEMS公司的一種廣為應用的產品?環境下來介紹這些技術。不論對于WEBLOGIC應用服務器和J2EE的新手,還是那些想了解J2EE能帶來什 么好處的項目管理者和系統分析員,相信本文一定很有參考價值。

    宏觀印象: 分布式結構和J2EE

    過去,二層化應 用 -- 通常被稱為CLIENT/SERVER應用 -- 是大家談論的最多的。圖1刻畫了典型的二層化結構。在很多情況下,服務器提供的唯一服務就是數據庫服務。在這種解決方案中,客戶端程序負責數據訪問、實現 業務邏輯、用合適的樣式顯示結果、彈出預設的用戶界面、接受用戶輸入等。CLIENT/SERVER結構通常在第一次部署的時候比較容易,但難于升級或改 進,而且經常基于某種專有的協議?通常是某種數據庫協議。它使得重用業務邏輯和界面邏輯非常困難。更重要的是,在WEB時代,二層化應用通常不能體現出很 好的伸縮性,因而很難適應INTERNET的要求。



    圖1. 二層化應用結構

    SUN設計J2EE的部分起因就是想解決二層化結構的缺陷。于是,J2EE定義了一套標準來簡化N層企業級應用的開發。它定義了一套標準化的組件,并為這些組件提供了完整的服務。J2EE還自動為應用程序處理了很多實現細節,如安全、多線程等。

    用J2EE開發N層應用包括將二層化結構中的不同層面切分成許多層。一個N層化應用A能夠為以下的每種服務提供一個分開的層:

    顯示:在一個典型的WEB應用中,客戶端機器上運行的瀏覽器負責實現用戶界面。

    動態生成顯示: 盡管瀏覽器可以完成某些動態內容顯示,但為了兼容不同的瀏覽器,這些動態生成工作應該放在WEB服務器端進行,使用JSP、SERVLETS,或者XML(可擴展標記語言)和(可擴展樣式表語言)。

    業務邏輯:業務邏輯適合用SESSION EJBS(后面將介紹)來實現。

    數據訪問:數據訪問適合用ENTITY EJBS(后面將介紹)和JDBC來實現。

    后臺系統集成: 同后臺系統的集成可能需要用到許多不同的技術,至于何種最佳需要根據后臺系統的特征而定。

    您可能開始詫異:為什么有這么多的層?事實上,多層方式可以使企業級應用具有很強的伸縮性,它允許每層專注于特定的角色。例如,讓WEB服務器負責提供頁面,應用服務器處理應用邏輯,而數據庫服務器提供數據庫服務。

    由于J2EE建立在JAVA2平臺標準版(J2SE)的基礎上,所以具備了J2SE的所有優點和功能。包括“編寫一次,到處可用”的可移植性、通過 JDBC訪問數據庫、同原有企業資源進行交互的CORBA技術,以及一個經過驗證的安全模型。在這些基礎上,J2EE又增加了對EJB(企業級JAVA組 件)、JAVA SERVLETS、JAVA服務器頁面(JSPS)和XML技術的支持。

    分布式結構與WEBLOGIC應用服務器

    J2EE提供了一個框架--一套標準API--用于開發分布式結構的應用,這個框架的實際實現留給了第三方廠商。部分廠商只是專注于整個J2EE架構中 的的特定組件,例如APACHE的TOMCAT提供了對JSP和SERVLETS的支持,BEA系統公司則通過其WEBLOGIC應用服務器產品為整個 J2EE規范提供了一個較為完整的實現。

    WEBLOGIC服務器已使建立和部署伸縮性較好的分布式應用的過程大為簡化。WEBLOGIC和J2EE代你處理了大量常規的編程任務,包括提供事務服務、安全領域、可靠的消息、名字和目錄服務、數據庫訪問和連接池、線程池、負載平衡和容錯處理等。

    通過以一種標準、易用的方式提供這些公共服務,象WEBLOGIC服務器這樣的產品造就了具有更好伸縮性和可維護性的應用系統,使其為大量的用戶提供了增長的可用性。

    J2EE技術

    在接下來的部分里,我們將描述構成J2EE的各種技術,并且了解WEBLOGIC服務器是如何在一個分布式應用中對它們進行支持的。最常用的J2EE技術應該是JDBC、JNDI、EJB、JSP和SERVLETS,對這些我們將作更仔細的考察。

    圖2表示了在一個分布式應用中,J2EE技術的各個方面通常在何處發揮作用。



    圖2. 一個N層應用結構的例子

    JAVA DATABASE CONNECTIVITY (JDBC)

    JDBC API以一種統一的方式來對各種各樣的數據庫進行存取。和ODBC一樣,JDBC為開發人員隱藏了不同數據庫的不同特性。另外,由于JDBC建立在JAVA的基礎上,因此還提供了數據庫存取的平臺獨立性。

    JDBC定義了4種不同的驅動程序,現分述如下:

    類型 1: JDBC-ODBC BRIDGE

    在JDBC出現的初期,JDBC-ODBC橋顯然是非常有實用意義的,通過JDBC-ODBC橋,開發人員可以使用JDBC來存取ODBC數據源。不足 的是,他需要在客戶端安裝ODBC驅動程序,換句話說,必須安裝MICROSOFT WINDOWS的某個版本。使用這一類型你需要犧牲JDBC的平臺獨立性。另外,ODBC驅動程序還需要具有客戶端的控制權限。

    類型 2: JDBC-NATIVE DRIVER BRIDGE

    JDBC本地驅動程序橋提供了一種JDBC接口,它建立在本地數據庫驅動程序的頂層,而不需要使用ODBC。 JDBC驅動程序將對數據庫的API從標準的JDBC調用轉換為本地調用。使用此類型需要犧牲JDBC的平臺獨立性,還要求在客戶端安裝一些本地代碼。

    類型 3: JDBC-NETWORK BRIDGE

    JDBC網絡橋驅動程序不再需要客戶端數據庫驅動程序。它使用網絡上的中間服務器來存取數據庫。這種應用使得以下技術的實現有了可能,這些技術包括負載 均衡、連接緩沖池和數據緩存等。由于第3種類型往往只需要相對更少的下載時間,具有平臺獨立性,而且不需要在客戶端安裝并取得控制權,所以很適合于 INTERNET上的應用 ee0-200 sy0-101  510-305 190-833

    類型 4: PURE JAVA DRIVER

    第4種類型通過使用一個純JAVA數據庫驅動程序來執行數據庫的直接訪問。此類型實際上在客戶端實現了2層結構。要在N-層結構中應用,一個更好的做法是編寫一個EJB,讓它包含存取代碼并提供一個對客戶端具有數據庫獨立性的服務。

    WEBLOGIC服務器為一些通常的數據庫提供了JDBC驅動程序,包括ORACLE, SYBASE, MICROSOFT SQL SERVER以及INFORMIX。它也帶有一種JDBC驅動程序用于CLOUDSCAPE,這是一種純JAVA的DBMS,WEBLOGIC服務器中帶 有該數據庫的評估版本。

    以下讓我們看一個實例。

    JDBC實例

    在這個例子中我們假定你已經在 CLOUDSCAPE中建立了一個PHONEBOOK數據庫,并且包含一個表,名為 CONTACT_TABLE ,它帶有2個字段:NAME 和 PHONE。 開始的時候先裝載CLOUDSCAPE JDBC DRIVER,并請求 DRIVER MANAGER得到一個對PHONEBOOK CLOUDSCAPE數據庫的連接。通過這一連接,我們可以構造一個 STATEMENT 對象并用它來執行一個簡單的SQL查詢。最后,用循環來遍歷結果集的所有數據,并用標準輸出將NAME和PHONE字段的內容進行輸出。

    IMPORT JAVA.SQL.*;

    PUBLIC CLASS JDBCEXAMPLE
    {
    PUBLIC STATIC VOID MAIN( STRING ARGS[] )
    {
    TRY
    {
    CLASS.FORNAME("COM.CLOUDSCAPE.CORE.JDBCDRIVER");
    CONNECTION CONN = DRIVERMANAGER.GETCONNECTION("JDBC:CLOUDSCAPE:PHONEBOOK");
    STATEMENT STMT = CONN.CREATESTATEMENT();
    STRING SQL = "SELECT NAME, PHONE FROM CONTACT_TABLE ORDER BY NAME";
    RESULTSET RESULTSET = STMT.EXECUTEQUERY( SQL );

    STRING NAME;
    STRING PHONE;
    WHILE ( RESULTSET.NEXT() )
    {
    NAME = RESULTSET.GETSTRING(1).TRIM();
    PHONE = RESULTSET.GETSTRING(2).TRIM();
    SYSTEM.OUT.PRINTLN( NAME + ", " + PHONE );
    }
    }
    CATCH ( EXCEPTION E )
    {
    // HANDLE EXCEPTION HERE
    E.PRINTSTACKTRACE();
    }
    }
    }


    OK。接著我們來看一看JDBC是如何在企業應用中的進行使用。

    JDBC在企業級應用中的應用

    以上實例其實是很基本的,可能有些微不足道。它假定了一個2層結構。在一個多層的企業級應用中,更大的可能是在客戶端和一個EJB進行通信,該EJB將 建立數據庫連接。為了實現和改進可伸縮性和系統性能, WEBLOGIC服務器提供了對連接緩沖池CONNECTION POOL的支持。

    CONNECTION POOL減少了建立和釋放數據庫連接的消耗。在系統啟動以后即可建立這樣的緩沖池,此后如故再有對數據庫的請求,WEBLOGIC服務器可以很簡單地從緩 沖池中取出數據。數據緩沖池可以在WEBLOGIC服務器的 WEBLOGIC.PROPERTIES 文件中進行定義。(可參考 WEBLOGIC.PROPERTIES 文件中的例子,WEBLOGIC服務器的文檔中還有更詳細的參考信息)

    在企業級應用的另一 個常見的數據庫特性是事務處理。事務是一組申明STATEMENT,它們必須做為同一個STATEMENT來處理以保證數據完整性。缺省情況下JDBC使 用 AUTO-COMMIT 事務模式。這可以通過使用CONNECTION類的 SETAUTOCOMMIT() 方法來實現。

    現在我們已經對JDBC有了一些認識,下面該轉向JNDI了。

    JAVA NAMING AND DIRECTORY INTERFACE (JNDI)

    JNDI API被用于執行名字和目錄服務。它提供了一致的模型來存取和操作企業級的資源如DNS和LDAP,本地文件系統,后者在應用服務器中的對象。

    在JNDI中,在目錄結構中的每一個結點稱為CONTEXT。每一個JNDI名字都是相對于CONTEXT的。這里沒有絕對名字的概念存在。對一個應用來說,它可以通過使用 INITIALCONTEXT 類來得到其第一個CONTEXT:

    CONTEXT CTX = NEW INITIALCONTEXT();

    應用可以通過這個初始化的CONTEXT經有這個目錄樹來定位它所需要的資源或對象。例如,假設你在WEBLOGIC服務器中展開了一個EJB并將 HOME接口綁定到名字 MYAPP.MYEJB ,那么該EJB的某個客戶在取得一個初始化CONTEXT以后,可以通過以下語句定位HOME接口:

    MYEJBHOME HOME = CTX.LOOKUP( "MYAPP.MYEJB" );

    在這個例子中,一旦你有了對被請求對象的參考,EJB的HOME接口就可以在它上面調用方法。我們將在下面的"ENTERPRISE JAVA BEANS"章節中做更多的介紹。

    以上關于JNDI的討論只是冰山之一角而已。如果要更進一步地在CONTEXT中查找對象,JNDI也提供了一些方法來進行以下操作: 

    將一個對象插入或綁定到CONTEXT。這在你展開一個EJB的時候是很有效的。

    從CONTEXT中移去對象。

    列出CONTEXT中的所有對象。

    創建或刪除子一級的CONTEXT。

    接下來,我們要開始關注EJB了。

    ENTERPRISE JAVA BEANS (EJB)

    J2EE技術之所以贏得某體廣泛重視的原因之一就是EJB。它們提供了一個框架來開發和實施分布式商務邏輯,由此很顯著地簡化了具有可伸縮性和高度復雜 的企業級應用的開發。EJB規范定義了EJB組件在何時如何與它們的容器進行交互作用。容器負責提供公用的服務,例如目錄服務、事務管理、安全性、資源緩 沖池以及容錯性。

    EJB規范定義了3中基本的BEAN類型:

    STATELESS SESSION BEANS: 提供某種單一的服務,不維持任何狀態,在服務器故障發生時無法繼續存在,生命期相對較短。例如,一個STATELESS SESSION BEAN可能被用于執行溫度轉換計算。

    STATEFUL SESSION BEAN: T提供了與客戶端的會話交互,可以存儲狀態從而代表一個客戶。典型例子是購物車。STATEFUL SESSION BEAN在服務器故障時無法繼續生存,生命氣相對較短。每一個實例只用于一個單個的線程。

    ENTITY BEANS: 提供了一致性數據的表示-- 通常存放在數據庫中 -- 在服務器故障發生后能繼續存在。多用戶情況下可以使用EJB來表示相同的數據。ENTITY EJB的一個典型例子是客戶的帳號信息。

    盡管有以上的區別,所有的EJB還是有許多的共同之處。它們都處理HOME INTERFACE。它定義了一個客戶端是如何創建與消亡EJB的。可以在BEAN中對定義了客戶端方法的遠程接口進行調用;BEAN類則執行了主要的商務邏輯。

    描述EJB的開發已經超出了本文的范圍。但是,如果一個EJB已經被開發了或者從第三方進行了購買,它就必須在應用服務器中進行發布。WEBLOGIC SERVER 5.1帶有一個EJB DEPLOYER TOOL來協助處理EJB的發布。當你使用EJB DEPLOYER TOOL的時候,你要定義客戶端所用的JNDI名字來定位EJB。DEPLOYER TOOL將生成WRAPPER類來處理和容器的通信以及在一個JAR文件中把被請求的JAVA類綁定在一起。

    一旦EJB被發布,客戶 端就可以使用它的JNDI名字來定位EJB。首先,它必須得到一個到HOME接口的REFERENCE。然后,客戶端可以使用該接口,調用一個 CREATE() 方法來得到服務器上運行的某個BEAN實例的句柄;最后,客戶端可以使用該句柄在BEAN中調用方法。

    了解 EJB后,讓我們再來看JSP。

    JAVASERVER PAGES (JSPS)

    我們中間可能已經有許多人已經熟悉MICROSOFT的ACTIVE SERVER PAGES (ASP)技術了。JSP和ASP相對應的,但更具有平臺對立性。他們被設計用以幫助WEB內容開發人員創建動態網頁,并且只需要相對較少的代碼。 即使WEB設計師不懂得如何編程也可以使用JSP,因為JSP應用是很方便的。 JSP頁面由HTML代碼和嵌入其中的JAVA代碼所組成。服務器在頁面被客戶端所請求以后對這些JAVA代碼進行處理,然后將生成的HTML頁面返回給 客戶端的瀏覽器。

    下面我們來看一個JSP的簡單實例。它只顯示了服務器的當前日期和時間。雖然,對語法的具體解釋已經超出了本文的范圍,但我們還是可以很直觀地看到,JAVA代碼被放在<%和%>的中間,而JAVA的表達式則放在<%=和%>之間。

    <html>
    <head>
    <title>Sample JSP Page</title>
    </head>
    <body>
    <h1>Date JSP sample</h1>

    <h2>
    <% response.setHeader("Refresh", 5); %>
    The current date is <%= new Date() %>.
    </h2>

    </body>
    </html>

    您可能有時候聽說過JHTML。這是JSP以前的一種較老的標準。WEBLOGIC服務器既可支持JSP,又可支持JHTML。請注意,在缺省狀況下, JSP在WEBLOGIC服務器中并沒有處于有效狀態。要使之有效,你可以編輯WEBLOGIC.PROPERTIES文件。如果WEB服務器還沒有處于 有效狀態,則要先使之有效。SERVLET的情況和JSP是一樣的。

    下面是: JAVA SERVLETS

    JAVA SERVLETS

    SERVLET提供的功能大多與JSP類似,不過實現的方式不同。JSP通常是大多數HTML代碼中嵌入少量的JAVA代碼,而SERVLETS全部由JAVA寫成并且生成HTML。

    SERVLET是一種小型的JAVA程序,它擴展了WEB服務器的功能。作為一種服務器端的應用,當被請求時開始執行,這和CGI PERL腳本很相似。SERVLETS和CGI腳本的一個很大的區別是:每一個CGI在開始的時候都要求開始一個新的進程 -- 而SERVLETS是在SERVLET引擎中以分離的線程來運行的。因此SERVLETS在可伸縮性上提供了很好的改進。

    在開發SERVLETS的時候,您常常需要擴展JAVAX.SERVLET.HTTP.HTTPSERVLET 類,并且OVERRIDE一些它的方法,其中包括:

    SERVICE(): 作為DISPATCHER來實現命令-定義方法

    DOGET(): 處理客戶端的HTTP GET請求。

    DOPOST(): 進行HTTP POST操作

    其它的方法還包括處理不同類型的HTTP請求 -- 可以參考HTTPSERVLET API文檔。

    以上描述的是標準J2EE SERVLET API的各種方法。WEBLOGIC服務器提供了一個該API完整的實現途徑。一旦你開發了一個SERVLET,你就可以在 WEBLOGIC.PROPERTIES 中加以注冊并由此可以在WEBLOGIC服務器中對它進行配置。

    通過JAVA SERVLETS,我們已經到達了J2EE主要技術的末尾了。但J2EE所提供的并不止于這些。下面的段落中我們將簡要地看一下現存的一些技術,包括RMI, JAVA IDL和CORBA, JTA, 以及XML,等等。

    REMOTE METHOD INVOCATION (RMI)

    正如其名字所表示的那樣,RMI協議是在遠程對象上調用一些方法。它使用了連續序列方式在客戶端和服務器端傳遞數據。RMI是一種被EJB使用的更下層的協議。

    JAVA IDL/CORBA

    在JAVA IDL的支持下,開發人員可以將JAVA和CORBA集成在一起。 他們可以創建JAVA對象并使之可在CORBA ORB中展開, 或者他們還可以創建JAVA類并作為和其它ORB一起展開的CORBA對象的客戶。后一種方法提供了另外一種途徑,通過它JAVA可以被用于將你的新的應 用和LEGACY系統相集成。

    JAVA TRANSACTION ARCHITECTURE (JTA)/JAVA TRANSACTION SERVICE (JTS)

    JTA定義了一種標準的API,應用系統由此可以存取各種事務監控。

    JTS是CORBA OTS事務監控的基本的實現。JTS規定了事務管理器的實現方式。該事務管理器是在高層支持JAVA TRANSACTION API (JTA)規范,并且在較底層實現OMG OTS SPECIFICATION的JAVA映像。JTS事務管理器為應用服務器、資源管理器、獨立的應用以及通信資源管理器提供了事務服務。

    JAVAMAIL AND JAVABEANS ACTIVATION FRAMEWORK

    JAVAMAIL是用于存取郵件服務器的API,它提供了一套郵件服務器的抽象類。不僅支持SMTP服務器,也支持IMAP服務器。

    JAVAMAIL利用JAVABEANS ACTIVATION FRAMEWORK (JAF)來處理MIME-編碼的郵件附件。MIME的字節流可以被轉換成JAVA對象,或者轉換自JAVA對象。由此大多數應用都可以不需要直接使用JAF。

    JAVA MESSAGING SERVICE (JMS)

    JMS是用于和面向消息的中間件相互通信的應用程序接口(API)。它既支持點對點的域,有支持發布/訂閱(PUBLISH/SUBSCRIBE)類型 的域,并且提供對下列類型的支持:經認可的消息傳遞,事務型消息的傳遞,一致性消息和具有持久性的訂閱者支持。JMS還提供了另一種方式來對您的應用與 LEGACY BACKEND系統相集成。

    EXTENSIBLE MARKUP LANGUAGE (XML)

    XML是一種可以用來定義其它標記語言的語言。它被用來在不同的商務過程中共享數據。XML的發展和JAVA是相互獨立的,但是,它和JAVA具有的相同 目標正是平臺獨立性。通過將JAVA和XML的組合,您可以得到一個完美的具有平臺獨立性的解決方案。目前正有許多不同的公司在為JAVA和XML的組合 而努力。如果要了解更多的這方面的信息,可以訪問SUN的JAVA-XML頁面,或者IBM DEVELOPERWORKS的XML ZONE。

    總結

    在本文中,我們介紹了建立在J2EE上的分布式應用結構,并且描述了WEBLOGIC服務器對J2EE的各種支持。 然而,我們所揭示的僅僅是冰山之一角而已,要以一篇數千字的文章來展示J2EE潛在的對您的企業級應用的影響可是很不公平的。

    我們已經關注了在您開始用J2EE進行工作時最有可能遇到的各類技術:JDBC, JNDI, EJB, JSP和SERVLET。我們也為您提供了一些尚未常見的J2EE技術的背景知識。不管您是一名開發人員,商務應用分析師,或者項目經理,都應該對 J2EE和WEBLOGIC服務器所能提供給我們,給我們的企業以及我們的企業級應用所帶來的意義有一個更好的認識
    posted @ 2007-09-24 11:49 java2java 閱讀(2761) | 評論 (1)編輯 收藏

         摘要: import java.io.*;

    //多線程編程
    public class MultiThread
    {
    public static void main(String args[])
    {
    System.out.println("我是主線程!");
    //下面創建線程實例thread1
    ThreadUseExtends thread1=new ThreadUseExtends();
    //創建thread2時以實現了Runnable接口的THhreadUseRunnable類實例為參數
    Thread thread2=new Thread(new ThreadUseRunnable(),"SecondThread");
    thread1.start();//啟動線程thread1使之處于就緒狀態
    //thread1.setPriority(6);//設置thread1的優先級為6
      閱讀全文
    posted @ 2007-09-19 11:13 java2java 閱讀(56408) | 評論 (15)編輯 收藏

         摘要: 測試環境:JDK1.5、Tomcat5.5
      1.設置Cookie

      1Cookie cookie = new Cookie("key", "value");

      2cookie.setMaxAge(60); //設置60秒生存期,如果設置為負值的話,則為瀏覽器進程Cookie(內存中保存),關閉瀏覽器就失效。

      3cookie.setPath("/test/test2"); //設置Cookie路徑,不設置的話為當前路徑(對于Servlet來說為request.getContextPath() + web.xml里配置的該Servlet的url-pattern路徑部分)

      4response.addCookie(cookie);
      閱讀全文
    posted @ 2007-09-18 10:16 java2java 閱讀(725) | 評論 (2)編輯 收藏

         摘要: 單例模式
    屬于創建型模式
    一個類只能有一個實例,并且自行實例化,必須自行向其他對象提供這個實例
    關鍵代碼實現:
    public class DataCenter   閱讀全文
    posted @ 2007-09-17 15:42 java2java 閱讀(2435) | 評論 (1)編輯 收藏

    軟件模塊之間總是存在著一定的接口,從調用方式上,可以把他們分為三類:同步調用、回調和異步調用。同步調用是一種阻塞式調用,調用

    方要等待對方執行完畢才返回,它是一種單向調用;回調是一種雙向調用模式,也就是說,被調用方在接口被調用時也會調用對方的接口;異

    步調用是一種類似消息或事件的機制,不過它的調用方向剛好相反,接口的服務在收到某種訊息或發生某種事件時,會主動通知客戶方(即調

    用客戶方的接口)。回調和異步調用的關系非常緊密,通常我們使用回調來實現異步消息的注冊,通過異步調用來實現消息的通知。同步調用

    是三者當中最簡單的,而回調又常常是異步調用的基礎,因此,下面我們著重討論回調機制在不同軟件架構中的實現。


    今天學習時碰到的問題,特總結出來。
    Example:    Class Teacher and Student are subclass of class Person.
        Person p;
        Teacher t;
        Student s;
        p, t and s are all non-null.
        if(t instanceof Person) {  s = (Student)t; }
    What is the result of this sentence?
    A. It will construct a Student object.
    B. The expression is legal.
    C. It is illegal at compilation.
    D. It is legal at compilation but possible illegal at runtime.
    1z0-147   642-964
    instanceof操作符的作用是判斷一個變量是否是右操作數指出的類的一個對象,由于java語言的多態性使得可以用一個子類的實例賦值給一個
    父類的變量,而在一些情況下需要判斷變量到底是一個什么類型的對象,這時就可以使用instanceof 了。當左操作數是右操作數指出的類的實
    例或者是子類的實例時都返回真,如果是將一個子類的實例賦值給一個父類的變量,用instanceof判斷該變量是否是子類的一個實例時也將返
    回真。此題中的if語句的判斷沒有問題,而且將返回真,但是后面的類型轉換是非法的,因為t是一個Teacher對象,它不能被強制轉換為一個
    Student對象,即使這兩個類有共同的父類。如果是將t轉換為一個Person對象則可以,而且不需要強制轉換。這個錯誤在編譯時就可以發現,
    因此編譯不能通過。
    posted @ 2007-09-12 16:15 java2java 閱讀(1609) | 評論 (3)編輯 收藏

    僅列出標題
    共5頁: 上一頁 1 2 3 4 5 下一頁 
    主站蜘蛛池模板: 国产又黄又爽又猛免费app| 91成人在线免费视频| 免费特级黄毛片在线成人观看| 两个人看的www免费视频| 免费人成视频在线观看不卡| 午夜亚洲WWW湿好爽| 免费国产高清视频| 免费看又黄又爽又猛的视频软件| 免费一级特黄特色大片在线 | 久久久久亚洲精品天堂| 一级毛片免费观看不卡的| 亚洲综合无码一区二区| 5555在线播放免费播放| 亚洲ts人妖网站| 免费被黄网站在观看| 牛牛在线精品免费视频观看| 色久悠悠婷婷综合在线亚洲| 久久国产精品萌白酱免费| 亚洲黄色在线视频| 猫咪社区免费资源在线观看 | 一级免费黄色毛片| 久久久久无码精品亚洲日韩 | 亚洲一区二区三区免费在线观看| 亚洲av一本岛在线播放| 午夜无遮挡羞羞漫画免费| 污视频网站在线观看免费| 亚洲AV无码国产在丝袜线观看| **真实毛片免费观看| 国产亚洲综合一区二区三区| 亚洲s色大片在线观看| 青春禁区视频在线观看直播免费| 看全免费的一级毛片| 久久99国产亚洲精品观看| 成人免费在线观看网站| 一级毛片**免费看试看20分钟 | 亚洲一区免费视频| 日韩在线视频线视频免费网站| 亚洲最大的成网4438| 日本一线a视频免费观看| 美女视频黄a视频全免费网站色窝| 亚洲va在线va天堂va手机|