posts - 7, comments - 2, trackbacks - 0, articles - 6
            BlogJava :: 首頁(yè) :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理

          2007年9月24日


           什么是 Java 技術(shù)?  
          Java 技術(shù)(版本 2)是一種面向?qū)ο蟮木幊陶Z(yǔ)言,是 Sun Microsystems 所開(kāi)發(fā)的編程平臺(tái)。Java 技術(shù)基于單一 Java 虛擬機(jī)(JVM)的概念,JVM 是編程語(yǔ)言與機(jī)器底層軟件和硬件之間的翻譯器。編程語(yǔ)言的所有實(shí)現(xiàn)都必須模擬 JVM,從而使 Java 程序可以在具有 JVM 版本的任何系統(tǒng)上運(yùn)行。

          Java 編程語(yǔ)言是與眾不同的,因?yàn)?nbsp;Java 程序需要經(jīng)過(guò)編譯(翻譯為叫做 Java 字節(jié)碼的中間語(yǔ)言)和解釋?zhuān)ㄍㄟ^(guò) JVM 分析和運(yùn)行字節(jié)碼)。編譯只進(jìn)行一次,而解釋則在每次運(yùn)行程序時(shí)都要進(jìn)行。編譯的字節(jié)碼是 JVM 的最佳機(jī)器碼形式;解釋程序是 JVM 的實(shí)現(xiàn)。

          Java 平臺(tái)具有三個(gè)版本(請(qǐng)參閱下面的 Java 平臺(tái)的多個(gè)版本),該平臺(tái)由 JVM 和 Java Application Programming Interface (API) 組成,Java API 是現(xiàn)成軟件組件的集合,便于進(jìn)行 applet 和應(yīng)用程序的開(kāi)發(fā)和部署,其中包括健壯的、安全的和可互操作的企業(yè)應(yīng)用程序。Java API 被分組到相關(guān)類(lèi)和接口的庫(kù)中;這些庫(kù)稱(chēng)為包。

          了解更多信息:

          要了解 Sun 的 Java 編程語(yǔ)言的未來(lái)發(fā)展方向,請(qǐng)閱讀 2003 JavaOne Developer Conference 的 technical keynote digest。 
          Java 平臺(tái)的多個(gè)版本
          因?yàn)?nbsp;Java 技術(shù)的迅速普及,開(kāi)發(fā)人員強(qiáng)烈要求某些東西更簡(jiǎn)單些。Sun Microsystems 通過(guò)創(chuàng)建三個(gè) Java 平臺(tái)版本來(lái)滿足此需要 ― Standard Edition、Enterprise Edition 和 Micro Edition。

          了解更多信息:

          J2SE (Java 2 Standard Edition)。包括標(biāo)準(zhǔn)的 Java 2 SDK、工具、運(yùn)行時(shí)環(huán)境和 API,用于那些采用 Java 程序設(shè)計(jì)語(yǔ)言編寫(xiě)、部署和運(yùn)行 applet 和應(yīng)用程序的開(kāi)發(fā)人員。 Merlin 的魔力 專(zhuān)欄極好地介紹了最新版本的 J2SE 1.4。


          J2EE (Java 2 Enterprise Edition)。通過(guò)基于標(biāo)準(zhǔn)化模塊組件,通過(guò)為這些組件提供一整套服務(wù),以及通過(guò)自動(dòng)處理應(yīng)用程序行為的許多細(xì)節(jié),而無(wú)需進(jìn)行復(fù)雜編程,企業(yè)版簡(jiǎn)化了多層企業(yè)應(yīng)用程序的構(gòu)造和部署。J2EE 探索者 專(zhuān)欄將增加您對(duì)此版本的了解。


          J2ME (Java 2 Micro Edition)。該版本是高度優(yōu)化的 Java 運(yùn)行時(shí)環(huán)境,針對(duì)特定的消費(fèi)者領(lǐng)域,從智能型手機(jī)或?qū)ず魴C(jī)到機(jī)頂盒等一系列小型設(shè)備(外形小或者存儲(chǔ)能力受限)。在“ J2ME 101,第 1 部分:介紹 MIDP 的高層 UI”教程中可以了解更多關(guān)于 J2ME 的信息。(您還可以在 developerWorks 無(wú)線 專(zhuān)題找到許多 J2ME 參考資料。) 
           
           
           到頁(yè)首  
           
           
            Java 技術(shù)為什么重要?  
          總體來(lái)說(shuō),Java 語(yǔ)言的主要優(yōu)點(diǎn)在于跨平臺(tái)和操作系統(tǒng)的可移植性,以及它可以通過(guò)帶寬相對(duì)較窄的通道提供(比如撥號(hào)連接)。Java 語(yǔ)言還具有可伸縮性;現(xiàn)有應(yīng)用程序可以很容易地適應(yīng)那些受內(nèi)存資源限制的設(shè)備。另外,由于 Java 語(yǔ)言設(shè)計(jì)用于通過(guò)網(wǎng)絡(luò)以安全的方式運(yùn)行,所以當(dāng)通過(guò) Internet 操作時(shí),它也提供了此級(jí)別的安全性。本質(zhì)上,Java 技術(shù)將用戶(hù)計(jì)算能力從桌面擴(kuò)展到了 Web 資源。
           
           
           到頁(yè)首  
           
           
            什么是 Java 組件技術(shù)?  
          管理 Java 技術(shù)縮略詞的字母湯(alphabet soup)可能是一項(xiàng)巨大的任務(wù),就正如通過(guò) Java Community Process 管理 Java 語(yǔ)言的發(fā)展一樣。下面是 Java 語(yǔ)言各版本的組件、可選包和擴(kuò)展包的部分列表(也就是組成這個(gè)平臺(tái)的復(fù)雜部件),并給出了簡(jiǎn)短描述和參考資料鏈接,用以說(shuō)明它在 Java 開(kāi)發(fā)領(lǐng)域中的作用。注意下面許多參考資料都可以在各版本中使用。

          J2SE 中的技術(shù):

          Java Access Bridge 用于 Microsoft Windows,它起到了網(wǎng)橋的作用,允許基于 Windows 的輔助技術(shù)與 Java Accessibility API 進(jìn)行交互(請(qǐng)參閱“為可訪問(wèn)性編碼”。)


          JavaBeans Component Architecture 是平臺(tái)獨(dú)立的規(guī)范,它為 Java 平臺(tái)定義了一套標(biāo)準(zhǔn)組件軟件 API。(請(qǐng)參閱“Reflecting, introspecting, and customizing JavaBeans”。)


          Javadoc 是一種工具,用于從源代碼的 doc 注釋中生成 HTML 格式的 API 文檔。(請(qǐng)參閱“Java 理論和實(shí)踐:我必須對(duì)那些內(nèi)容進(jìn)行文檔編制嗎?”。)


          Java Foundation Classes (Swing) (JFC) 是 Java 類(lèi)庫(kù)的集合,它支持為基于 Java 的客戶(hù)機(jī)應(yīng)用程序構(gòu)建 GUI 和圖形功能。(請(qǐng)參閱“Java 2 用戶(hù)界面”。)


          Java Platform Debugger Architecture (JPDA) 是 Java 2 的調(diào)試支持基礎(chǔ)設(shè)施。JPDA 包括三層 API: 
          JDI (Java Debug Interface)是一種支持遠(yuǎn)程調(diào)試的高級(jí)別編程語(yǔ)言接口。 
          JDWP (Java Debug Wire Protocol) 定義在調(diào)試過(guò)程和調(diào)試器前端之間傳輸?shù)男畔⒑驼?qǐng)求的格式。 
          JVMDI (Java Virtual Machine Debug Interface) 是低級(jí)別本地接口,定義了調(diào)試時(shí) JVM 必須提供的服務(wù)。 
          (請(qǐng)參閱“ 軟件開(kāi)發(fā)的未來(lái) ”。)

          Java 2D API 是用于高級(jí) 2D 圖形和成像(為圖像合成和 alpha 通道圖像提供廣泛支持)的類(lèi)集合,是提供正確的色彩空間定義和轉(zhuǎn)換的類(lèi)集合,是面向顯示的成像操作符的集合。(請(qǐng)參閱教程“Java 2D簡(jiǎn)介”。)


          Java Web Start 使您可以通過(guò)單擊而無(wú)需經(jīng)歷安裝過(guò)程來(lái)下載和啟動(dòng)功能完善的應(yīng)用程序(如電子表格),從而簡(jiǎn)化 Java 應(yīng)用程序的部署。(請(qǐng)參閱“Java Web Start”。)


          Java Database Connectivity (JDBC) 是一種 API,使您可以從 Java 內(nèi)訪問(wèn)大多數(shù)表格式數(shù)據(jù)源,它提供了大多數(shù) SQL 數(shù)據(jù)庫(kù)的跨 DBMS 連通性,以及對(duì)其他表格式數(shù)據(jù)源的訪問(wèn)(如電子表格或平面文件)。(請(qǐng)參閱“JDBC 3.0 有什么新特性”。)


          Remote Method Invocation (RMI) 提供引導(dǎo)命名服務(wù),不會(huì)改變類(lèi)型,并使用對(duì)象序列化使編程人員能夠創(chuàng)建基于 Java 技術(shù)的分布式應(yīng)用程序,在該應(yīng)用程序中,可以從不同主機(jī)上的其他 Java 虛擬機(jī)上調(diào)用遠(yuǎn)程 Java 對(duì)象的方法。(請(qǐng)參閱教程“分布式對(duì)象 101-使用RMI和CORBA ”。)


          Java Advanced Imaging (JAI) 是一種 API,提供了面向?qū)ο蟮慕涌诘募希@些接口支持簡(jiǎn)單的高級(jí)編程模型,使得開(kāi)發(fā)人員可以很容易地操縱圖像。(請(qǐng)參閱“利用 JSP 代碼管理您的圖像”。)


          Java Authentication and Authorization Service (JAAS) 是一個(gè)包,它啟用服務(wù),通過(guò)實(shí)現(xiàn)標(biāo)準(zhǔn) Pluggable Authentication Module (PAM) 框架的 Java 版本,通過(guò)支持基于用戶(hù)的授權(quán),對(duì)用戶(hù)進(jìn)行驗(yàn)證和執(zhí)行訪問(wèn)控制。(請(qǐng)參閱教程“Java 安全性 第二部分 認(rèn)證與授權(quán)”;“擴(kuò)展 JAAS 實(shí)現(xiàn)類(lèi)實(shí)例級(jí)授權(quán)”也是很好的信息來(lái)源。)


          Java Cryptography Extension (JCE) 是一個(gè)包集合,提供了加密、密鑰生成和協(xié)議以及 Message Authentication Code (MAC) 算法的框架和實(shí)現(xiàn)。它提供了對(duì)稱(chēng)、非對(duì)稱(chēng)、分組和流密碼的加密支持,并支持安全流和密封對(duì)象。(請(qǐng)參閱教程“Java 安全性第一部分 密碼學(xué)基礎(chǔ)”。)


          Java Data Objects (JDO) 是持久性的基于標(biāo)準(zhǔn)接口的 Java 模型抽象,它允許編程人員直接將 Java 域模型實(shí)例存儲(chǔ)到持久存儲(chǔ)(數(shù)據(jù)庫(kù))中,可能替代直接文件輸入輸出、序列化、JDBC 和 EJB Bean Managed Persistence (BMP) 或 Container Managed Persistence (CMP) Entity Bean 等方法。(請(qǐng)參閱教程“Java 數(shù)據(jù)對(duì)象上機(jī)實(shí)踐”。)


          Java Management Extensions (JMX) 提供的工具用于構(gòu)建分布式、基于 Web 的、模塊化和動(dòng)態(tài)應(yīng)用程序,以便管理和監(jiān)視設(shè)備、應(yīng)用程序和服務(wù)驅(qū)動(dòng)的網(wǎng)絡(luò)。(請(qǐng)參閱由三部分組成的“從黑箱到企業(yè),第 1 部分:管理,JMX 1.1 樣式”。)


          Java Media Framework (JMF) 允許音頻、視頻和其他基于時(shí)間的媒體添加到 Java 應(yīng)用程序和 applet 中。(請(qǐng)參閱教程“Java Media Framework 基礎(chǔ)”。)


          Java Naming and Directory Interface (JNDI) 是一種標(biāo)準(zhǔn)擴(kuò)展包,為企業(yè)中的多個(gè)命名和目錄服務(wù)提供具有統(tǒng)一接口的 Java 應(yīng)用程序,允許不同種類(lèi)的企業(yè)命名和目錄服務(wù)的無(wú)縫連通性。(請(qǐng)參閱“EJB 最佳實(shí)踐:工業(yè)強(qiáng)度的 JNDI 優(yōu)化”。)


          Java Secure Socket Extensions (JSSE) 是啟用安全 Internet 通信的包集合,實(shí)現(xiàn) SSL (Secure Sockets Layer) 和 TLS (Transport Layer Security) 協(xié)議的 Java 版本,并包括數(shù)據(jù)加密、服務(wù)器驗(yàn)證、消息完整性和可選客戶(hù)機(jī)驗(yàn)證的功能。(請(qǐng)參閱教程“將 JSSE 用于安全套接字通信”。)


          Java Speech API (JSAPI) 允許 Java 應(yīng)用程序?qū)⒄Z(yǔ)音技術(shù)合并到用戶(hù)接口中。JSAPI 定義了跨平臺(tái)的 API,以支持命令和控制識(shí)別程序、聽(tīng)寫(xiě)系統(tǒng)和語(yǔ)音合成器。(請(qǐng)參閱“The Java 2 user interface”部分。)


          Java 3D 是一種 API,通過(guò)提供支持簡(jiǎn)單高級(jí)編程模型的一組面向?qū)ο蟮慕涌冢_(kāi)發(fā)人員可以使用它容易地將可伸縮的平臺(tái)獨(dú)立的 3D 圖形合并到 Java 應(yīng)用程序中。(請(qǐng)參閱教程“Java 3D 探奇 ”。) 
          J2EE 中的技術(shù):

          Java API for XML Processing (JAXP) 通過(guò)使應(yīng)用程序解析和轉(zhuǎn)換不依賴(lài)特定 XML 處理實(shí)現(xiàn)的 XML 文檔,通過(guò)使開(kāi)發(fā)人員可以靈活地在 XML 處理器程序之間進(jìn)行交換,而無(wú)需更改應(yīng)用程序代碼,從而支持使用 DOM、SAX 和 XSLT 處理 XML 文檔。(請(qǐng)參閱“使用 Java 編程利用在線 XML 數(shù)據(jù)”。)


          Java API for XML Registries (JAXR) 為訪問(wèn)不同種類(lèi)的 XML 注冊(cè)中心提供了統(tǒng)一和標(biāo)準(zhǔn)的 API (用于構(gòu)建、部署和發(fā)現(xiàn) Web 服務(wù)的可用基礎(chǔ)設(shè)施)。(請(qǐng)參閱 Java 技術(shù)標(biāo)準(zhǔn)。)


          Java API for XML-based RPC (JAX-RPC) 使開(kāi)發(fā)人員可以開(kāi)發(fā)基于 SOAP 的可互操作的和可移植的 Web 服務(wù)。(請(qǐng)參閱 Java 技術(shù)標(biāo)準(zhǔn)。)


          SOAP with Attachments API for Java (SAAJ) 使開(kāi)發(fā)人員可以生產(chǎn)和消費(fèi)符合 SOAP 1.1 規(guī)范和 SOAP with Attachments 注解的消息。(從“使用SAAJ發(fā)送和接收SOAP消息”開(kāi)始;有關(guān) XML 技術(shù)的詳細(xì)信息,請(qǐng)參閱 developerWorks XML 專(zhuān)區(qū)。)


          Common Object Request Broker Architecture (CORBA) 是異構(gòu)計(jì)算的開(kāi)放標(biāo)準(zhǔn),通過(guò)提供分布式對(duì)象框架、支持該框架的服務(wù)以及與其他語(yǔ)言的互操作性,該標(biāo)準(zhǔn)對(duì) Java 進(jìn)行了補(bǔ)充。(請(qǐng)參閱教程“使用RMI和CORBA ”;“企業(yè)中的 RMI-IIOP”也是很好的信息來(lái)源)。


          ECperf 是用于度量 Web 商務(wù)系統(tǒng)的性能和可伸縮性的基準(zhǔn)。它包括:組成應(yīng)用程序的 EJB 組件;使用 JSP 進(jìn)行單一用戶(hù)/交互測(cè)試的 Web 客戶(hù)機(jī);模式腳本和加載程序;makefile 和部署描述符;用于實(shí)現(xiàn)運(yùn)行規(guī)則和模擬客戶(hù)機(jī)加載的驅(qū)動(dòng)程序。(請(qǐng)參閱 Java 技術(shù)標(biāo)準(zhǔn)。)


          Enterprise JavaBeans (EJB) 是一種技術(shù),通過(guò)提供對(duì)事務(wù)、安全性、數(shù)據(jù)庫(kù)連通性等服務(wù)的支持,它使用組件模型來(lái)簡(jiǎn)化中間件應(yīng)用程序的部署。(請(qǐng)參閱介紹該技術(shù)的教程“Enterprise JavaBean 基礎(chǔ)”;另請(qǐng)參閱系列文章 EJB 最佳實(shí)踐。)


          Java Authorization Contract for Containers (Java ACC) 是一種規(guī)范,它定義了容器使用的授權(quán)提供者的安裝和配置。Java ACC 定義了提供者必須使用的接口,從而允許容器部署工具創(chuàng)建和管理與角色相對(duì)應(yīng)的權(quán)限集合。(請(qǐng)參閱教程“Developing accessible GUIs with Swing”。)


          JavaMail 是一種 API,它提供了模擬郵件系統(tǒng)的抽象類(lèi)的集合。(請(qǐng)參閱教程“ JavaMail API 基礎(chǔ)”。)


          Java Message Service (JMS) 是一種用來(lái)添加提供者框架的 API。通過(guò)定義所有兼容 JMS 技術(shù)的消息系統(tǒng)所支持的消息概念和編程策略的公共集合,該框架為 Java 平臺(tái)啟用了可移植的、基于消息的應(yīng)用程序的部署。(請(qǐng)參閱“實(shí)現(xiàn)獨(dú)立于供應(yīng)商的 JMS 解決方案”。)


          JavaServer Faces 提供了一種編程模型,通過(guò)匯集頁(yè)面中可重用的 UI 組件,將這些組件連接到應(yīng)用程序數(shù)據(jù)源以及將客戶(hù)機(jī)生成的事件寫(xiě)入服務(wù)器端事件處理程序,該模型有助于開(kāi)發(fā)人員開(kāi)發(fā) Web 應(yīng)用程序。(請(qǐng)參閱“JSP pages, evolving and contributing to Web services”。)


          JavaServer Pages (JSP) 使 Web 開(kāi)發(fā)人員可以使用單獨(dú)的用戶(hù)界面和內(nèi)容生成功能,快速地進(jìn)行開(kāi)發(fā)和輕松地維護(hù)動(dòng)態(tài)的、平臺(tái)獨(dú)立的 Web 頁(yè)面,這樣設(shè)計(jì)人員就可以更改頁(yè)面布局,而無(wú)需改變動(dòng)態(tài)內(nèi)容。該技術(shù)使用類(lèi)似于 XML 的標(biāo)簽,這些標(biāo)簽封裝了用于生成頁(yè)面內(nèi)容的邏輯。(請(qǐng)參閱教程“JSP 技術(shù)入門(mén) ”;另請(qǐng)參閱系列文章 JSP 最佳實(shí)踐。)


          Java Servlets 是一種擴(kuò)展和增強(qiáng) Web 服務(wù)器功能的 Java 方式。要做到這一點(diǎn),應(yīng)該為構(gòu)建基于 Web 的應(yīng)用程序提供基于組件的平臺(tái)獨(dú)立的方法,而不會(huì)出現(xiàn) CGI 程序的性能限制。(developerWorks 中有許多關(guān)于 servlet 的信息。“創(chuàng)建 Java HTTP Servlet”和“構(gòu)建帶會(huì)話跟蹤的 Servlet”這兩篇入門(mén)教程應(yīng)該是最好的起點(diǎn)。)


          J2EE Connector Architecture 定義了一種標(biāo)準(zhǔn)體系結(jié)構(gòu),通過(guò)定義一組可伸縮的、安全的事務(wù)性機(jī)制,允許 EIS 供應(yīng)商提供插入到應(yīng)用服務(wù)器中的標(biāo)準(zhǔn)資源適配器,該體系結(jié)構(gòu)用于將 J2EE 平臺(tái)連接到異構(gòu)企業(yè)信息系統(tǒng)(Enterprise Information Systems, EIS)。(請(qǐng)參閱教程“J2EE Connector Architecture 介紹”。)


          J2EE Management Specification (JMX) 定義了 J2EE 平臺(tái)的管理信息模型。該模型設(shè)計(jì)用于與許多管理系統(tǒng)和協(xié)議互操作,包括到 Common Information Model (CIM)、SNMP Management Information Base (MIB)的模型的標(biāo)準(zhǔn)映射,以及通過(guò)服務(wù)器駐留 EJB 組件(J2EE Management EJB Component,MEJB)到 Java 對(duì)象模型的模型的標(biāo)準(zhǔn)映射。(請(qǐng)參閱“從黑箱到企業(yè),第 1 部分:管理,JMX 1.1 樣式”。)


          Java Transaction API (JTA) 是高級(jí)的獨(dú)立于實(shí)現(xiàn)和協(xié)議的 API,它允許應(yīng)用程序和應(yīng)用程序服務(wù)器訪問(wèn)事務(wù)。Java Transaction Service (JTS) 指定 Transaction Manager 的實(shí)現(xiàn), Transaction Manager 支持 JTA,并在低于 API 的級(jí)別上實(shí)現(xiàn) OMG Object Transaction Service (OTS) 1.1 規(guī)范的 Java 映射。JTS 使用 Internet Inter-ORB Protocol (IIOP) 傳輸事務(wù)。(請(qǐng)參閱“理解 JTS ― 平衡安全性和性能 ”。) 
          J2ME 中的技術(shù):

          Connected Limited Device Configuration (CLDC) 是組成資源受限移動(dòng)信息設(shè)備的 Java 運(yùn)行時(shí)環(huán)境的兩個(gè)配置之一。CLDC 提供了最基本的庫(kù)集合和虛擬機(jī)功能,在包含 K 虛擬機(jī)(KVM)的 J2ME 環(huán)境的每個(gè)實(shí)現(xiàn)中,這些都是必須存在的。(請(qǐng)參閱“Know no limits: Approaches to mobile device constraints”)


          Mobile Information Device Profile (MIDP) 是組成資源受限移動(dòng)信息設(shè)備的 Java 運(yùn)行環(huán)境的兩個(gè)配置之一。MIDP 提供核心應(yīng)用程序功能,包括用戶(hù)界面、網(wǎng)絡(luò)連通性、本地?cái)?shù)據(jù)存儲(chǔ)和應(yīng)用程序生命周期管理。(請(qǐng)參閱教程“Implementing Push technology with J2ME and MIDP”。)


          Connected Device Configuration (CDC) 是一種基于標(biāo)準(zhǔn)的框架,用于構(gòu)建和提供可在許多網(wǎng)絡(luò)連接消費(fèi)者和嵌入式設(shè)備之間共享的應(yīng)用程序。(請(qǐng)參閱“Securing wireless J2ME”。)


          developerWorks Wireless technology 專(zhuān)區(qū)包含了 J2ME 相關(guān)技術(shù)的多篇文章和教程。 
          Java 網(wǎng)絡(luò)技術(shù):

          JAIN APIs 是一組基于 Java 的 API,用于快速開(kāi)發(fā)下一代電信產(chǎn)品和服務(wù)。(請(qǐng)參閱 Java 技術(shù)標(biāo)準(zhǔn)。) 



          Java Metadata Interface (JMI) 是實(shí)現(xiàn)動(dòng)態(tài)的、平臺(tái)獨(dú)立的基礎(chǔ)設(shè)施的規(guī)范,它允許進(jìn)行元數(shù)據(jù)的創(chuàng)建、存儲(chǔ)、訪問(wèn)、發(fā)現(xiàn)和交換。該規(guī)范基于 Object Management Group (OMG) 的 Meta Object Facility (MOF) 規(guī)范,由一組使用統(tǒng)一建模語(yǔ)言(Unified Modeling Language,UML)描述的基本建模工件組成。(請(qǐng)參閱 Java 技術(shù)標(biāo)準(zhǔn)。)


          JavaGroups 是一個(gè)軟件工具包(API 庫(kù)),用于使用分布式系統(tǒng)解決方案進(jìn)行設(shè)計(jì)、實(shí)現(xiàn)和實(shí)驗(yàn)。(請(qǐng)參閱“High-impact Web tier clustering, Part 1”和 Part 2。)


          Jini 是一種開(kāi)放體系結(jié)構(gòu),用于為硬件和軟件創(chuàng)建高適應(yīng)性的以網(wǎng)絡(luò)為中心的服務(wù)。Jini 系統(tǒng)體系結(jié)構(gòu)由三個(gè)類(lèi)別組成:編程模型、基礎(chǔ)設(shè)施和服務(wù)。(請(qǐng)參閱“Jini networking technology, the next step”。)


          JXTA 是一組開(kāi)放協(xié)議,允許網(wǎng)絡(luò)上所有連接設(shè)備以 P2P 方式通信和協(xié)作。JXTA 對(duì)等方創(chuàng)建虛擬網(wǎng)絡(luò),任何對(duì)等方都可以在其中與其他對(duì)等方或資源進(jìn)行直接交互,甚至當(dāng)一些對(duì)等方和資源位于防火墻或 NAT 后或者位于不同的網(wǎng)絡(luò)傳輸中也是如此。(請(qǐng)參閱“Making P2P interoperable: The JXTA story”。) 
           
           
           到頁(yè)首  
           
           
           Java 技術(shù)如何與 Web 服務(wù)聯(lián)系起來(lái)?  
          Web 服務(wù)是一種技術(shù),允許用 XML 定義業(yè)務(wù)規(guī)則和過(guò)程,這樣軟件應(yīng)用程序能夠以平臺(tái)獨(dú)立和編程語(yǔ)言無(wú)關(guān)的方式進(jìn)行通信。XML 技術(shù)使數(shù)據(jù)可以移植,方便了消息創(chuàng)建,而 Java 技術(shù)則使代碼可以移植。事實(shí)上,XML 和 Java 語(yǔ)言可以很好地結(jié)合起來(lái),成為構(gòu)建和部署 Web 服務(wù)的完美組合。

          了解更多信息:

          developerWorks 的“Web services 新手入門(mén)”和“XML 新手入門(mén)”頁(yè)面將幫助您了解這些復(fù)雜的技術(shù)。 
           
           

           
           
           如何提高 Java 編程技能?  
          有兩種途徑可以提高您的技能:選學(xué)一門(mén)課程(為獲得證書(shū)或僅為了學(xué)習(xí))或者自學(xué)(當(dāng)然要通過(guò)編寫(xiě)代碼來(lái)練習(xí))。除了汲取有經(jīng)驗(yàn)的開(kāi)發(fā)人員的知識(shí)外,獲取證書(shū)途徑還可以向未來(lái)的雇主提供確實(shí)的證據(jù),證明您擁有構(gòu)建他們要求的技術(shù)所需的技能。通過(guò)試驗(yàn)自己的技能,使用可用資源,您可以在 Java 技術(shù)的不同領(lǐng)域提高您的技能。下列參考資料對(duì)以上兩種途徑都應(yīng)該有幫助。 

          了解更多信息:

          要獲得 Java 語(yǔ)言的全面介紹,Java 語(yǔ)言基礎(chǔ) 教程是個(gè)很好的起點(diǎn)。


          如果基本教程看起來(lái)有些復(fù)雜,您可以嘗試 Robocode。Robocode 是基于 Java 技術(shù)構(gòu)建的易于使用的機(jī)器人戰(zhàn)爭(zhēng)模擬程序,它在提供純粹娛樂(lè)的同時(shí)教您如何編程。要獲得 Robocode 的介紹,請(qǐng)閱讀“重錘痛擊 Robocode!”


          如果您是 C/C++ 編程人員,不熟悉 Java,“Java programming for C/C++ developers”教程通過(guò)比較和對(duì)照 Java 編程概念和 C/C++ 編程概念,可以幫助您快速入門(mén) Java。


          本文是循序漸進(jìn)的 幫助您準(zhǔn)備 SCJP 考試指南,即 Sun Certified Java Programmer 證書(shū)考試。


          IBM 在 WebSphere 開(kāi)發(fā)(用于企業(yè) Java 應(yīng)用程序)、DB2、XML、電子商務(wù)和 Linux 這些相關(guān)技術(shù)方面提供了 專(zhuān)業(yè)認(rèn)證。


          如果您沒(méi)有聽(tīng)說(shuō)過(guò) XP 精華 或 XP,它是一種應(yīng)用程序設(shè)計(jì)理念,它合并了連續(xù)階段測(cè)試、在編碼前編寫(xiě)測(cè)試、現(xiàn)場(chǎng)客戶(hù)輸入、重構(gòu)(在不更改功能的情況下改進(jìn)代碼)等,本文可提供用于編寫(xiě) Java 應(yīng)用程序的極好工具。(揭開(kāi)極端編程的神秘面紗:“XP 精華”重訪,第 2 部分 中詳細(xì)描述了如何進(jìn)行實(shí)踐。)


          將設(shè)計(jì)理論轉(zhuǎn)換為實(shí)際應(yīng)用程序是 Java 理論與實(shí)踐 系列文章的出發(fā)點(diǎn)。


          Java 編程人員知道利用集成 bug 檢測(cè)和測(cè)試進(jìn)行程序設(shè)計(jì),所以利用 Java 調(diào)試 提高您的調(diào)試技能。而且,developerWorks 提供了關(guān)于 Java 調(diào)試(重點(diǎn)是稱(chēng)為 bug 模式的工具)的專(zhuān)欄集,稱(chēng)為 診斷 Java 代碼。


          developerWorks 提供了大量 基于 Java 的教程,這是下一代自己編寫(xiě)代碼的最佳學(xué)習(xí)體驗(yàn)。


          要獲得更多學(xué)習(xí)如何使用 Java 語(yǔ)言的交互式方法,請(qǐng)參加 Java 討論區(qū),該論壇由具有多年 Java 相關(guān)技術(shù)開(kāi)發(fā)經(jīng)驗(yàn)的著名專(zhuān)家主持。 
           
           
            
           
           
            Java 編程人員可以使用哪些 IBM 工具和產(chǎn)品?  
          作為在 Java 技術(shù)使用方面的一流創(chuàng)新者,IBM 站在了最前線。瀏覽 Java technology downloads and products 頁(yè)面可以獲得工具和產(chǎn)品的完整列表。以下提供了一些重要部分。

          了解更多信息:

          軟件開(kāi)發(fā)工具箱:構(gòu)造應(yīng)用程序的工具箱,用于各種 Java 相關(guān)技術(shù)的大量工具。下面只是其中的幾個(gè): 
          IBM developer kits for Java technology,用于在一些最普通的 IBM 平臺(tái)上創(chuàng)建和測(cè)試 Java applet 和應(yīng)用程序。 
          Agent Building and Learning Environment,用于開(kāi)發(fā)混合智能軟件代理和代理應(yīng)用程序。 
          Emerging Technologies Toolkit 在網(wǎng)格計(jì)算、異步 Web 服務(wù)、業(yè)務(wù)流程、自主計(jì)算和其他服務(wù)中為 Web 服務(wù)開(kāi)發(fā)提供高級(jí)工具。 
          Toolkit for MPEG-4,Java 類(lèi)和帶有簡(jiǎn)單應(yīng)用程序的 API 的集合,用于生成 MPEG-4 內(nèi)容,以便與兼容 MPEG-4 的設(shè)備一起使用。 
          Update Tool,一種使基于 Java 桌面應(yīng)用程序的用戶(hù)可以易于升級(jí)的機(jī)制。


          Java technology on alphaWorks 是 IBM 生成的 Java 相關(guān)技術(shù)的虛擬倉(cāng)庫(kù),包括 API、集成開(kāi)發(fā)環(huán)境和 devkit、組件、參考實(shí)現(xiàn)和實(shí)用程序。


          WebSphere 系列的 Java 開(kāi)發(fā)工具: 
          Application Server。 
          Branch Transformation Toolkit for WebSphere Studio,以前稱(chēng)為 WebSphere Business Components Composer,是一組工具、組件和服務(wù),它們用于加速構(gòu)建訪問(wèn)事務(wù)系統(tǒng)的多通道銀行應(yīng)用程序。 
          MQ 是允許應(yīng)用程序相互通信的應(yīng)用程序編程服務(wù)。 
          MQ Everyplace 允許利用確定的消息提供方式訪問(wèn)移動(dòng)工作者和遠(yuǎn)程設(shè)備的企業(yè)數(shù)據(jù)。 
          Business Integration Message Broker 幫助將信息引向需要它的位置和時(shí)間,以及幫助訪問(wèn)公司數(shù)據(jù),而不管數(shù)據(jù)位于何處,采用何種格式。 
          SDK for Web Services。 
          Studio Site Developer 為構(gòu)建和維護(hù)動(dòng)態(tài) Web 站點(diǎn)、Web 服務(wù)和 Java 應(yīng)用程序提供開(kāi)發(fā)環(huán)境。 
          Studio Application Developer 是基于 Web 的應(yīng)用程序的集成開(kāi)發(fā)環(huán)境。 

          posted @ 2007-11-03 22:01 卓韋 閱讀(620) | 評(píng)論 (0)編輯 收藏

          需要下載fileupload和beanutils兩個(gè)包,代碼如下。

          實(shí)現(xiàn)文件的上傳,代碼如下:
          <%!
           //服務(wù)器端保存上傳文件的路徑
              String saveDirectory = "g:\\upload\\";
              // 臨時(shí)路徑 一旦文件大小超過(guò)getSizeThreshold()的值時(shí)數(shù)據(jù)存放在硬盤(pán)的目錄
              String tmpDirectory = "g:\\upload\\tmp\\";
              // 最多只允許在內(nèi)存中存儲(chǔ)的數(shù)據(jù)大小,單位:字節(jié)
              int maxPostSize = 1024 * 1024;
          %>
          <%
              // 文件內(nèi)容 
              String FileDescription = null;
              // 文件名(包括路徑)
              String FileName = null;
              // 文件大小
              long FileSize = 0;
              // 文件類(lèi)型
              String ContentType = null;

          %>

          <%
             DiskFileUpload fu = new DiskFileUpload();
              // 設(shè)置允許用戶(hù)上傳文件大小,單位:字節(jié)
             fu.setSizeMax(200*1024*1024);
              // 設(shè)置最多只允許在內(nèi)存中存儲(chǔ)的數(shù)據(jù),單位:字節(jié)
             fu.setSizeThreshold(maxPostSize);
              // 設(shè)置一旦文件大小超過(guò)getSizeThreshold()的值時(shí)數(shù)據(jù)存放在硬盤(pán)的目錄
             fu.setRepositoryPath("g:\\upload\\tmp\\");
              //開(kāi)始讀取上傳信息 得到所有文件
             try{
                List fileItems = fu.parseRequest(request);
               }catch(FileUploadException e){
                   //這里異常產(chǎn)生的原因可能是用戶(hù)上傳文件超過(guò)限制、不明類(lèi)型的文件等
                   //自己處理的代碼
               }
          %>
          <%
             // 依次處理每個(gè)上傳的文件
             Iterator iter = fileItems.iterator();
             while (iter.hasNext()) {
               FileItem item = (FileItem) iter.next();
                 //忽略其他不是文件域的所有表單信息
               if (!item.isFormField()) {
                 String name = item.getName();
                 long size = item.getSize();
                 String  contentType = item.getContentType();
               if((name==null||name.equals("")) && size==0)
                 continue;
          %>
          <%
             //保存上傳的文件到指定的目錄
            String[] names=StringUtils.split(name,"\\");  //對(duì)原來(lái)帶路徑的文件名進(jìn)行分割
             name = names[names.length-1];
             item.write(new File(saveDirectory+ name));
            }
          }
          %>
           下面是其簡(jiǎn)單的使用場(chǎng)景:
           A、上傳項(xiàng)目只要足夠小,就應(yīng)該保留在內(nèi)存里。
           B、較大的項(xiàng)目應(yīng)該被寫(xiě)在硬盤(pán)的臨時(shí)文件上。
           C、非常大的上傳請(qǐng)求應(yīng)該避免。
           D、限制項(xiàng)目在內(nèi)存中所占的空間,限制最大的上傳請(qǐng)求,并且設(shè)定臨時(shí)文件的位置。
           
           可以根據(jù)具體使用用servlet來(lái)重寫(xiě),具體參數(shù)配置可以統(tǒng)一放置到一配置文件
           

           文件的下載用servlet實(shí)現(xiàn)
                public void doGet(HttpServletRequest request,
                                 HttpServletResponse response)
               {
                   String aFilePath = null;    //要下載的文件路徑
                   String aFileName = null;    //要下載的文件名
                   FileInputStream in = null;  //輸入流
                   ServletOutputStream out = null;  //輸出流

           

                   try
             {
                    
                       aFilePath = getFilePath(request);
                       aFileName = getFileName(request);

                       response.setContentType(getContentType(aFileName) + "; charset=UTF-8");
                       response.setHeader("Content-disposition", "attachment; filename=" + aFileName);

                       in = new  FileInputStream(aFilePath + aFileName); //讀入文件
                      out = response.getOutputStream();
                      out.flush();
                      int aRead = 0;
                     while((aRead = in.read()) != -1 & in != null)
                  {
                       out.write(aRead);
                   }
                     out.flush();
                }
                 catch(Throwable e)
               {
               log.error("FileDownload doGet() IO error!",e);
                }
                   finally
                   {
                       try
                       {
                           in.close();
                           out.close();
                       }
                       catch(Throwable e)
                       {
                        log.error("FileDownload doGet() IO close error!",e);
                       }
                   }
               }



          參考文獻(xiàn):
          1、用fileupload處理文件上傳
          作者:◇ 劉冬 發(fā)文時(shí)間:2003.07.09 15:52:43 ,http://tech.ccidnet.com/pub/disp/Article?columnID=322&articleID=53966&pageNO=1
          講得非常清楚
          2、Jakarta Commons:巧用類(lèi)和組件1 (2) 作者:Vikram Goyal 仙人掌工作室譯 ,http://www.uml.org.cn/j2ee/j2eeh2.htm

          3、Jsp如何實(shí)現(xiàn)網(wǎng)頁(yè)的重定向 ,2002-05-16· ·包路躍··Yesky,http://www.yesky.com/SoftChannel/72342371945283584/20020424/1608521.shtml

          4、判斷文件或文件夾是否存在,作者:羅會(huì)濤,http://www.fawcette.com/china/XmlFile.aspx?ID=205

          5、java.util中的Date類(lèi),By Wing, 出處:處處,http://www.linuxaid.com.cn/articles/1/1/119413536.shtml

          6、計(jì)算Java日期--學(xué)習(xí)怎樣創(chuàng)建和使用日期,作者:Robert Nielsen ,http://www.javaresearch.org/article/showarticle.jsp?column=1&thread=497

          7、http://dev.csdn.net/article/67/67940.shtm

          posted @ 2007-09-25 13:26 卓韋 閱讀(5513) | 評(píng)論 (1)編輯 收藏

          Jakarta Commons FileUpload 用戶(hù)指南

          本文是分享文檔站長(zhǎng)胡蘿卜的作品。大家可以自由閱讀、在網(wǎng)絡(luò)上進(jìn)行分發(fā),前提是必須保留本文檔的完整性。
          分享文檔是一家專(zhuān)業(yè)的Java技術(shù)網(wǎng)站,給中國(guó)Java 程序員提供各種Java資源如文檔,工具,教程,社區(qū)交流等。
          我們的官方網(wǎng)站是:http://chinesedocument.com
          我們的官方論壇是:http://bbs.chinesedocument.com
          請(qǐng)大家多多關(guān)注分享文檔,我們還會(huì)發(fā)布更多優(yōu)秀的文檔!

          第1章 使用FileUpload
          FileUpload能以多種方式使用,這取決于你的應(yīng)用需求。舉個(gè)簡(jiǎn)單的例子,你可能調(diào)用一個(gè)單獨(dú)的方法來(lái)解析servelt的請(qǐng)求,并且處理那些項(xiàng)目。 從另一個(gè)方面來(lái)講,你可能想自定義FileUpload來(lái)完全控制個(gè)別項(xiàng)目的存貯;例如,你想流化那些內(nèi)容,并存到數(shù)據(jù)庫(kù)里去。
          這里我們會(huì)介紹使用FileUpload的基礎(chǔ)原則,并描述一些簡(jiǎn)單的通用的使用模式。我們會(huì)在在其它地方介紹關(guān)于FileUpload的自定義。
          FileUpload依賴(lài)于一些公用的IO,因此,要確保在你繼續(xù)之前,你的classpath里已經(jīng)有依賴(lài)頁(yè)面里提起的那些版本。


          第2章 FileUpload如何工作?
          一個(gè)上傳請(qǐng)求由一系列根據(jù)RFC1867("Form-based File Upload in HTML".)編碼的項(xiàng)目列表組成。FileUpload可以解析這樣的請(qǐng)求,并為你的應(yīng)用提供那些已上傳的項(xiàng)目的列表。每一個(gè)這樣的項(xiàng)目都實(shí)現(xiàn)了FielItem接口,我們不用管它們的底層實(shí)現(xiàn)。
          這個(gè)頁(yè)面描述了commons fileupload庫(kù)的常用API。這些常用API是非常方便的途徑。然而,為了最好的性能,你可能更喜歡最快的Streaming API 。
          每一個(gè)文件項(xiàng)目有一些自己的屬性,這些屬性也許正是你的應(yīng)用程序感興趣的地方。例如,每個(gè)項(xiàng)目有個(gè)一個(gè)名字和內(nèi)容類(lèi)型,并且可以提供一個(gè)輸入流來(lái)訪問(wèn)它們的數(shù)據(jù)。另一方面來(lái)看,你可能需要用不同方式來(lái)處理不同的項(xiàng)目,這就依賴(lài)于那些項(xiàng)目是否是一個(gè)正常的表單字域,也就是說(shuō),這些數(shù)據(jù)來(lái)自于一個(gè)普通的文本框或類(lèi)似HTML的字域,還是一個(gè)要上傳文件字段。FileItem接口提供一些方法來(lái)做這樣一個(gè)決定,并且用最合適的方法訪問(wèn)這些數(shù)據(jù)。
          FileUpload使用FileItemFactory創(chuàng)建一個(gè)新的文件項(xiàng)目。這將會(huì)給FileUpload最好的靈活性。工廠最終控制每個(gè)項(xiàng)目如何被創(chuàng)建。默認(rèn)的工廠在內(nèi)存或者硬盤(pán)里存儲(chǔ)項(xiàng)目的數(shù)據(jù),這依賴(lài)于項(xiàng)目的大小(例如,有多少字節(jié)的數(shù)據(jù)。)。不過(guò),為了適用于你的應(yīng)用,你還是可以自定義這種行為的。


          第3章 servlets and portlets
          從V1.1版開(kāi)始,F(xiàn)ileUpload就開(kāi)始支持servlet和portlet的文件上傳請(qǐng)求。這兩種環(huán)境的用法基本上差不多,因此,文檔的剩下部分都將是在servlet環(huán)境里。
          如果你正在構(gòu)建一個(gè)portet應(yīng)用,那么下面兩個(gè)差別是你在讀文檔時(shí)應(yīng)注意的:
          你在哪里引用了ServletFileUpload類(lèi),就用PortletFileUpload類(lèi)來(lái)替代它。
          你在哪里引用了HttpServletRequest類(lèi),就用ActionRequest類(lèi)替代它。


          第4章 解析請(qǐng)求
          在你同那些上傳的項(xiàng)目一起工作前,你需要先解析請(qǐng)求本身。以確保這個(gè)請(qǐng)求確實(shí)是一個(gè)文件上傳請(qǐng)求。FileUpload是通過(guò)調(diào)用一個(gè)靜態(tài)方法來(lái)實(shí)現(xiàn)的。
          // Check that we have a file upload request
          boolean isMultipart = ServletFileUpload.isMultipartContent(request);
          現(xiàn)在,我們已經(jīng)準(zhǔn)備好解析請(qǐng)求里的項(xiàng)目了。

          4.1 最簡(jiǎn)單的例子
          下面是一些簡(jiǎn)單的使用場(chǎng)景:
          ??   上傳項(xiàng)目只要足夠小,就應(yīng)該保留在內(nèi)存里。
          ??   較大的項(xiàng)目應(yīng)該被寫(xiě)在硬盤(pán)的臨時(shí)文件上。
          ??   非常大的上傳請(qǐng)求應(yīng)該避免。
          ??   限制項(xiàng)目在內(nèi)存中所占的空間,限制最大的上傳請(qǐng)求,并且設(shè)定臨時(shí)文件的位置。
          處理這個(gè)場(chǎng)景的請(qǐng)求很簡(jiǎn)單:
          // Create a factory for disk-based file items
          FileItemFactory factory = new DiskFileItemFactory();
          // Create a new file upload handler
          ServletFileUpload upload = new ServletFileUpload(factory);
          // Parse the request
          List /* FileItem */ items = upload.parseRequest(request);
          這就是我們所需要的全部代碼了!
          解析的結(jié)果就是一個(gè)項(xiàng)目的List,每個(gè)項(xiàng)目都實(shí)現(xiàn)了FileItem接口。我們將在下面討論如何處理這些項(xiàng)目。
          4.2 訓(xùn)練如何控制
          如果你的使用場(chǎng)景和上面那個(gè)簡(jiǎn)單的例子很接近,但是你又需要一點(diǎn)點(diǎn)控制,那么你可以很容易地定義upload處理器或者文件項(xiàng)目工廠的行為。下面這個(gè)例子顯示了幾個(gè)配置選項(xiàng)。
          // Create a factory for disk-based file items
          DiskFileItemFactory factory = new DiskFileItemFactory();
          // Set factory constraints
          factory.setSizeThreshold(yourMaxMemorySize);
          factory.setRepository(yourTempDirectory);
          // Create a new file upload handler
          ServletFileUpload upload = new ServletFileUpload(factory);
          // Set overall request size constraint
          upload.setSizeMax(yourMaxRequestSize);
          // Parse the request
          List /* FileItem */ items = upload.parseRequest(request);
          當(dāng)然,每個(gè)配置方法是獨(dú)立于其它任意一個(gè)的。但是如果你想一次性配置他們,你可以用parseRequest()的另一個(gè)重載方法,像這樣:
          // Create a factory for disk-based file items
          DiskFileItemFactory factory = new DiskFileItemFactory(
          yourMaxMemorySize, yourTempDirectory);
          如果你還想使用更多的控制,比如存儲(chǔ)項(xiàng)目到其它地方(如,數(shù)據(jù)庫(kù)),那么你可以看FileUpload自定義介紹。


          第5章 處理上傳的項(xiàng)目
          一旦解析完成,那么你會(huì)得到一個(gè)待處理的文件項(xiàng)目列表。很多的情況下,你會(huì)想用不同的方式來(lái)處理文件上傳域和正常的表單域,因此,你可以這樣做:
          // Process the uploaded items
          Iterator iter = items.iterator();
          while (iter.hasNext()) {
            FileItem item = (FileItem) iter.next();
            if (item.isFormField()) {
              processFormField(item);
            } else {
              processUploadedFile(item);
            }
          }
          對(duì)于普通的表單域來(lái)說(shuō),你可能對(duì)項(xiàng)目的名稱(chēng)和字符型值 很感興趣。就像你希望的那樣,照下面的做:
          // Process a regular form field
          if (item.isFormField()) {
            String name = item.getFieldName();
            String value = item.getString();
            ...
          }
          對(duì)于上傳文件,這里就有很多不同啦~你可能想知道更多其它的內(nèi)容。下面是個(gè)例子,里面包含了不少你感興趣的方法。
          // Process a file upload
          if (!item.isFormField()) {
            String fieldName = item.getFieldName();
            String fileName = item.getName();
            String contentType = item.getContentType();
            boolean isInMemory = item.isInMemory();
            long sizeInBytes = item.getSize();
            ...
          }
          對(duì)于上傳的文件,你肯定不希望總是通過(guò)內(nèi)存來(lái)訪問(wèn)它,除非它很小,或者你實(shí)在沒(méi)有別的選擇余地了。你很希望使用流來(lái)處理文件內(nèi)容或者將文件保存到它的最終位置。FileUpload提供簡(jiǎn)單的方式來(lái)完成兩方面的需求。
          // Process a file upload
          if (writeToFile) {
            File uploadedFile = new File(...);
            item.write(uploadedFile);
          } else {
            InputStream uploadedStream = item.getInputStream();
            ...
            uploadedStream.close();
          }
          注意:在FileUpload的默認(rèn)實(shí)現(xiàn)中wirte()方法應(yīng)該值得關(guān)注,如果數(shù)據(jù)還在臨時(shí)文件里沒(méi)有移除,那么這個(gè)方法就會(huì)試圖重命名這個(gè)文件為相應(yīng)的目標(biāo)文件。事實(shí)上如果重命名失敗了的話,數(shù)據(jù)就僅僅被拷貝。
          如果你需要訪問(wèn)內(nèi)存中的上傳數(shù)據(jù),你可以用get()方法來(lái)獲得數(shù)據(jù)的二進(jìn)制數(shù)組形式。
          // Process a file upload in memory
          byte[] data = item.get();
          ...

          第6章 清除資源
          這一節(jié)只適用于你使用了DiskFileItem。換句話說(shuō),它只適用于你在處理上傳文件之前將上傳文件寫(xiě)入過(guò)臨時(shí)文件這種情形。
          像這種臨時(shí)文件會(huì)被自動(dòng)刪除, 如果它們不再被使用(更確切地說(shuō),java.io.File的實(shí)例已經(jīng)被GC掉了。 )這是由org.apache.commons.io.FileCleaner類(lèi)在后臺(tái)完成的,它會(huì)啟動(dòng)一個(gè)收割機(jī)線程。
          這個(gè)收割機(jī)線程在它不再被需要時(shí)會(huì)被停止。在servlet環(huán)境里,這是通過(guò)指定一個(gè)名叫FileCleanerCleanup的servlet上下文監(jiān)聽(tīng)器來(lái)實(shí)現(xiàn)的。要做到這里,在你的web.xml增加下面的代碼:
          <web-app>
          ...
          <listener>
          <listener-class>
          org.apache.commons.fileupload.servlet.FileCleanerCleanup
          </listener-class>
          </listener>
          ...
          </web-app>
          不幸的是,事情到這里還沒(méi)完。如果你和下面的情況一樣,那么你就只需要按照上面的做,就可以清除資源了。
          你使用的是commons-io 1.3或者更晚的版本。
          你是從web應(yīng)用的web-inf/lib里載入commons-io的,并不是從其它位置,如Tomcat的common/lib下。
          如果commons-io 1.3是從你的WEB容器的classpath里載入的,那么,下面的情況可能會(huì)出現(xiàn):
          建議你運(yùn)行兩個(gè)應(yīng)用,一個(gè)叫A,一個(gè)叫B。(這兩個(gè)應(yīng)用可能是完全一樣,只不過(guò)上下文名稱(chēng)不一樣。)這兩個(gè)應(yīng)用都使用了FileCleanerCleanup。現(xiàn)在,如果你終止應(yīng)用A,B還在運(yùn)行,這時(shí),A會(huì)終止B的收割機(jī)線程。換言之,你要十分仔細(xì)地考慮是使用FileCleanerCleanup,還是不使用。

          第7章 觀察上傳進(jìn)度
          如果你希望可以上傳很大的文件,這時(shí),你可能想將上傳的狀態(tài)告訴用戶(hù),如已經(jīng)接收了多少。
          觀察上傳進(jìn)度需要通過(guò)一個(gè)處理監(jiān)聽(tīng)器來(lái)實(shí)現(xiàn)。
          //Create a progress listener
          ProgressListener progressListener = new ProgressListener(){
            public void update(long pBytesRead, long pContentLength, int pItems) {
              System.out.println("We are currently reading item " + pItems);
              if (pContentLength == -1) {
                System.out.println("So far, " + pBytesRead + " bytes have been read.");
              } else {
                System.out.println("So far, " + pBytesRead + " of " + pContentLength
                + " bytes have been read.");
              }
            }
          };
          upload.setProgressListener(progressListener);
          上面這個(gè)監(jiān)聽(tīng)器是有問(wèn)題的。因?yàn)樗浅nl繁地被調(diào)用。這會(huì)帶來(lái)性能問(wèn)題。一個(gè)比較好的解決辦法是,減少調(diào)用。例如,如果megabytes被改變,那么就發(fā)出一個(gè)消息。
          //Create a progress listener
          ProgressListener progressListener = new ProgressListener(){
            private long megaBytes = -1;
            public void update(long pBytesRead, long pContentLength, int pItems) {
              long mBytes = pBytesRead / 1000000;
              if (megaBytes == mBytes) {
                return;
              }
              megaBytes = mBytes;
              System.out.println("We are currently reading item " + pItems);
              if (pContentLength == -1) {
                System.out.println("So far, " + pBytesRead + " bytes have been read.");
              } else {
                System.out.println("So far, " + pBytesRead + " of " + pContentLength
                + " bytes have been read.");
              }
            }
          };

          posted @ 2007-09-25 13:15 卓韋 閱讀(682) | 評(píng)論 (0)編輯 收藏

               摘要: Java 文件上傳 java文件上傳,介紹幾種常用的方法,也是經(jīng)過(guò)本人親手調(diào)試過(guò)的 1.jspsmartupload 這個(gè)組件用起來(lái)是挺方便的,不過(guò)就是只適合小文件上傳,如果大文件上傳的話就不行,查看了一下他的代碼,m_totalBytes = m_request.getContentLength(); m_binArray = new byte[m_totalBytes];...  閱讀全文

          posted @ 2007-09-24 22:59 卓韋 閱讀(8669) | 評(píng)論 (1)編輯 收藏

          主站蜘蛛池模板: 乌苏市| 晋城| 平安县| 左云县| 肃宁县| 哈巴河县| 广昌县| 修文县| 祥云县| 云南省| 博罗县| 武城县| 宣城市| 密山市| 阿拉善右旗| 南溪县| 周宁县| 新巴尔虎右旗| 肥城市| 介休市| 涪陵区| 乌拉特后旗| 正定县| 珠海市| 台北县| 中牟县| 泸西县| 东乌珠穆沁旗| 嘉黎县| 镇赉县| 垦利县| 普格县| 手游| 东辽县| 武夷山市| 平原县| 上高县| 启东市| 晋城| 绥芬河市| 桦南县|