1. 微服務跨語言調用(摘選)
微服務架構已成為目前互聯網架構的趨勢,關於微服務的討論,幾乎占據了各種技術大會的絕大多數版面。國內使用最多的服務治理框架非阿里開源的 bbo 莫屬,千米網也選擇了 bbo 作為微服務治理框架。另一方面,和大多數互聯網公司一樣,千米的開發語言是多樣的,大多數後端業務由 java 支撐,而每個業務線有各自開發語言的選擇權,便出現了 nodejs,python,go 多語言調用的問題。
跨語言調用是一個很大的話題,也是一個很有挑戰的技術活,目前業界經常被提及的解決方案有如下幾種,不妨拿出來老生常談一番:
當我們再聊跨語言調用時我們在聊什麼?縱觀上述幾個較為通用,成熟的解決方案,可以得出結論:解決跨語言調用的思路無非是兩種:
如果一個新型的團隊面臨技術選型,我認為上述的方案都可以納入參考,可考慮到遺留系統的兼容性問題
舊系統的遷移成本
這也關鍵的選型因素。我們做出的第一個嘗試,便是在 RPC 協議上下功夫。
通用協議的跨語言支持
springmvc的美好時代
springmvc
springmvc
在沒有實現真正的跨語言調用之前,想要實現「跨語言」大多數方案是使用 http 協議做一層轉換,最常見的手段莫過於藉助 springmvc 提供的 controller/restController,間接調用 bbo provider。這種方案的優勢和劣勢顯而易見
通用協議的支持
事實上,大多數服務治理框架都支持多種協議,bbo 框架除默認的 bbo 協議之外,還有當當網擴展的 rest協議和千米網擴展的 json-rpc 協議可供選擇。這兩者都是通用的跨語言協議。
rest 協議為滿足 JAX-RS 2.0 標准規范,在開發過程中引入了 @Path,@POST,@GET 等註解,習慣於編寫傳統 rpc 介面的人可能不太習慣 rest 風格的 rpc 介面。一方面這樣會影響開發體驗,另一方面,獨樹一幟的介面風格使得它與其他協議不太兼容,舊介面的共生和遷移都無法實現。如果沒有遺留系統,rest 協議無疑是跨語言方案最簡易的實現,絕大多數語言支持 rest 協議。
和 rest 協議類似,json-rpc 的實現也是文本序列化&http 協議。bbox 在 restful 介面上已經做出了嘗試,但是 rest 架構和 bbo 原有的 rpc 架構是有區別的,rest 架構需要對資源(Resources)進行定義, 需要用到 http 協議的基本操作 GET、POST、PUT、DELETE。在我們看來,restful 更合適互聯網系統之間的調用,而 rpc 更適合一個系統內的調用。使用 json-rpc 協議使得舊介面得以兼顧,開發習慣仍舊保留,同時獲得了跨語言的能力。
千米網在早期實踐中採用了 json-rpc 作為 bbo 的跨語言協議實現,並開源了基於 json-rpc 協議下的 python 客戶端 bbo-client-py 和 node 客戶端 bbo-node-client,使用 python 和 nodejs 的小夥伴可以藉助於它們直接調用 bbo-provider-java 提供的 rpc 服務。系統中大多數 java 服務之間的互相調用還是以 bbo 協議為主,考慮到新舊協議的適配,在不影響原有服務的基礎上,我們配置了雙協議。
bbo 協議主要支持 java 間的相互調用,適配老介面;json-rpc 協議主要支持異構語言的調用。
定製協議的跨語言支持
微服務框架所謂的協議(protocol)可以簡單理解為:報文格式和序列化方案。服務治理框架一般都提供了眾多的協議配置項供使用者選擇,除去上述兩種通用協議,還存在一些定製化的協議,如 bbo 框架的默認協議:bbo 協議以及 motan 框架提供的跨語言協議:motan2。
motan2協議的跨語言支持
motan2
motan2
motan2 協議被設計用來滿足跨語言的需求主要體現在兩個細節中—MetaData 和 motan-go。在最初的 motan 協議中,協議報文僅由 Header+Body 組成,這樣導致 path,param,group 等存儲在 Body 中的數據需要反序列得到,這對異構語言來說是很不友好的,所以在 motan2 中修改了協議的組成;weibo 開源了 motan-go ,motan-php ,motan-openresty ,並藉助於 motan-go 充當了 agent 這一翻譯官的角色,使用 simple 序列化方案來序列化協議報文的 Body 部分(simple 序列化是一種較弱的序列化方案)。
agent
agent
仔細揣摩下可以發現這么做和雙協議的配置區別並不是大,只不過這里的 agent 是隱式存在的,與主服務共生。明顯的區別在於 agent 方案中異構語言並不直接交互。
bbo協議的跨語言支持
bbo 協議設計之初只考慮到了常規的 rpc 調用場景,它並不是為跨語言而設計,但跨語言支持從來不是只有支持、不支持兩種選擇,而是要按難易程度來劃分。是的,bbo 協議的跨語言調用可能並不好做,但並非無法實現。千米網便實現了這一點,nodejs 構建的前端業務是異構語言的主戰場,最終實現了 bbo2.js,打通了 nodejs 和原生 bbo 協議。作為本文第二部分的核心內容,重點介紹下我們使用 bbo2.js 幹了什麼事。
Dubbo協議報文格式
bbo協議
bbo協議
bbo協議報文消息頭詳解:
magic:類似java位元組碼文件里的魔數,用來判斷是不是 bbo 協議的數據包。魔數是常量 0xdabb
flag:標志位, 一共8個地址位。低四位用來表示消息體數據用的序列化工具的類型(默認 hessian),高四位中,第一位為 1 表示是 request 請求,第二位為 1 表示雙向傳輸(即有返回 response),第三位為 1 表示是心跳 ping 事件。
status:狀態位, 設置請求響應狀態,bbo 定義了一些響應的類型。具體類型見com.alibaba.bbo.remoting.exchange.Response
invoke id:消息 id, long 類型。每一個請求的唯一識別 id(由於採用非同步通訊的方式,用來把請求 request 和返回的 response 對應上)
body length:消息體 body 長度, int 類型,即記錄 Body Content 有多少個位元組
body content:請求參數,響應參數的抽象序列化之後存儲於此。
協議報文最終都會變成位元組,使用 tcp 傳輸,任何語言只要支持網路模塊,有類似 Socket 之類的封裝,那麼通信就不成問題。那,跨語言難在哪兒?以其他語言調用 java 來說,主要有兩個難點:
ps:bbo 協議通訊demo( https://github.com/lexburner/Dubbojs-Learning )
2. 為什麼大型網站前端使用 PHP 後台邏輯用 Java
最近糾結了一下,如果開發一個大型的網站,我到底應該使用php還是jsp,後台到底使用php還是用java,我的選擇要麼是php要麼是java,因為我喜歡linux、unix,當然window平台也必須支持,以便哦的妹紙可以查看。這就要求用一些跨平台相當好的軟體+工具+語言,所以選擇只能是這么幾個。最後我的決定是php+java,一個前台一個後台,理由如下: php和java在開源社區的活躍度嚴重超過了其他的語言,使用人數也都是相當之多;活躍的開發工程師們能夠給我幫助,且這倆都能很好的跨平台,不用花費大量的人力物力去維護 我也做過一個物聯網的網關網站,比較復雜,當時採用的是jsp+java,復雜程度可想而知,單單說開發過程,網站部分繁瑣,每次想查看結果運行網站的時候還需要重新打包部署一下,嚴重影響了哦的開發效率,每天的時間都是在等待(因為網站比較復雜,打包部署需要浪費一些時間)。相對來說呢,php就沒有了,php靈活,好學,上手快,容易悶態慎修改,容易發布,關鍵是熱部署,這個真讓哦眼睛大亮。當然看待任何事物都需要兩種眼光,php也會有缺點,比如沒有太好的開發IDE,所以拼寫錯誤很正常,且php的sql注入危螞敬險較大點,執行效率不高,安全性不如java。還有一些理由,來自知乎的米米們給的建議: Java的優點則是穩定可靠、運行效率高(尤其是JIT的出現之後差距更大了)、不容易犯錯(強類型、預編譯、必須攔截異常等等),缺點是開發和發布的效率相對較低。盡管優秀的工程師能在一定程度上改變以上的問題,但通常而言,哪能到處都是高手多如狗的夢之隊? 從MVC的層次結構上說,在一般網站項目的開發周期中,需求變更最頻繁、調整最多的是View,其次是Controller,最後是Model。這非常好理解,沒事干誰天天改數據結構?每次版本升級控制結構都要改的啦,或多或少而已。再次是兩者之間的通信,目前RPC技術已經足夠成熟,無論是Web Service/Hessian/RESTful API都能夠讓開發人員專注在功能開發上,而不需要過多的考慮異構平台的差異和通訊的細節。這也就意味著在大公司里同時應用兩種語言的方案並不會引入過多的復雜度和工作量。當然,文檔量的下限倒是因此被拔高了不少,但事實上大部分團隊對此其實都是喜聞樂見的:別每天說文檔重要但沒空了,你不寫其他同事怎麼配合? 靠近用戶的前端,使用PHP能夠更快的完成前端頻繁而瑣碎的更新,自如的應對各種需求的變化。頁面的結構調整、用戶輸入內容的基本驗證、僅只和用戶交互有關的簡單邏輯等都很適合使用PHP來開發,甚至可以通過類似Smarty等模板技術將其頁面的變動遷移到前端團隊。而基本的業務邏輯和數據的更新採用Java開發,可以有效的提高復用度、提升性能和吞吐能力、規避安全問題等。而開發效率稍有降低換來的是可維護性的提升,發布速度慢就更不是問題了,因為通常對於基礎業務邏輯的調整往往都是整體修改,並層層測試確認才能發布的。 所以,大型網站前端採用PHP後端採用Java,既好招人又好維護、系統穩定還性能高、連安全性都大大增加。代碼復用、文檔完備度居然也都改善了。讓你在以上這些好處觸手可及時,對架構師知識譜系在廣度上要求更高一些這事根本就不是個問題。
單一方案其實一樣可以做良好的隔離,PHP同樣可以提供Service,而性能問題其實很多時候是演算法和架構的問題而不是語言差異的問題。如Velocity或JSTL等也是很優秀的隔離方案。
但這些方案在高壓力下會暴露出很多問題而體現雙語言的優勢,這些在上面其實都提到,詳細說明一些很難得到改變的點:
1. PHP由於其動態腳本語言的特性,包括類、函數、常量在內都需要在每次請求周期中重復執行後才能建立運行環境;為了保證解析速度而犧牲編譯質量;應用了FastCGI但僅僅只是復用進程處理請求減少fork成本而不是像其他語言,初始化完畢後通過FastCGI的介面獲得數據並以對應介面返回數據等幾個原因,基本上已經不可能在性能上追回當初更爛現在開著JIT牌跑車的Java了。
2. 在PHP里是如此的容易犯錯而難以發現,即使你用實質上出自官方的閉逗Zend Studio,也無法改變一個事實:要保證你的程序高質量無大錯,得要有充足的經驗、足夠的嚴謹、以及——負責任的QA。淘寶的黃裳就曾經拿IDE這事開過玩笑。而玩笑背後的那個原因「缺乏中間件」最近幾年有不少的改善,主要是不少中間件的支持變得更廣泛了從而讓PHP得益,但發展的根源其實還是在C和Java社區。性能和易犯錯則是語言特性造成的技術難點,也是用來換取靈活、快捷的必要代價,很難去指望有根本的改善。
3. Java的世界裡也有JSTL、Velocity和Freemaker等,但和PHP靈活而強大的動態能力、豐富的函數和類庫、輕松的學習成本、多到令人發指的文檔相比,簡直就是渣,就是渣啊!JSTL改完了要重啟Context啊有木有?Velocity不關緩存也要重啟啊有木有?Velocity開緩存性能低下啊有木有?即使這些都不管,調整下某個數據校驗規則要改Action也要重啟有木有?
實際工作中性能問題可以通過良好的架構解決,容易犯錯的問題可以通過框架和規范以及全面的測試來解決,中間件選擇少些但其實該有的都有了,Java的靈活性一樣有不少可供考慮的解決方案哪怕是挫得要死的摘掉節點重啟,完成後重新上節點的策略。
所以,大家會看到單一語言的技術團隊也很多,這個問題的真正考慮還是更多在團隊自身的特點、積累等等。用了雙語言的,也知道自己為什麼要用這些,不用的也清楚自己的路該怎麼走。最後的最後說一句:如果你不知道自己為什麼要用雙語言方案的話,基本上你也就不需要考慮它了
3. 什麼是PHP,PHP能幹什麼,為什麼使用PHP
在學習任何東西之前,我們都得了解這門東西究竟是什麼,有什麼用。學習PHP一樣如此。
一、什麼是PHP
PHP,全稱 Hypertext Preprocessor ,中文翻譯「超文字前處理器」。
在PHP的官網是這樣介紹PHP的:
PHP is a popular general-purpose scripting language that is especially suited to web development.
Fast, flexible and pragmatic, PHP powers everything from your blog to the most popular websites in the world.
照顧英文能力較差的同學,以下為中文版
PHP是一種被廣泛應用的開源通用指令碼語言,尤其適用於 Web 開發。
擁有快速,靈活,實用的特點,PHP能做任何事,包括你的個人部落格甚至是全球性的大型站點系統。
PHP核心由C開發,因此在語法上跟C有不少相似之處。但PHP絕對不是C。
PHP語法除了跟C有相似之處外,還跟Java、Perl比較流行的程式語言存在相似的地方。因此,如果你有上述語言基礎,PHP入門會更加快速。
二、PHP能幹什麼
PHP能幹任何事!
PHP能直接嵌入HTML語言中,與HTML混編。PHP開發的目的主要是允許 web 開發人員快速編寫動態生成的 web 頁面,但 PHP 的用途遠不只於此。
PHP還包含了命令列執行介面(mand line interface),和產生圖形使用者介面(GUI)程式。
PHP能幹任何事!
PHP能幹任何事!
PHP能幹任何事!
重要的事情要說3遍!
三、為什麼選擇PHP
1、PHP開源免費,沒有任何收費的專案。你可以隨便修改他的核心然後用於自己的商業使用。
2.、PHP開發元件豐富(對於新手來說一堆IDE也是夠選擇困難症糾結的)
3、社群成熟,85%以上的問題能在社群找到相應的解決思路。
4、PHP學習成本低,不想某門語言要學就得三件套。見效快,學1個月基本能入門
5、開源庫豐富,基本所有型別均有開源產品
6、PHP7.0基本不輸任何一門語言~!這是重點
7、與MySQL近乎完美的支援
8、找工作容易
9、連Facebook都在用php,你還什麼理由不用?
利用PHP技術應用而開發的網頁自動生成工具,不僅可以作為自助建站的平台,同時也可以作為網站管理系統。它的資料更新很大程度上能滿足使用者的"個性化需求",即在內容上和風格上接近使用者所想,該系統完全圖形視覺化,即使不懂製作網頁的專門技術,不懂HTML語言,通過對該系統中如欄目、模板設定、網站關鍵字、功能模組等進行引數設定,使用者也可以用它輕松地製作出千變萬化、色彩豐富的網站。
為什麼使用 PHP?
PHP 運行於各種平台(Windows, Linux, Unix, Mac OS X 等等)
PHP 相容幾乎所有伺服器(Apache, IIS 等等)
PHP 支援多種資料庫
PHP 是免費的。請從官方 PHP 資源下載:php.
PHP 易於學習,並可高效地執行在伺服器端
1使用array_map可以簡單搞定PHP刪除檔案、刪除目錄
2.具體程式碼如下:
?php
刪除目錄下所有空目錄
array_map('rmdir', glob('*', GLOB_ONLYDIR));
刪除目錄所有檔案
array_map('unlink', array_filter(glob('*'), 'is_file'));
3.$data = array(
array(
'a' => 'first a',
'b' => 'first b'
),
array(
'a' => 'second a',
'b' => 'second b'
)
);
$array_column = array_map(function($element){
return $element['a'];
}, $data);
print_r($array_column);
PHP是一種HTML內嵌式的在伺服器端執行的指令碼語言,所以大部分PHP開發出來的Web應用,初始的開發模板就是混合層的資料程式設計。雖然通過MVC設計模式可以把程式應用邏輯與網頁呈現邏輯強制性分離,但也只是將應用程式的輸入、處理和輸出分開,網頁呈現邏輯(檢視)還會有HTML程式碼和PHP程式強耦合在一起。
你是初學者吧。我開始學的時候也是這樣。不知道這個是幹嘛的,我哥哥當時拉我一起去了北京的兄弟連,當時和我一樣不知道這個是幹嘛的人很多,但是我真心不想告訴你,我現在一個月有5K以上的工資。
php是程式語言,做網站,做程式都可以,不過它做網站能發揮它的長處,應用程式的話呢還是用Java、.好些
這個應用可以使用JavaConfig完成配置。我把它切分為下面幾個部分:
ServicesConfig(服務配置)
無需掃描元件,配置真的非常簡單:
@Configuration
public class ServicesConfig {
@Autowired
private AountRepository aountRepository;
@Bean
public UserService userService() {
return new UserService(aountRepository);
}
1、在配置檔案/usr/local/php/etc/php-fpm.conf檔案中找到
<value name= "listen_address">127.0.0.1:9000</value>
改為
<value name=listen_address> /var/run/phpfpm.sock</value>
重啟php-fpm
/usr/local/php/ *** in/php-fpm restart
2、配置nginx
在/usr/local/nginx/conf/nginx.conf中找到
fastcgi_pass 127.0.0.1:9000;
改為
fastcgi_pass unix:/var/run/phpfpm.sock;
重啟nginx
/usr/local/nginx/ *** in/nginx -s reload
試試吧我剛在後盾網問的講師相關知識,我加上自己的理解,希望能幫到你(づ ●─● )づ
mb打頭的函式,都最新新增的,好多要求php5版本
處理速度能更快,功能更強大一些
但也有一些預設是未被開啟
沒有非說得用mb函式的說法,合適的就是最好的
比如說mb_substr用來擷取中文時不會把一個漢字截斷的現象
substr更適合擷取英文內容
但php預設是不支援的,需要在配置中解開
;extension=php_mbstring.dll
4. 現在開發網站,好像都是流行用php,那java web一般用在哪裡呢它們之間的區別和優劣勢在哪裡呢
現在市場上的oa基本上可歸結為兩大陣營,即php陣營和java陣營。但對接觸oa不久的用戶來說,看到的往往只是它們的表相,只是明顯的價格差異,卻很難看出它們之間的實際差異。其實, PHP + MYSQL 不值錢不僅僅局限於oa軟體,而是整體上PHP + MYSQL開發的軟體都不如java開發的軟體值錢。為什麼PHP + MYSQL 的OA為什麼不值錢呢?首先得明白php和java之間的差異才行。
1、系統的技術架構比較
分層是將系統進行有效組織的方式,分而治之的思想是計算機領域中非常重要的思想。在好的分層思想引導下,便能實現「高內聚、低耦合」,也能將具體的問題割裂開來,易於控制、易於延展,更易於分配資源。PHP只能實現簡單的分布式兩層或三層的架構,而JAVA在這方面就十分強大,可以實現多層的網路架構。運用MVC的設計模式,可使oa系統具有更加高效、合理的系統架構。技術架構的落後,使運用php編寫的oa軟體系統先天不足,而後天又無法補足其先天上的劣勢。使得系統在可拓展性、需求應變性上與JAVA編寫的oa軟體系統的差距越來越大。架構的差距,註定了php做的oa充其量是個小家碧玉,始終無法和java這種大家閨秀同台競技。
2、資料庫訪問比較
PHP可編譯成具有與許多資料庫相連接的函數。將自己編寫外圍的函數去間接存取資料庫。通過這樣的途徑當更換使用的資料庫時,可以輕松地修改編碼以適應這樣的變化。但PHP提供的資料庫介面支持彼此不統一,比如對Oracle, MySQL,Sybase的介面,彼此都不一樣。由於PHP對於不同的資料庫採用不同的資料庫訪問介面,所以資料庫訪問代碼的通用性不強。
而Java通過JDBC來訪問資料庫,通過不同的資料庫廠商提供的資料庫驅動方便地訪問資料庫,訪問資料庫的介面比較統一。如果同樣是將開發的web應用從MYSQL數據數轉到ORACLE數據,PHP需要做大量的修改工作,而且比較繁瑣。但JAVA開發的便只需要很少的更改便能實現。
資料庫訪問方式的差異,奠定了php開發出的oa和java開發出來的oa是馬車和火車的差距,前者只能亦步亦趨而且額度有限,後者卻是工業化的結晶,不僅能夠包容萬物而且速度上穩步提升。
3、安全性對比
在同是開源和跨平台的java面前,php丟掉了很多的優勢。在代碼的安全性上尤為突出。php的開發程序在別人拿到代碼後,可以很容易的進行修改。而java開發的程序由於無法看到完整的源代碼,只能看到一些編譯好的類文件,所以安全性較高。加之系統架構的優勢,在安全性上php和java是相去甚遠。
如果非要將php和java在安全性上做個比較的話,同一個小偷光顧php那是隨便拿來隨便改,想拿什麼拿什麼,拿的高興還能大筆一輝某某到此一游。而光顧java的時候,便會發現警察把守,內設自動報警裝置,即便突破重重阻擾後進入居室。那值錢的東西都放在加密後的保險櫃中,只能望洋興嘆、鎩羽而歸。
4、前瞻性和拓展性
從整體來說,php適用於中小型系統,而java適用於大型系統。Php能夠將單一的事件做好,但卻不適合完成集成度較高的多項並發事件。為什麼說php適合中小型系統而不適合做大系統呢?
首先, php缺乏多層結構支持。而對於大型的系統負荷站點,只能採用分布計算。將資料庫、應用邏輯層和表示邏輯層彼此分開,並將同層的根據流量分開,組成二維數組。而php恰恰缺乏這種支持。
其次,PHP提供的資料庫介面不統一,要將多個不同的資料庫數據統一需要花費很大的力氣。而JAVA則沒有這種缺陷,可通過SUN Java的Java Class和EJB獲得規模支持,通過EJB/CORBA以及眾多廠商的Application Server獲得結構支持。如IBM的E-business,它的核心是採用JSP/Servlet的Web Sphere,是通過CGI來提供支持的。
如果將Php比作將才,具備獨擋一方的能力。那麼java便是帥才,具有較好的前瞻性和拓展性,整體布局和協同能力強。能夠指揮千軍萬馬,最後逐鹿中原。
5、開發成本比較
既然php在諸多方面都不如java優異,那麼php開發出的oa產品何以與java產品競爭呢?在於Php陣營普遍走的是低端路線,而java陣營走的是中高端路線。兩者之間交*的區域較小。
軟體價格的高低很大程度上和自身成本和功能相掛鉤。php的入門門檻較低,絕大多數學過c的程序員都很容易轉型為php程序員,這使得php程序員的泛濫成災的同時,低成本的php軟體產品也層出不窮。以PHP最經典的組合PHP + MySQL + Apache為例,由於所有軟體都是開源免費的,所以投入並不高。
而java開發需要特定的環境,成長為一個合格的java程序員需要一定的時間,java程序員的成本也是php成本的幾倍。Java的web應用伺服器免費的有Tomcat、JBoss等,而要想具有很好的商業化服務便必須選用Web Sphere和 Web logic。這其中投入的成本無形中便超是php成本的N倍。所以,java開發oa的成本要遠遠高於php開發出來的同類軟體產品。但也正由於java開發的成本較高,很難實現抄襲和短期內逾越的可能,也使得java用開發出的產品門檻更高。
不怕不識貨,就怕貨比貨。Php開發出來的產品也能用,但是和java開出的同類產品是沒法比較的。正因為php開發的產品整體性能和java開發的相去甚遠,所以php運用低成本的低價優勢和同類的java產品抗爭,以價格落差來平衡購買者的心態。所以,PHP + MYSQL 的OA不值錢也就不足為怪了
第二種
比較PHP和JSP這兩個web開發技術,在目前的情況是其實是比較PHP和Java的Web開發。以下是我就幾個主要方面進行的比較:
一、 語言比較
Php是解釋執行的伺服器腳本語言,首先php有簡單容易上手的特點。語法和c語言比較象,所以學過c語言的程序員可以很快的熟悉php的開發。而java需要先學好java的語法和熟悉一些核心的類庫,懂得面向對象的程序設計方法。所以java不如php好學。
Java首先要編譯成位元組碼.class文件,然後在java虛擬機上解釋執行。Java的web開發首先最容易想到的就是JSP(現在已經到JSP2.0),原來的java的web開發都是用servlet來實現的,用servlet來開發需要程序員在java的源文件中嵌入大量的html代碼。所以後來就出現了JSP,JSP可以方便的嵌入到html文件當中,其實jsp文件在伺服器上執行的時候首先會被應用伺服器轉換成servlet,然後再編譯執行。Jsp可以通過servlet和JavaBean的支持產生強大的功能。JavaBean 是一種可復用的、跨平台的軟體組件。使用javabean可以方便的實現java代碼和html的分離,能夠增強系統的功能和軟體的復用性。
Java的web開發屬於SUN公司定義的J2EE其中的規范。而且在J2EE中包括了java的web開發的所有方面,如:JSP、Servlet、JDBC、JNDI、JAVABEAN、EJB等等。J2EE就特別適合於做大型的企業級的應用。
二、 資料庫訪問比較
Java通過JDBC來訪問資料庫,通過不同的資料庫廠商提供的資料庫驅動方便地訪問資料庫。訪問資料庫的介面比較統一。
PHP對於不同的資料庫採用不同的資料庫訪問介面,所以資料庫訪問代碼的通用性不強。例如:用Java開發的web應用從MySQL資料庫轉到Oracle資料庫只需要做很少的修改。而PHP則需要做大量的修改工作。
三、 系統設計架構比較
採用Java的web開發技術,需要使用的是面向對象的系統設計方法,而PHP還是採用面向過程的開發方法。所以用Java進行開發前期需要做大量的系統分析和設計的工作。
四、 跨平台性
Java和PHP都有很好的跨平台的特性。幾乎都可以在不作任何修改的情況下運行在Linux或者Windows等不同的操作系統上。
五、 開發成本比較
PHP最經典的組合就是:PHP + MySQL + Apache。非常適合開發中小型的web應用,開發的速度比較快。而且所有的軟體都是開源免費的,可以減少投入。
Java的web應用伺服器有免費Tomcat、JBoss等,如果需要更好的商業化的服務有:Web Sphere和 Web logic。
六、 分布式多層架構比較
PHP只能實現簡單的分布式兩層或三層的架構,而JAVA在這方面就比較強大,可以實現多層的網路架構。資料庫層(持久化層)、應用(業務)邏輯層、表示邏輯層彼此分開,而且現在不同的層都已經有一些成熟的開發框架的支持。例如Struts就是利用java的web開發技術實現了MVC的設計模式,而在業務邏輯層也有Spring框架,資料庫持久化層有Hibernate等框架。這些框架可以方便開發者高效、合理、科學得架構多層的商業應用。
下面簡要的說一下Struts,它實質上是在JSP Model2的基礎上實現的一個MVC(Model、View、Controler)框架。JSP Model2體系結構是一種聯合使用JSP 與Servlet 來提供動態內容的方法。在Struts框架中,模型由實現業務邏輯的JavaBean或EJB組件構成,控制器由Servlet實現的,視圖由一組JSP文件組成。採用Struts可以明確角色的定義和開發者與網頁設計者的分工。而且項目越復雜,其優勢越明顯。
七、 源代碼安全
PHP開發的程序的源代碼都是公開的,他人拿到php開發的程序後都可以進行修改。
Java開發的程序,最後用戶拿到的是只是一些編譯好的class類,無法看到完整的源代碼,安全性高。
八、性能比較
有人做過試驗,對這兩種種語言分別做迴圈性能測試及存取Oracle資料庫測試。
在循環性能測試中,JSP只用了令人吃驚的四秒鍾就結束了20000*20000的迴圈。而PHP測試的是2000*2000循環(少一個數量級),卻分別用了63秒。
資料庫測試中,二者分別對 Oracle 8 進行 1000 次 Insert,Update,Select和Delete: JSP 需要 13 秒,PHP 需要 69 秒。
表格 1 PHP 與Java的比較
PHP JAVA
可復用性 低 高
開發速度 快 慢
易維護性 差 優
可移植性 優-Linux、Windows、Unix等
安全性 低 高
開發費用 低 高
多層架構 差 優
資料庫訪問 介面不統一 介面統一
可擴展性 差 優
面向對象 差 優
綜上 PHP適合於快速開發,中小型應用系統,開發成本低,能夠對變動的需求作出快速的反應。而Java適合於開發大型的應用系統,應用的前景比較廣闊,系統易維護、可復用性較好。還有,同樣功能的系統用Java開發的系統要比PHP開發的系統的價格要高