將 Java 應用程序遷移到 .NET
摘要: 發現 Microsoft .NET 比 Java 優越的地方,學習如何將 Java 應用程序轉換到 .NET。 什么是 .NET? Microsoft? .NET(讀作“dot net”)既是軟件編寫方法,又是一套 開發 實現這些方法的軟件的工具。我們來看一些有關連接性和互操作性的常見業務問題,
摘要:發現 Microsoft
.NET 比
Java 優越的地方,學習如何將
Java 應用程序轉換到
.NET。
什么是 .NET? Microsoft? .NET(讀作“dot net”)既是軟件編寫方法,又是一套
開發實現這些方法的軟件的工具。我們來看一些有關連接性和互操作性的常見業務問題,以說明促使 .NET 方法的發展的原因:大多數企業都與其他企業合作,但是它們的信息系統運作卻是孤立的。沒有建立起貫穿供應商的產品供應鏈;供應商與買方之間的聯系常常只局限于傳真或簡單的文本文件交換。人們通常將這一點看作提高生產率的障礙。更好地溝通可以使企業實現更高的效率。當供應鏈中的所有供應商都彼此連接起來時,每個供應商都能夠將庫存降低到最低水平、根據
需求生產和更有效地協調。
與此相關的是互操作性問題。當企業承諾互相連接起來時,如果他們的操作系統處于不同的再
開發狀態或處于不斷變化中,他們就會面臨艱難的設計及實現連接的策劃工作。此外數據
安全也是個復雜問題,因為通過企業防火墻與其交換數據的既是合作伙伴又是競爭對手。
.NET 方法能更好地啟用這種能力,它使得編寫能夠在任意時間、任意地點和任意設備上安全地彼此連接和互操作的系統變得非常簡單。實現這一點的核心技術是 XML
Web Service。這項技術既是一種方法,也是在不同機器、不同
網絡及不同操作系統的組件之間傳遞信息的傳輸層。
XML
Web Service 得到了廣泛的支持。許多公司已經使用 XML
Web Service 與合作伙伴連接。Microsoft 正在所有產品上加大對 XML Web Service 的支持。從開發人員的角度看,.NET 使得利用 Microsoft Visual Studio .NET、.NET Framework 以及 XML Web Service 編寫彼此連接的系統變得非常簡單。
.NET Framework .NET 絕不僅僅是 XML Web Service。.NET 的核心是 .NET Framework,它由公共語言運行庫和類庫組成。這兩個組件為構建 .NET 應用程序提供了執行引擎和
編程 API。
為 .NET 編譯的應用程序不是被直接編譯成本機代碼,而是被編譯成一種稱為 Microsoft 中間語言 (MSIL) 的中間語言。當首次運行一個應用程序時,公共語言運行庫實時編譯器在程序執行前將 MSIL 代碼編譯成本機代碼。公共語言運行庫不是一個簡單的 JIT 編譯器,它還負責提供內存回收、異常處理、安全服務、運行時類型安全檢查等底層執行服務。由于公共語言運行庫在管理執行方面的作用,因此有時將以 .NET Framework 為目標的程序稱為“托管”應用程序。
.NET Framework 是一組類,它們用于構建在公共語言運行庫上運行的應用程序。這些類庫為包括數據訪問、安全性、文件 IO、XML 操作、消息傳送、類反射、XML Web Service、ASP.NET 和 Microsoft
Windows 服務在內的各種任務提供強大的支持。
也許 .NET 最獨特的屬性是它的多語言支持。Microsoft 已經為 .NET Framework 發布了四種商業語言:Visual C#? .NET、Visual Basic? .NET、
C++ 托管擴展及 Visual J# .NET。許多其他兼容 .NET 的語言也正在開發中,其中包括 Perl、Python 及 COBOL。
為了幫助創建兼容 .NET Framework 的語言,Microsoft 設計了公共語言規范 (CLS)。每種語言要使用 .NET Framework 和公共語言運行庫,以及與用其他語言編寫的組件進行互操作,就必須提供 CLS 所描述的功能。如果一種語言實現了必需的功能,那么它就被稱為兼容 .NET。每種兼容 .NET 的語言都支持相同的數據類型,使用相同的 .NET Framework 類,編譯為相同的 MSIL,并且使用相同的公共語言運行庫管理執行過程。因此,各種兼容 .NET 的語言之間沒有優劣之別。開發人員可以自由地為特定的組件選擇最好的語言同時又不損失該平臺的能力和自由度。另外,使用一種語言編寫的組件也能夠很容易地與用另外一種語言編寫的組件進行互操作。例如,您可以用 C# 編寫一個從用 Visual Basic 編寫的基類繼承而來的類。CLS 已經被提交給 ECMA 進行標準化,這鼓勵許多語言開發人員為許多語言創建兼容 .NET 的版本。在撰寫本文時有 20 多種兼容 .NET 的語言正在開發中。
圖 1 展示了在操作系統之上的各種 .NET 組件。.NET Framework 由四個藍框組成,這些藍框分別代表 ASP.Net、Windows 窗體、ADO.NET 和 XML 以及子組件。

圖 1:.NET Framework 體系結構
Visual Studio .NET
為了能夠進行 .NET 開發,Microsoft 重新編寫了其開發工具并重新將其組合為 Visual Studio .NET。Visual Studio .NET 支持使用一種或多種語言開發應用程序。設計、開發、調試和部署 .NET 組件均使用同一個集成開發環境 (IDE)。
這個開發環境支持控制臺應用程序、Windows 應用程序、DLL、Web 應用程序、XML Web Service 以及手持設備應用程序的開發。該開發環境提供了一些獨特的高生產率功能:智能感知;針對 Web 窗體、Windows 窗體、XML 架構及數據的可視化設計器;可以無縫地從用一種語言編寫的代碼轉到用另一種語言編寫的代碼的跨語言調試器;與 .NET Framework 的緊密集成;能在鍵入時持續提供上下文相關幫助的動態幫助;顯示編譯器錯誤以及任務的任務列表;體系結構設計功能,例如 Visio 集成,以及用于可視化訪問數據庫的服務器資源管理器、Windows 服務、性能計數器和服務器端應用程序組件。
Microsoft Visual Studio .NET 是一個獲獎的開發工具。到撰寫本文時,Visual Studio .NET 已經獲得了多種獎項,其中包括兩次 2002 SD Magazine 效率獎和 PC Magazine 的 2001 年度卓越技術獎(盡管該產品當時仍處于 Beta 階段)。
比較 .NET 和 Java
在經驗豐富的 Java 開發人員看來,.NET 可能與 Java 平臺很相似,它們都提供了一種創建應用程序的結構化方法,都有編譯為中間代碼的語言,都為應用程序開發提供了一個大型 API 庫。但實際上,.NET 的核心有一套與 Java 平臺不同的目標。
從概念上講,Java 是兩樣東西:Java 平臺(運行時和 API)和 Java 語言。Java 平臺的用途是支持用 Java 語言編寫并被編譯為 Java 字節碼的應用程序。盡管進行了許多試圖將其他語言編譯為 Java 字節碼的工作,但是這些工作大部分都是學術活動。Java 的理想目標一直是“在多種平臺上使用一種語言”。
.NET 也是兩樣東西:.NET Framework(運行時和 API)和大量支持它的編程語言。.NET Framework 的用途是支持用任一種語言編寫并被編譯為 MSIL 的應用程序。.NET 的目標是“多種語言共享一種平臺”。
.NET 與 Java 相比的優點
與 Java 相比,除了語言自由度之外,.NET 還有許多其他優點。下面總結了一些最重要的優點:
框架類
由于 Java 是多平臺的,因此傳統上其框架類被局限于那些所有平臺都提供的類。這影響了類的范圍和豐富度:類的范圍被局限于可用計算機和操作系統最通用的類。另外還影響了類本身的豐富度。內建 Java 類一般都非常簡單,開發人員常常在它們上面構建自己的框架或不得不尋找 XML 文件語法分析等第三方框架。在發行 JDK 1.4 之前必須使用第三方庫或編寫自己的語法分析程序來對 Java 中的 XML 文件進行語法分析。編寫自己的語法分析程序通常需要 100 多行代碼。
.NET Framework 構建于 Windows 平臺之上。還有一個用于 FreeBSD 的公共語言運行庫和 .NET Framework 類庫版本。這些類包括了該平臺上的所有框架類。另外,這些類也比 Java 所能提供的類更豐富。.NET 提供了一個編程框架而不是一個構建編程框架的基礎。
下面的 C# 例子說明在 .NET 中如何對 XML 文件進行語法分析。注意,.NET Framework 中已經提供了輔助類。這使得代碼編寫非常簡單:
XmlTextReader myXmlTextReader = new XmlTextReader ("textToValidate.xml"); XmlValidatingReader myReader = new XmlValidatingReader(myXmlTextReader); myReader.Schemas.Add(myXmlSchemaCollection); myReader.ValidationEventHandler += new ValidationEventHandler (this.ValidationFailureHandler); // 讀取 XML 數據。 while (myReader.Read()){} |
.NET Framework 的保真度比 Java 平臺高。.NET 程序可以使用 Windows 的所有功能,而不象 Java 那樣只能使用 Windows 最通用的功能。
“……真正的底線是:.NET 方法意味著 Microsoft 提供了 90% 以上開發人員都可能需要的符合標準的工具,而 Java 方法仍然意味著從各種來源搜集而來的各種碎片組合成的一個
解決方案?!?BR>
一次編寫,到處調試 盡管 Java 的“一次編寫,到處運行”的理想很有吸引力,但是現在編寫的大多數應用程序都僅針對一個操作系統。造成這種情況的技術原因有兩個:由于 Java 框架在范圍和豐富度上受到局限,因此開發人員常常使用專有類來訪問目標平臺的可用功能。第二,由于各種 Java 執行程序之間無法消除的不
兼容性繼續給真正的跨平臺工作帶來困難,因此開發人員必須在想要支持的所有平臺上
測試代碼。因此,有些開發人員半開玩笑地將 Java 稱為“一次編寫,到處調試”的平臺。
安全性 .NET 的安全功能更豐富。除了加密 API、安全 cookie 和身份驗證之外,.NET 還是一個能夠根據代碼來源給不同用戶群分配不同權限等級的豐富的可擴展機制。例如,所有來自 Microsoft 的代碼都被看作是安全的??梢栽试S或禁止所有來自特定 URL 的代碼讀/寫臨時目錄或屏幕等特定資源。另外,應用程序可以被標志為需要某種權限(例如需要訪問文件系統)。如果沒有這些權限,那么該應用程序就不會被加載。由于安全檢查是在加載時進行的,因此開發人員不必在整個應用程序中編寫安全失敗檢查邏輯。這一點是通過一項稱為“代碼訪問安全”的新技術管理的,這種技術對從 Internet 或本地機器加載的代碼都有效。
版本控制 .NET Framework 有一個比 Java 更強大的版本控制系統。在 Java 中,如果安裝了同一個類的兩個版本,那么 Java 運行時將簡單地加載在類路徑上找到的第一個類而不管它是哪個版本。而 .NET 則具有豐富的版本支持。通過并行執行,.NET 可以在同一時刻加載和執行同一個類的兩個或更多不同版本。各應用程序都可以選擇自己的綁定機制:無論是綁定在一個類庫的特定版本上、庫的最新版本上,還是綁定在特定位置的版本上。另外,可以按不同的機器應用規則,以便替代或進一步優化版本控制。這種版本控制方法也適用于編程語言。例如,在 C# 語言中,默認情況下方法不是虛函數,因此開發人員必須明確聲明可被替代的方法。這意味著組件不能在基類中偶然中斷行為。C# 不要求開發人員明確聲明一種方法會引起哪些異常。如果異常列表發生變化,客戶端代碼仍能正常運行。
性能 .NET 勝過 Java 之處還在于其深入調整應用程序行為和性能的能力。核心應用程序構建模塊是為可伸縮性和高吞吐量設計的。例如,在 ADO.NET 數據訪問斷開的情況下,可以在內存內完成更多函數,而這些函數在 Java
數據庫連接 (JDBC) 中要求來回訪問
數據庫。另外,.NET 應用體系結構設計目標是更快的速度。例如,ASP.NET Web 頁的性能比 Active Server Page (ASP)、Java Server Page (JSP) 和 HTML 內嵌
腳本語言提高了很多。與 Java 平臺相比,.NET 無論在單用戶情況還是在多用戶情況,性能都更好。
“Microsoft 的 .NET 應用程序的性能明顯優于 Java 應用程序。如果有 5,000 個虛擬用戶,則在沒有緩存時,前者比后者快 10 倍以上;在有緩存時,前者比后者快 1 倍以上?!?
如何將 Java 應用程序遷移到 .NET 有兩種方法可以將 Java 應用程序遷移到 .NET:將它們升級到 Visual J# .NET 或將它們轉換到 Visual C# .NET。如下所述,這兩種方法要求進行不同的工作,各有自己的優點。由于 NDP 的完整版本只能在 Microsoft Windows 上使用,因此兩種方法都意味著將應用程序遷移到 Microsoft Windows。盡管 NDP 中包含面向 Visual C# .NET、Visual Basic .NET 及 Visual J# .NET 的命令行編譯器,但我們在下文中假設開發人員使用 Visual Studio .NET 將應用程序遷移到 .NET。如前所述,Visual Studio .NET 是效率最高的 .NET 應用程序開發工具。
升級到 Visual J# .NET Visual J# .NET 是針對 .NET Framework 的 Java 語言實現。
J# 是 Microsoft 獨立開發的,它將 Java 語言代碼編譯為 MSIL。Visual J# .NET 包括一個 Java 語言編譯器、JDK 1.1.4 類庫和一個將編譯好的 Java 字節碼升級為 MSIL 的工具(這個工具可用于將類庫升級為可以從 .NET 應用程序使用的格式)。除了 JDK 1.1.4 類庫,和其他兼容 .NET 的語言一樣,Visual J# .NET 可以充分訪問 .NET Framework,包含用于 Windows 窗體和 Web 窗體開發的設計器。
升級到 Visual J# .NET 是將 Java 應用程序遷移到 .NET Framework 的最簡單、最快速的方法。Visual J# .NET 有開發人員熟悉的語法和類庫,因此開發人員可以利用有關 Java 的原有
知識,.NET Framework 很快就能上手。應用程序升級到 Visual J# .NET 后可以立即帶來一些好處:升級速度很快,開發人員可以開始添加 .NET Framework 和 Microsoft 擴展給 Java 語言帶來的新功能。使用 Visual Studio .NET 打開一個 Visual J
++ 6.0 項目,即可激活 Visual J# .NET Upgrade Wizard(Visual J# .NET 升級向導)。
轉換到 Visual C# .NET Java Language Conversion Assist
ant(Java 語言轉換助手)可將 Java 應用程序轉換為 Visual C# .NET 應用程序。調用 Java API 的代碼被轉換為使用 .NET Framework 的相應 C# 代碼。由于這種轉換很復雜,因此不是所有 Java API 都能被轉換。Java Language Conversion Assistant(Java 語言轉換助手)能轉換 90% 的 JDK 1.1.4 調用,而其余 10% 則會在代碼中標出問題。每個問題都鏈接到一個主題,指導完成轉換應作哪些修改。
轉換到 C# 的應用程序可以獲得最大的靈活性:盡管轉換到 C# 比升級到 Visual J# .NET 慢,但是由于應用程序轉換后使用本機 .NET Framework API,這帶來了更多機會。修改完成后,轉換后的代碼可以立即象 Visual J# .NET 那樣利用 .NET Framework 的高性能、可伸縮性、安全性及版本控制能力。
與 Visual J# .NET 不同,Java Language Conversion Assistant(Java 語言轉換助手)支持 Visual J
++ 6.0 松散文件和基于目錄的項目的轉換。從 Visual Studio .NET 菜單中選擇
File(文件),再選擇
Open(打開),然后選擇
Convert(轉換),即可激活 Java Language Conversion Assistant(Java 語言轉換助手)。
在 J# 和 C# 之間選擇 決定使用哪個兼容 .NET 的語言遷移 Java 應用程序主要是一個個人選擇問題。如前所述,Visual J# .NET 和 Visual C# .NET 都編譯為相同的 MSIL,這兩種語言都訪問相同的 .NET Framework,提供相對一致的功能。
為了幫助您進行選擇,下面是在選擇是升級到 Visual J# .NET 還是轉換到 Visual C# .NET 時應該考慮的三個主要決定因素:
遷移時間 |
當 Java 應用程序被升級到 Visual J# .NET 時,語言仍然是 Java,對 JDK 1.1.4 API 的調用保留原樣。當同一應用程序被轉換到 C# 時,語言轉換為 C#,Java API 調用被轉換為本機 .NET Framework 調用。這種轉換的質量非常高(常常達到 90% 以上),但是在 Java Language Conversion Assistant(Java 語言轉換助手)工作結束后仍然需要一些修改。如果縮短遷移時間非常重要,那么 Visual J# .NET 可能是最好的選擇。 |
框架 |
被轉換到 C# 的應用程序可以立即利用新 .NET Framework 比 Java 平臺更高的性能、可伸縮性及版本控制能力。對于升級到 Visual J# .NET 的應用程序,盡管您可以用 .NET Framework 添加新功能,但是它仍然使用 Java 數據類型和 Java 庫。如果非常需要讓應用程序的體系結構利用 .NET Framework 的優勢,那么 C# 可能是最好的選擇。 |
語言 |
對于許多人而言,最重要的考慮因素僅僅是語言喜好:不管您是使用 Java 還是使用 C# 開發應用程序。這主要是一個個人選擇問題。Visual J# .NET 和 C# 都源于 C++,有類似的語法和功能。對于已經在 Java 上做出投入并想繼續使用 Java 的人而言,Visual J# .NET 可能是最好的選擇。對于想轉向為開發 .NET 應用程序專門設計的“本機”.NET 的語言的開發人員而言,C# 可能是最好的選擇。 |
為了更深入地理解這兩種選擇,下一節討論了應用程序被遷移到 .NET 后會發生什么情況。
技術映射 兩種遷移方法得到的結果不同。下面的兩個表說明了 Java 項目的組成要素被遷移到 .NET 時的變化。
表 1:Java 遷移到 .NET 組件
Java 技術 |
升級到 Visual J# .NET |
轉換到 C# |
Java 語言 |
Java 語言 |
C# 語言 |
小程序 |
不轉換 |
Windows 窗體控制 |
JavaBean |
JavaBean |
C# 類(BeanInfo 和 ClassInfo 不轉換) |
ActiveX 控件 |
不轉換 |
ActiveX 控件 |
AWT 框架 |
AWT 框架 |
Windows 窗體 |
WFC 窗體 |
WFC 窗體 |
Windows 窗體 |
編譯后的庫 |
編譯后的庫 |
不轉換 |
資源文件 |
ResX 文件 |
ResX 文件 |
表 2:單個軟件包的遷移
軟件包 |
升級到 Visual J# .NET |
轉換到 C# |
com.ms.awt java.awt |
Java.awt |
System.Windows.Forms |
com.ms.com |
com.ms.com |
System.Runtime.InteropServices |
com.ms.dll |
com.ms.dll |
System.Runtime.InteropServices System.ComponentModel |
com.ms.dxmedia |
不升級 |
DirectAnimation |
com.ms.fx |
不升級 |
System.Windows.Forms |
com.ms.io |
com.ms.vjsharp.io |
System.IO |
com.ms.lang |
com.ms.lang |
System Microsoft.Win32.RegistryKey |
com.ms.object |
com.ms.vjsharp.object |
System |
com.ms.ui |
不升級 |
System.Windows.Forms |
com.ms.util |
com.ms.util |
System System.Collections System.Diagnostics |
com.ms.wfc.app |
com.ms.wfc.app |
System.Windows.Forms System.Globalization.CultureInfo Microsoft.Win32 System.Environment.SpecialFolder System.Threading System.DateTime |
com.ms.wfc.core |
com.ms.wfc.core |
System System.ComponentModel System.Windows.Forms.Design System.ComponentModel.Design System.Resources |
com.ms.wfc.data |
com.ms.wfc.data |
ADODB System.Runtime.InteropServices RDS System.Globalization System System.ComponentModel MSDASC System.Resources |
com.ms.wfc.data.adodb |
com.ms.wfc.data.adodb |
ADODB |
com.ms.wfc.data.ui |
com.ms.wfc.data.ui |
System.Windows.Forms System.Data System |
com.ms.wfc.io |
com.ms.wfc.io |
System.IO System.Globalization |
com.ms.wfc.ole32 |
com.ms.wfc.ole32 |
|
com.ms.wfc.ui |
com.ms.wfc.ui |
System.Windows.Forms |
com.ms.wfc.util |
com.ms.wfc.util |
System System.Diagnostics System.Collections System.Runtime.InteropServices System.Resources System.Globalization |
com.ms.wfc.win32 com.ms.win32 |
com.ms.wfc.win32 com.ms.win32 |
轉換為 PInvoke 調用 |
java.io |
java.io |
System.IO |
java.lang |
java.lang |
System System.Threading |
java.lang.reflect |
java.lang.reflect |
System.Reflection System |
java.math |
java.math |
System.Decimal |
java.net |
java.net |
System.Net System System.IO |
java.security |
java.security |
不轉換 |
java.sql |
java.sql |
System.Data.OleDb System.DateTime |
java.text |
java.text |
System System.Globalization System.Resources |
java.text.resources |
java.text.resources |
System.Resources |
java.util |
java.util |
System System.Collections System.Globalization System.Resources System.Configuration |
混合式遷移 用兼容 .NET 的不同語言編寫的組件可以很容易地彼此互操作,這樣就能夠從 Java 進行混合式遷移。在混合式遷移中,您將應用程序的一個組件升級為 Visual J# .NET 而將另一個組件轉換到 C#。實際例子包括:將中間層組件升級為 Visual J# .NET,并從轉換到 C# 的客戶端訪問它。您可以使用 Visual J# .NET 二進制轉換器將庫轉換為任何兼容 .NET 的語言都能使用的格式。
不使用自動遷移功能的技術 Visual J# .NET 和 Java Language Conversion Assistant(Java 語言轉換助手)的目標都是 Java 語言、JDK 1.1.4 庫以及 Visual J
++ 6.0 附帶的 Microsoft 庫。有些應用程序還使用 J2EE、J2SE 等新 Java 版本的技術。這些應用程序在遷移到 .NET 時常常需要進行一些額外修改。這些修改通常非常簡單:遷移后,應用程序的大部分(業務邏輯和 JDK 1.1.4 類)都會得到完美的遷移。在遷移后的代碼中,不支持的技術將保留不變。您必須使用類似的 .NET 技術替換未遷移的 Java 技術以完成遷移。由于 .NET 提供了一套比 Java 更豐富的類,因此在進行技術替換時您常??梢赃M行一些重大改進。
Swing 窗體軟件包的遷移是一個很好的例子。
遷移 Swing Java 包含兩個競爭的窗體軟件包:Abstract Windowing Toolkit (AWT) 和 Swing。JDK 1.1.4 提供 AWT。Visual J# .NET 支持 AWT,可以通過 Java Language Conversion Assistant(Java 語言轉換助手)將 AWT 轉換為 Windows 窗體。JDK 1.1.4 可以使用一個附加的 Swing 庫,這個庫是 J2SE 和 J2EE 類庫的一部分。Swing 窗體布局不能自動遷移到 .NET。在遷移過程中,代碼中的
Javax.Swing 類保留不變,您必須用 Windows 窗體類來替換它。為此,請在被遷移的應用程序中對各 Swing 窗體執行以下步驟:
- 向被遷移應用程序中添加一個新的 Windows 窗體
- 向窗體中添加控件以獲得與原有 Swing 窗體相同的布局
- 將事件邏輯代碼從被遷移的 Swing 窗體復制到新的 Windows 窗體中的事件處理程序
- 從應用程序中刪除被遷移的 Swing 窗體

圖 2:在 Visual Studio 中重畫 Swing 窗體
Windows 窗體提供了比 AWT 或 Swing 更豐富的環境,并且幾乎在所有方面都包含 Java 平臺中所能找到的功能的超集。例如,Windows 窗體使得控制窗體布局更加容易。Java 中的布局管理器常常會帶來困難。獲得所需的窗體布局需要了解布局管理器,并且即使是最基本的布局都需要編寫許多代碼。Windows 窗體通過為所有控件提供絕對定位而簡化了窗體管理。另外,Windows 窗體可以通過靠接和錨定輕易地調整窗體大小??拷右幎ㄒ粋€控件應該始終占據屏幕的特定區域。錨定將窗體控件的一個或多個角“釘住”。調整窗體大小時使用這些“釘”確定控件的位置。使用靠接和錨定通??梢詮氐紫龔碗s的窗體大小調整代碼。
將 Swing 窗體遷移到 .NET 不僅非常簡單,而且還可以利用 .NET Framework 更豐富的類改善應用程序。
遷移 Java Server Page
Java Server Page (JSP) 和 Servlet 都是創建支持 Java 的 Web 頁的技術。JSP 提供了與 ASP 相似的腳本嵌入式 HTML 體系結構。Servlet 為沒有 HTML 代碼的編譯后 JSP 頁提供了一個機制。兩項技術都使用 Java 代碼,都為 Web 頁提供基于事件的編程。
JSP 和 Servlet 可以遷移到 ASP.NET,這么做有很多好處:ASP.NET 是一種更加強大的技術,它比 JSP、PHP(PHP 超文本預處理器)、ASP 及其他解釋型腳本嵌入式 HTML 體系結構具有更高的可伸縮性和性能。但是,在撰寫本文時還沒有將 JSP 遷移到 ASP.NET 的自動系統。Microsoft 已經宣布在 2002 年下半年推出將 JSP 轉換為 C# ASP.NET 的 Java Language Conversion Assistant(Java 語言轉換助手)擴展。同時也在考慮今后推出 JSP 到 Visual J# .NET ASP.NET 的轉換。
演練
本節演練從 Visual J++ 6.0 到 Visual J# .NET 的升級和從 Java 到 C# 的轉換。兩個演練的目的都是介紹遷移技術。顯然,兩種遷移都遠遠不止這里介紹的內容。另外,可以使用任意一種遷移技術很好地遷移這兩個應用程序示例。
如何將 Visual J++ 6.0 項目升級到 Visual J# .NET
本節將一步步演練 Visual J++ 6.0 應用程序升級到 Visual J# .NET 和 .NET 的過程。
要升級的應用程序是 MDIWordPad 項目。這是 Visual J++ 6.0 附帶的 MSDN 示例,可以作為 Visual J++ 6.0 產品示例的一部分下載。此應用程序的功能與 WordPad 相似。它提供打開和編輯多個文本文件的功能。它還提供簡單的格式化功能。這些功能是通過菜單或工具欄提供的。圖 3 是 MDIWordpad 應用程序的 Visual J++ 版本。

圖 3:用 J++ 編寫的應用程序 MDIWordPad
為了得到最佳結果,應該使用 Visual J# .NET Upgrade Wizard(Visual J# .NET 升級向導)將 Visual J++ 6.0 項目升級到 Visual J# .NET。請按以下步驟進行升級:
- 在 Visual Studio .NET 中,從菜單中選擇 File(文件),再選擇 Open(打開),然后選擇 Project(項目)。
- 找到 MDIWordPad.vjp 項目文件的位置并單擊 Open(打開)。
Visual Studio .NET 檢測到您要打開的文件是 Visual J++ 6.0 項目并打開 Visual J# .NET Upgrade Wizard(Visual J# .NET 升級向導)。
- 閱讀完介紹文字后,單擊下一步進入向導的第二頁。此頁面要求提供您正在升級的項目的類型信息。MDIWordPad 示例是一個 Windows 應用程序,因此默認值是正確的。如果您要升級的項目是一個控制臺應用程序或類庫,您就應該選擇一個選項。確認選定了 Windows 應用程序后,單擊下一步進入升級向導的下一頁。
圖 4:Visual J# .NET Upgrade Wizard(Visual J# .NET 升級向導)提示選擇項目目標類型
- 對于使用 Active X 控件或其他 COM 引用的應用程序,您可以在這一頁上明確添加對這些組件的引用。添加這些引用可以幫助升級向導找到項目中使用的附加類型。雖然即使您不在這里指定它們,升級向導也可以找到并將這些引用添加到項目中,但是現在添加它們可以加快升級速度。MDIWordPad 沒有使用任何外部組件,因此請單擊 Next(下一步)而不需要做任何改動。
- 現在,升級向導開始評估項目并將項目文件和引用升級到 Visual J# .NET。會顯示一個狀態條和變化的文本,提示向導目前的進度。處理結束之后,升級向導將自動進入最后一頁。
- 在向導的最后一頁中,您可以使用一個復選框選擇是否查看項目升級報告。單擊 Finish(完成)顯示升級報告。升級報告列出了有關應用程序及升級進程的信息。如果在項目轉換中發現了問題或丟失的引用,它們將在這里列出。該報告中還包括有關升級向導向新解決方案中添加的文件的信息。
- 在 Solution Explorer(解決方案資源管理器)中雙擊文件 MDIWordPad.java 以便在 Code Editor(代碼編輯器)中將其打開。通過瀏覽該文件,您會發現源代碼看起來與原先完全相同。事實上,將一個項目升級到 Visual J# .NET 并不要求任何形式的源代碼修改,所要求修改的只是解決方案、項目和資源文件。源代碼文件本身的內容保持不變。
- 按 F5 運行升級后的應用程序。用程序的表現沒有變化,您可以通過編輯一些文本來驗證這一點。應用程序的操作與升級前完全相同,只是它現在是運行在 .NET 上。
圖 5:MDIWordPad 的升級版本,運行在 Visual Studio .NET 上,使用 .NET
將應用程序升級到 Visual J# .NET 是一個非常簡單的過程。升級向導會幫助您提供順利升級所需的信息,并且升級后項目的源代碼沒有任何變化。通過 Visual J# .NET 提供的工具升級到 .NET 是一個極其快速和簡單的過程。由于二者有相似的語言和類庫,因此升級到 Visual J# .NET 是將 J++ 項目遷移到 .NET 的最快方法。
如何將 Java 項目轉換到 C#
本節將一步步演練將一個 Visual J++ 6.0 應用程序轉換到 C# 和 .NET 的過程。要轉換的應用程序是一個稱為 Island Book Sales 的簡單的最終用戶購買程序。該應用程序演示轉換的各個方面(AWT 到 Windows 窗體、JDBC 到 ADO.NET、Java 到 C#)。它還演示轉換后需要解決的一些問題。Island Book Sales 有兩個窗體。第一個窗體向用戶展示可供出售的書的列表。所提供的書包含在一個 Aclearcase/" target="_blank" >ccess 數據庫中,可使用 JDBC 讀取該數據庫。用戶可以選擇要購買的物品并將它放入購物車中。用戶的購物車顯示在第二個窗體中。該窗體使用戶能夠取消或購買購物車中的物品。圖 6 是運行中的應用程序。
注意:您必須將數據庫 bookstore.mdb 注冊為 ODBC DSN 才能運行 Bookstore 應用程序。

圖 6:Island Book Sales 應用程序
以下是將應用程序轉換到 C# 和 .NET 所需的步驟:
- 在 Visual Studio 中的 File(文件)菜單上單擊 Open(打開),然后單擊 Convert(轉換)。
這將啟動 Conversion(轉換)對話框。
- 選定 Java Language Conversion Assistant(Java 語言轉換助手)圖標后單擊 OK(確定),啟動 Java Language Conversion Assistant(Java 語言轉換助手)。
- 雖然原應用程序是使用 Visual J++ 編寫的,但本例中將它視作一個基于目錄的轉換。在向導的第二頁中選擇進行基于目錄的轉換選項,然后單擊 Next(下一步)。
- 在 Java Language Conversion Assistant(Java 語言轉換助手)的第三頁中,選擇包含應用程序源代碼的目錄,然后單擊 Next(下一步)。
- 向導的第四頁要求您輸入一些有關應用程序的信息。鍵入“Bookstore”作為項目名。其他兩個選項使用默認值,然后單擊 Next(下一步)。
圖 7:提供有關您的項目的信息
現在,Java Language Conversion Assistant(Java 語言轉換助手)詢問將轉換后的項目文件寫到哪里。選擇要使用的目錄后單擊 Next(下一步),必要時讓 Java Language Conversion Assistant(Java 語言轉換助手)創建目錄。
- 再次單擊 Next(下一步)開始轉換。轉換完成后向導結束。單擊 Close(關閉)按鈕關閉向導。
- 按 SHIFT+F7 打開窗體設計器。請注意,在設計器中可以看到窗體及其組件。Java Language Conversion Assistant(Java 語言轉換助手)將 AWT 組件轉換成了 Windows 窗體組件??梢允褂?Windows 窗體設計器查看轉換后的窗體。

圖 8:AWT 框架被轉換成了 Windows 窗體
- 從 View(視圖)菜單中選擇 Task List(任務列表)。您將看到轉換后的文件中添加了幾條升級說明。必須先解決這些問題應用程序才能正常運行。(如果現在生成和運行該應用程序,您將會發現該應用程序能夠出現但是沒有可用數據。)
- 雙擊 Task List(任務列表)中的第一條注釋,這將通過 retrieveData() 方法將光標移到第一條錯誤。此方法負責查詢數據庫并將有關可用標題的信息返回給應用程序。瀏覽此方法的代碼會發現 JDBC 調用被轉換成了 ADO.NET 調用。必須做些必要的修改后此代碼才能正確運行。
- 在 retrieveData 中,第一條注釋 Upgrade_ToDo 說方法 Class.forName 參數的格式已改變。這條注釋下面的代碼行用于加載原代碼中的 JDBC 驅動程序,但是對于 ADO.NET 不必這樣做。請刪除這條轉換說明及其下面的代碼行。
- 下一條轉換注釋告訴您 ADO.NET 中的連接字符串格式改變。如果您已經知道新的連接字符串格式,就將它輸入到變量 URL 的聲明中。 您還可以使用 Visual Studio .NET 中的工具編寫字符串,而不必記住連接字符串的格式。
- 按 SHIFT+F7 在設計器中打開窗體。從 ToolBox(工具箱)的 Data(數據)選項卡中,將一個 OleDbConnection 對象拖到窗體上。在 Properties(屬性)窗口中,單擊 ConnectionString 屬性的下拉列表并選擇 New Connection(新連接)。這將顯示 Data Link Properties(數據鏈接屬性)對話框,幫助您指定一個數據庫連接。
- 保存所提供書籍的信息的數據庫是一個 Access 數據庫。當從一個 ADO.NET 的 Access 數據庫中讀取數據時,您可以使用 Microsoft Jet 4.0 OLE DB 提供程序。在 Data Link Properties(數據鏈接屬性)對話框中單擊 Provider(提供程序)選項卡選擇該數據提供程序,然后單擊 Next(下一步)。找到該示例數據庫的 .mdb 文件,然后單擊 OK(確定)。
- DataAdapter 的 ConnectionString 屬性現在包含格式正確的示例數據庫連接字符串。將此字符串復制并粘貼到 retrieveData 方法的 URL 變量的聲明中。在字符串前添加一個 @ 符號,以告訴 C# 應該按字面解釋該字符串。修改后,聲明或 URL 應該如下所示:
String URL = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source =..\..\db.mdb;";
- 現在,這個升級問題已經解決,您可以刪除這條轉換注釋。
- 后面的兩條升級注釋不影響本應用程序,可以忽略或刪除它們。
- 按 F5 運行該應用程序。該應用程序將被加載,您可以看到它的工作狀態與原應用程序相同。
我們以最容易的方式將這個兩層的應用程序從 Java 轉換成了 C#。雖然該應用程序很小,但是上面介紹的方法適用于所有轉換項目。
小結
Java 到 Visual J# .NET 和 Java 到 C# 的遷移工具可以簡便有效地將 Java 應用程序遷移到 .NET。另外,您遷移后的應用程序可以立即利用 .NET 的所有優點,這使開發人員能夠向原有應用程序中添加新的功能,使最終用戶能夠享受到 .NET 應用程序比 Java 應用程序高得多的性能。
在遷移到 .NET 的過程中,開發人員可以將應用程序升級到 Visual J# .NET 或將其轉換到 C#。這兩種方法各有其優點:升級到 Visual J# .NET 速度最快、最簡單,Java 應用程序可以迅速地獲得 .NET 提供的功能;轉換到 C# 速度較慢,但是轉換后的應用程序可以獲得最大程度的靈活性。是使用 Visual J# .NET 還是使用 Visual C# .NET,這主要是一個個人選擇問題。
選擇任何一種遷移技術都能為您的舊應用程序注入新的活力。Visual Studio .NET 和 .NET Framework 標志著軟件開發的新紀元。
原文轉自:http://www.anti-gravitydesign.com
- 評論列表(網友評論僅供網友表達個人看法,并不表明本站同意其觀點或證實其描述)
-
国产97人人超碰caoprom_尤物国产在线一区手机播放_精品国产一区二区三_色天使久久综合给合久久97
|