前面提到的兩種技術(shù)不能流行是必然的。除了技術(shù)本身的缺陷之外,有兩個(gè)主要的原因:第一,采購(gòu)評(píng)審軟件開(kāi)發(fā)中Java還沒(méi)有解決開(kāi)發(fā)用戶界面的便捷性問(wèn)題,在這種情況下,無(wú)論何種形式的努力,都不足以吸引用戶;第二,在解決第一個(gè)問(wèn)題的前提下,要抗衡一個(gè)標(biāo)準(zhǔn),必須付出更多非技術(shù)性的努力,就像享有盛譽(yù)的蘋(píng)果公司在追逐用戶體驗(yàn)上的創(chuàng)新一樣。 事實(shí)上,從使用Java技術(shù)的第一天起,我就沒(méi)有感受到Java在用戶界面上的努力:簡(jiǎn)陋的AWT,使用不便的Swing,匱乏的界面開(kāi)發(fā)工具,傳說(shuō)中的虛擬機(jī)芯片。 Java會(huì)在用戶界面領(lǐng)域統(tǒng)帥大旗嗎?我不大相信。
有趣的是,采購(gòu)評(píng)審軟件開(kāi)發(fā)Java的另一項(xiàng)用戶界面技術(shù)——Servlet,卻大獲成功。嚴(yán)格來(lái)說(shuō),Servlet不是一項(xiàng)用戶界面技術(shù),它其實(shí)是“請(qǐng)求——響應(yīng)”模式協(xié)議的高級(jí)抽象,HTTP協(xié)議的抽象已經(jīng)納入Servlet的標(biāo)準(zhǔn)(從技術(shù)的角度來(lái)看,是一個(gè)框架)之中。
Servlet框架,負(fù)責(zé)實(shí)現(xiàn)采購(gòu)評(píng)審軟件開(kāi)發(fā)協(xié)議以及調(diào)度框架中生存的各種抽象概念的實(shí)現(xiàn)類。而生存在框架中的“服務(wù)器端小程序”實(shí)現(xiàn)類(“服務(wù)器端小程序”也被叫做Servlet,這里為了區(qū)別它與前面提到的Servlet框架在概念上的不同,有意使用“服務(wù)器端小程序”這個(gè)詞),通常要做兩件事情:第一,根據(jù)通過(guò)協(xié)議輸入的參數(shù)進(jìn)行服務(wù)器端的邏輯計(jì)算;第二,負(fù)責(zé)用戶界面生成。 “服務(wù)器端小程序”生成用戶界面的方式,簡(jiǎn)直是太丑陋了。
可是,如此丑陋的方式,竟然也不能阻止Servlet技術(shù)的流行。什么原因呢?很簡(jiǎn)單,這項(xiàng)技術(shù)擁抱了標(biāo)準(zhǔn),在用戶界面上它可以支持HTML標(biāo)準(zhǔn),支持的方式是直接輸出HTML文本。
為了改善HTML文本直接輸出的不便,業(yè)界又出現(xiàn)了JSP技術(shù)。JSP技術(shù)的思想很簡(jiǎn)單,在HTML頁(yè)面中嵌入Java程序(使用Tag或直接嵌入Java代碼)。 早期的JSP應(yīng)用中,HTML負(fù)責(zé)用戶界面,采購(gòu)評(píng)審軟件開(kāi)發(fā)Java程序負(fù)責(zé)服務(wù)器端的邏輯計(jì)算。后來(lái)針對(duì)這樣的分工做了一些改進(jìn),產(chǎn)生了頁(yè)面控件的概念。
頁(yè)面控件是一個(gè)通過(guò)Tag技術(shù)被調(diào)用的Java程序。它不僅僅負(fù)責(zé)邏輯計(jì)算,還負(fù)責(zé)提供封裝好的用戶界面(HTML格式)。這就是訂單管理軟件開(kāi)發(fā)的概念。由于這種改進(jìn),使頁(yè)面的組裝變得更加靈活和方便,JSP中單純的HTML開(kāi)始變得越來(lái)越少。這又帶來(lái)了另一個(gè)好處:由于頁(yè)面控件可以產(chǎn)生各種界面,所以Servlet逐漸脫離了對(duì)于特定瀏覽器的依賴,應(yīng)用的場(chǎng)合更加廣泛。