跨平臺(tái)泛指程序語(yǔ)言、軟件或硬件設(shè)備可以在多種作業(yè)系統(tǒng)或不同硬件架構(gòu)的電腦上運(yùn)作。
專注于為中小企業(yè)提供成都網(wǎng)站設(shè)計(jì)、成都網(wǎng)站建設(shè)服務(wù),電腦端+手機(jī)端+微信端的三站合一,更高效的管理,為中小企業(yè)宿松免費(fèi)做網(wǎng)站提供優(yōu)質(zhì)的服務(wù)。我們立足成都,凝聚了一批互聯(lián)網(wǎng)行業(yè)人才,有力地推動(dòng)了1000+企業(yè)的穩(wěn)健成長(zhǎng),幫助中小企業(yè)通過(guò)網(wǎng)站建設(shè)實(shí)現(xiàn)規(guī)模擴(kuò)充和轉(zhuǎn)變。
廣義面言,一般的計(jì)算語(yǔ)言都可做到跨平臺(tái),開(kāi)發(fā)商只需要提供各種平臺(tái)下的Runtime/中間件環(huán)境即可。嚴(yán)格而言是指用某種計(jì)算機(jī)語(yǔ)言編制的程序只需要做小量的修改,編譯之後即可在另外一種平臺(tái)下運(yùn)行,此時(shí)并不提供Runtime/中間件環(huán)境。例如Java是一種提供Runtime環(huán)境的跨平臺(tái)解決方案,而C而是一種標(biāo)準(zhǔn)且嚴(yán)格的跨平臺(tái)語(yǔ)言。
跨平臺(tái)概念是軟件開(kāi)發(fā)中一個(gè)重要的概念,即不依賴于操作系統(tǒng),也不信賴硬件環(huán)境。一個(gè)操作系統(tǒng)下開(kāi)發(fā)的應(yīng)用,放到另一個(gè)操作系統(tǒng)下依然可以運(yùn)行。相對(duì)而言如果某種計(jì)算機(jī)語(yǔ)言不用修改代碼即可做到高度跨平臺(tái),那么此語(yǔ)言就越抽象,硬件控制力就越低,只適合開(kāi)發(fā)高度抽象的模型系統(tǒng)。諸如java,delphi和易語(yǔ)言,都已做到了跨平臺(tái)。它們將可以在多種系統(tǒng)下開(kāi)發(fā),運(yùn)行和維護(hù)。
大部分電腦語(yǔ)言從絕對(duì)意義而言,都是跨平臺(tái)的:因?yàn)槎际且愿呒?jí)的、人類可讀的方式來(lái)對(duì)CPU發(fā)號(hào)指令,這樣也就沒(méi)必要依賴於任何作業(yè)系統(tǒng)。但如果要用系統(tǒng)的部件工具箱,來(lái)新建用戶圖形界面(GUI),就可能會(huì)用到開(kāi)發(fā)員特定系統(tǒng)中的API函數(shù)或庫(kù)類。雖然C++是跨平臺(tái)的,但Windows下用到Win32 API的C++程式,一般就不能在Unix機(jī)器上編譯。不同編譯器對(duì)語(yǔ)言規(guī)范的解釋也有所差異。這樣的話,在針對(duì)不同系統(tǒng)進(jìn)行構(gòu)建之前,程式就得加以考慮。
一些如Java這樣的語(yǔ)言,從一開(kāi)始就意識(shí)到要在各個(gè)平臺(tái)下運(yùn)行,所以跨平臺(tái)在其平臺(tái)的本地語(yǔ)言環(huán)境中已經(jīng)實(shí)現(xiàn)。例如,Java可以跨平臺(tái)使用,正是由於Swing庫(kù)在許多平臺(tái)下的實(shí)現(xiàn)。類似的,能進(jìn)行跨平臺(tái)的文件存取,是因?yàn)橛懈髯云脚_(tái)下文件存取的庫(kù)。以此類推,各種跨平臺(tái)問(wèn)題,都需要各自的本地庫(kù)來(lái)解決。wxWidgets框架就是這樣的一個(gè)跨平臺(tái)庫(kù),根據(jù)不同的跨平臺(tái)問(wèn)題,提供了許多不同的解決方案;類似的庫(kù)有許多,可以根據(jù)不同語(yǔ)言的跨平臺(tái)開(kāi)發(fā),而采用相應(yīng)的庫(kù)。
針對(duì)每種作業(yè)系統(tǒng)、CPU,而提供并測(cè)試各自的編譯版本,這種做法的可行性很??;開(kāi)源軟體則允許用戶自己來(lái)編譯目的碼(object code),這樣在跨平臺(tái)方面更好一些。類似的,那些解釋型語(yǔ)言,或者需要虛擬機(jī)的語(yǔ)言,也更加符合跨平臺(tái)的要求,因?yàn)橛脩粢惨约哼M(jìn)行編譯。Sun公司的Java虛擬機(jī)Hotspot,只針對(duì)幾種而不是全部平臺(tái),提供編譯好的二進(jìn)位文件。例如,Sun對(duì)於GNU/Linux,只支持i386平臺(tái),但如果誰(shuí)在PowerPC或者SPARC電腦上運(yùn)行Linux,就只好自己編譯本地的機(jī)器碼(machinecode),或者使用第三方軟體,才能運(yùn)行Java程式。
許多API(應(yīng)用程式介面)依賴於平臺(tái)。OpenGL可以看作是跨平臺(tái)的,因?yàn)槠洳灰蕾囲度魏翁囟ǖ淖鳂I(yè)系統(tǒng)、CPU構(gòu)架或者某個(gè)牌子的圖形設(shè)備。特定平臺(tái)的API可以在其他系統(tǒng)上作為兼容層而新建,例如WINE的庫(kù),Windows程式就可以在UNIX系統(tǒng)上運(yùn)行。
另外許多程式語(yǔ)言還有跨平臺(tái)的擴(kuò)展以及中間件,這樣程式設(shè)計(jì)師對(duì)於同樣的原始碼,只要進(jìn)行一點(diǎn)小修改,就可以在不同平臺(tái)下編譯/運(yùn)行,例如Qt和wxWidgets。
支持多種作業(yè)系統(tǒng)的軟體
1. 資料庫(kù)管理系統(tǒng)(DBMS):
MySQL:Solaris、Linux、Windows、FreeBSD
Oracle:Solaris、Linux、Windows
2. 網(wǎng)站伺服器、應(yīng)用程式伺服器:
Apache:Solaris、Linux、Windows、FreeBSD
Tomcat:Linux、Windows、FreeBSD
3. 網(wǎng)際網(wǎng)路瀏覽器:
Mozilla Firefox:Linux、FreeBSD、Solaris、AIX、Windows、
可在不同作業(yè)系統(tǒng)上進(jìn)行軟體開(kāi)發(fā)的程式語(yǔ)言
C語(yǔ)言、C++、Java
Perl、Tcl、Erlang
Python、Delphi+Kylix、REALbasic
開(kāi)發(fā)java應(yīng)用的跨平臺(tái),包含五方面的內(nèi)容:
一、跨應(yīng)用服務(wù)器
二、跨數(shù)據(jù)庫(kù)
三、跨操作系統(tǒng)
四、跨瀏覽器
五、多語(yǔ)言支持
下面分別來(lái)說(shuō)一下。
■跨應(yīng)用服務(wù)器
這一點(diǎn),看起來(lái)好像有些多余,java的口號(hào)之一不就是“一次編譯,到外運(yùn)行”嘛,可實(shí)際經(jīng)驗(yàn)告訴我們,這僅僅是一個(gè)口號(hào)而已。實(shí)際中是“一次編譯,到處調(diào)試”。為什么會(huì)這樣?從應(yīng)用服務(wù)器來(lái)說(shuō),各個(gè)產(chǎn)品或多或少都在標(biāo)準(zhǔn)的java規(guī)范之上進(jìn)行了一些拓展,小規(guī)模的應(yīng)用開(kāi)發(fā),多以tomcat為基準(zhǔn);大規(guī)模的應(yīng)用,多以weblogic/websphere為基準(zhǔn)。
那么開(kāi)發(fā)完成的應(yīng)用,可否在所有的應(yīng)用服務(wù)器上正常部署呢?答案是否定的。在tomcat5上部署沒(méi)問(wèn)題,在tomcat4上卻可能有問(wèn)題;在tomcat5/4上沒(méi)問(wèn)題,卻可能在resin/jetty/weblogic/websphere上有問(wèn)題。在我的經(jīng)歷中,在resin/jetty/weblogic為基準(zhǔn)進(jìn)行開(kāi)發(fā)的應(yīng)用,部署到tomcat上基本上沒(méi)什么問(wèn)題。但是以tomcat為基準(zhǔn)的應(yīng)用,部署到其他應(yīng)用服務(wù)器中,卻可能出現(xiàn)各種各樣的問(wèn)題。這與tomcat本身的定位和開(kāi)發(fā)方式有關(guān),它更像是一個(gè)學(xué)術(shù)產(chǎn)品,而不是一個(gè)商業(yè)產(chǎn)品。
小型的應(yīng)用,我偏好resin,它的速度、穩(wěn)定性、兼容性、中文處理,都是非常不錯(cuò)的。相比而言,以“純java、快速”著稱的jetty,就不太令人滿意。jetty的4/5/6各個(gè)版本中,對(duì)session的存放位置、web.xml的標(biāo)準(zhǔn)、struts的plugin的支持、log4j的處理,都各不相同。在最新的jetty6中,竟然會(huì)要命地“不能使用session.validate()”方法,一使用此方法之后,就無(wú)法再使用set/getAttribute了。
也曾經(jīng)在將一個(gè)應(yīng)用轉(zhuǎn)移到websphere5上時(shí),費(fèi)勁周折。這個(gè)應(yīng)用跑在其他應(yīng)用服務(wù)器上都沒(méi)問(wèn)題,但是一部署到ws5上,就無(wú)法正常加載struts的配置文件。本以為是struts配置文件寫(xiě)得有問(wèn)題,但即便把所有的action/form配置均去掉,只保留一個(gè)空的配置文件,也無(wú)法正常啟動(dòng)。最后實(shí)在無(wú)法,只能亂碰運(yùn)氣,考慮是否是struts的幾個(gè)jar包版本有問(wèn)題,經(jīng)檢查,發(fā)現(xiàn)應(yīng)用中使用的是struts1.2的jar包,換成struts1.1的jar包,再啟動(dòng)后就一切正常。這樣的問(wèn)題,可真的是折磨人呢。
所以,我認(rèn)為跨應(yīng)用服務(wù)器是很重要的。你不能告訴客戶,俺們的系統(tǒng)只能跑在tomcat下面,至于您花重金購(gòu)買(mǎi)的weblogic/websphere,對(duì)不起,我們暫時(shí)還不支持??蛻魰?huì)吐血的。
■跨數(shù)據(jù)庫(kù)
經(jīng)??吹侥炒蠊井a(chǎn)品,要求必須使用oracle或者sqlserver數(shù)據(jù)庫(kù),你想換個(gè)數(shù)據(jù)庫(kù)來(lái)部署?沒(méi)門(mén),人家說(shuō)了,我們的產(chǎn)品只支持這一種數(shù)據(jù)庫(kù),你就老實(shí)的用吧。但對(duì)于客戶方來(lái)說(shuō),為了減少投資,并且保證內(nèi)部系統(tǒng)盡可能使用同一種數(shù)據(jù)庫(kù)以減少維護(hù)成本(總不能請(qǐng)一個(gè)oracle DBA,再請(qǐng)一個(gè)sqlserver DBA吧?),總會(huì)希望新系統(tǒng)使用的數(shù)據(jù)庫(kù)是以前用過(guò)的吧。
現(xiàn)在有了hibernate,在此基礎(chǔ)上開(kāi)發(fā)的應(yīng)用,基本上是能滿足跨數(shù)據(jù)庫(kù)要求的,個(gè)人認(rèn)為這是hibernate最大的亮點(diǎn)。但也要注意,在開(kāi)發(fā)中盡可能考慮到不同數(shù)據(jù)庫(kù)的特性。諸如sqlserver的text/image字段上不能查distinct,oracle內(nèi)的各種對(duì)象名稱長(zhǎng)度不得超過(guò)30等,盡量不要調(diào)用數(shù)據(jù)庫(kù)的內(nèi)部特性(如存儲(chǔ)過(guò)程、視圖等)
■跨操作系統(tǒng)
這一點(diǎn),貌似沒(méi)有什么可說(shuō)的,很少有開(kāi)發(fā)出的系統(tǒng)只能部署在一種操作系統(tǒng)上的。不過(guò)有一點(diǎn)也要注意,如果系統(tǒng)中某些功能依賴于通過(guò)JNI來(lái)調(diào)用windows本地組件的話,比如打印、word/excel操作,或與只能運(yùn)行在windows下的報(bào)表組件(如國(guó)內(nèi)的數(shù)巨報(bào)表、如意報(bào)表)集成的話。
■跨瀏覽器
竊以為,如果只是做國(guó)內(nèi)的應(yīng)用,這一點(diǎn)倒不重要,就以IE為標(biāo)準(zhǔn)來(lái)開(kāi)發(fā)也未嘗不可。
PS:完全支持IE也不是一件容易的事情,IE5/6本身就有不少的差異。
但如果產(chǎn)品本身想立足于世界,想與國(guó)外產(chǎn)品競(jìng)爭(zhēng),對(duì)瀏覽器的全面支持也必不可少。至少應(yīng)該同時(shí)支持ie和firefox吧,如果對(duì)自身嚴(yán)格要求的話,我認(rèn)為應(yīng)以opera為標(biāo)準(zhǔn),opera對(duì)html/css/javascript的標(biāo)準(zhǔn)是實(shí)現(xiàn)和支持得最好的瀏覽器。
■多語(yǔ)言支持
如果您的產(chǎn)品只想在中國(guó)賣(mài),根本就不考慮世界市場(chǎng),那這一條就pass好了。
Java程序跨平臺(tái)需要注意什么
使用Java語(yǔ)言編寫(xiě)應(yīng)用程序最大的優(yōu)點(diǎn)在于“一次編譯,處處運(yùn)行”,然而這并不是說(shuō)所有的Java程序都具有跨平臺(tái)的特性,事實(shí)上,相當(dāng)一部分的Java程序是不能在別的操作系統(tǒng)上正確運(yùn)行的,那么如何才能編寫(xiě)一個(gè)真正的跨平臺(tái)的Java程序呢?下面是在編寫(xiě)跨平臺(tái)的Java程序是需要注意的一些事情:
1.編寫(xiě)Java跨平臺(tái)應(yīng)用程序時(shí),你可以選擇JDK1.0,1.1,1.2或支持它們的GUI開(kāi)發(fā)工具如:Jbuilder,VisualAgeforJava等等,但是必須注意你的Java程序只能使用Java核心API包,如果要使用第三方的類庫(kù)包,則該類庫(kù)包也要由Java核心包開(kāi)發(fā)完成,否則在發(fā)布你的程序的時(shí)候還得將支持該Java類庫(kù)包的JVM發(fā)布出去。也就是說(shuō),你的程序需要是100%純Java的。舉一個(gè)例子,VisualJ++就不是純Java的,由VisualJ++編寫(xiě)的程序也就不具有平臺(tái)無(wú)關(guān)性。
2.無(wú)論你使用的是JDK或其他開(kāi)發(fā)工具,在編譯時(shí)都要打開(kāi)所有的警告選項(xiàng),這樣編譯器可以盡可能多的發(fā)現(xiàn)平臺(tái)相關(guān)的語(yǔ)句,并給出警告。雖然不能保證沒(méi)有編譯時(shí)警告錯(cuò)誤的程序一定是跨平臺(tái)的,但含有警告錯(cuò)誤的程序卻很有可能是非平臺(tái)無(wú)關(guān)的。
3.在程序中使用任何一個(gè)方法的時(shí)候,要詳細(xì)察看文檔,確保你使用的方法不是在文檔中已經(jīng)申明為過(guò)時(shí)的方法(Deprecatedmethod),也不是文檔中未標(biāo)明的隱含方法(Undocumentedmethod)。
4.退出Java程序時(shí)盡量不要使用java.lang.System的exit方法。Exit方法可以終止JVM,從而終止程序,但如果同時(shí)運(yùn)行了另一個(gè)Java程序,使用exit方法就會(huì)讓該程序也關(guān)閉,這顯然不是我們希望看到的情況。事實(shí)上要退出Java程序,可以使用destory()退出一個(gè)獨(dú)立運(yùn)行的過(guò)程。對(duì)于多線程程序,必須要關(guān)閉各個(gè)非守護(hù)線程。只有在程序非正常退出時(shí),才使用exit方法退出程序。
5.避免使用本地方法和本地代碼,盡可能自己編寫(xiě)具有相應(yīng)功能的Java類,改寫(xiě)該方法。如果一定要使用該本地方法,可以編寫(xiě)一個(gè)服務(wù)器程序調(diào)用該方法,然后將現(xiàn)在要編寫(xiě)的程序作為該服務(wù)器程序的客戶程序,或者考慮CORBA(公共對(duì)象請(qǐng)求代理)程序結(jié)構(gòu)。
6.Java中有一個(gè)類似于Delphi中的winexec的方法,java.lang.runtime類的exec方法,作為該方法本身是具有平臺(tái)無(wú)關(guān)性的,但是給方法所調(diào)用的命令及命令參數(shù)卻是與平臺(tái)相關(guān)的,因此,在編寫(xiě)程序時(shí)要避免使用,如果一定要調(diào)用其他的程序的話,必須要讓用戶自己來(lái)設(shè)置該命令及其參數(shù)。比如說(shuō),在windows中可以調(diào)用notepad.exe程序,在linux中就要調(diào)用vi程序了。
7.程序設(shè)計(jì)中的所有的信息都要使用ASCII碼字符集,因?yàn)椴⒉皇撬械牟僮飨到y(tǒng)都支持Unicode字符集,這對(duì)于跨平臺(tái)的Java中文軟件程序不能不說(shuō)是一大噩耗。
8.在程序中不要硬性編碼與平臺(tái)相關(guān)的任何常量,比如行分隔符,文件分隔符,路徑分隔符等等,這些常量在不同的平臺(tái)上是不同的,比如文件分隔符,在UNIX和MAC中是“/”,在windows中是“\”,如果要使用這些常量,需要使用jdava.util.Properties類的getProperty方法,如java.util.Properties.getProperty(“file.separator”)可以獲得文件分隔符,getProperty(“l(fā)ine.separator”)返回行分隔符,getProperty(“path.separator”)返回路徑分隔符。
9.在編寫(xiě)跨平臺(tái)的網(wǎng)絡(luò)程序時(shí),不要使用java.net.InetAddress類的getHostName方法得到主機(jī)名,因?yàn)椴煌钠脚_(tái)的主機(jī)名格式是不同的,最好使用getAddress得到格式相同的IP地址,另外,程序中所有的主機(jī)名都要換成IP地址,比如就要換成相應(yīng)的IP地址。
10.涉及文件操作的程序需要注意:不要在程序中硬性編碼文件路徑,理由和8中一樣,只是這一點(diǎn)特別重要,因此單獨(dú)提出。而且,不同平臺(tái)對(duì)于文件名使用的字符及最大文件名長(zhǎng)度的要求不同,編寫(xiě)你的程序的時(shí)候要使用一般的ASCII碼字符作為文件的名字,而且不能與平臺(tái)中已存在的程序同名,否則會(huì)造成沖突。
11.如果您寫(xiě)的程序是GUI程序,在使用AWT組件時(shí)不能硬性設(shè)置組件的大小和位置而應(yīng)該使用Java的布局管理器(layoutmanager)來(lái)設(shè)置和管理可視組件的大小和位置,否則有可能造成布局混亂。
12.由于不同的操作系統(tǒng),不同的機(jī)器,系統(tǒng)支持的顏色和屏幕的大小和分辨率都不同,如何獲得這些屬性呢?使用java.awt.Systemcolor類可以獲得需要的顏色,如該類的inactiveCaption就是窗口邊框中活動(dòng)標(biāo)題的背景顏色,menu則是菜單的背景顏色。使用java.awt.Toolkit的getScreenResolution可以以“象素每英寸”為單位顯示屏幕的分辨率。該類的getScreenSize可以得到屏幕大小(英寸),loadSystemColors可以列出所有的系統(tǒng)顏色。
你可以在安卓下載java模擬器,如果你懂這些語(yǔ)言,可以看看模擬器的原理和數(shù)據(jù),如果用電腦,可以下載電腦用java模擬器和安卓模擬器,這里面都有系統(tǒng)的數(shù)據(jù)的,如果你想同時(shí)可以運(yùn)行,你可以把他們的原理看懂,在和起來(lái)。
sqlserver算是微軟的親兒子吧,但是它一開(kāi)始其實(shí)是由sybase開(kāi)發(fā)的。為了跟IBM競(jìng)爭(zhēng)微軟最初與sybase合作推出MSSQLSERVER,后來(lái)雙方分家,sqlserver6.0及后續(xù)版本均由微軟自己獨(dú)力開(kāi)發(fā),從這時(shí)開(kāi)始它便成為微軟真正意義上的親兒子了。sqlserver其性能的確強(qiáng)大,但是價(jià)格不菲,還有它只適用于微軟自家的windows平臺(tái)而不像其它數(shù)據(jù)庫(kù)管理系統(tǒng)如oracle、mysql那樣可跨平臺(tái)使用。
你可以在你php的server里面嘗試用shell遠(yuǎn)程連接你的SQLserver。一般這些是兩個(gè)問(wèn)題,要么是你遠(yuǎn)程SQLserver沒(méi)有開(kāi)端口,所有不能訪問(wèn)你SQLserver,或者是你mysql沒(méi)有開(kāi)啟遠(yuǎn)程連接。
新聞名稱:sqlserver跨平臺(tái),sqlserver跨網(wǎng)段訪問(wèn)
文章轉(zhuǎn)載:http://sd-ha.com/article0/dsecdio.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)頁(yè)設(shè)計(jì)公司、Google、做網(wǎng)站、網(wǎng)站設(shè)計(jì)、定制網(wǎng)站、商城網(wǎng)站
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容