- Servlet/JSP深入詳解
- 孫鑫
- 1633字
- 2019-01-01 14:48:22
1.1 Web技術的發展
隨著Internet的發展,基于HTTP協議和HTML標準的Web應用呈幾何數量級的增長,人們的生活在不知不覺中已經被網絡悄悄地改變了。在網絡普及之前,我們購買圖書要去書店,給親人匯錢要去郵局或者銀行……而現在,一切都是這么便捷,你可以在網上購買圖書、匯款、繳納電話費,你甚至可以為遠在他鄉的女朋友訂購一束玫瑰。各種各樣的網上業務豐富了我們的生活,節省了我們的時間,提高了我們的工作效率,改善了我們的生活品質。支撐這些網上業務的就是各種各樣的Web應用,而這些Web應用又是用各種Web技術開發的。
早期的Web應用主要是靜態頁面的瀏覽(如新聞的瀏覽),這些靜態頁面使用HTML語言來編寫,放在服務器上;用戶使用瀏覽器通過HTTP協議請求服務器上的Web頁面,服務器上的Web服務器軟件接收到用戶發送的請求后,讀取請求URI所標識的資源,加上消息報頭發送給客戶端的瀏覽器;瀏覽器解析響應中的HTML數據,向用戶呈現多姿多彩的HTML頁面。整個過程如圖1-1所示。

圖1-1 瀏覽器請求靜態頁面
隨著網絡的發展,很多線下業務開始向網上發展,基于Internet的Web應用也變得越來越復雜,用戶所訪問的資源已不僅僅局限于在服務器硬盤上存放的靜態網頁,更多的應用需要根據用戶的請求動態生成頁面信息,復雜一些的還需要從數據庫中提取數據,經過一定的運算,生成一個頁面返回給客戶。例如,筆者通過Web瀏覽器想要查詢本公司一年的銷售報表,這個銷售報表是根據一年的銷售數據得出的,而這一年的銷售數據非常多,通常都是存儲在數據庫中,當Web服務器端軟件接收到客戶端的請求,就需要從數據庫中提取一年的數據,然后按照一定的統計規則,通過計算生成報表頁面,發送到請求者的Web瀏覽器端。類似于上述的應用還有很多,要為用戶提供各種各樣的增強功能,就需要我們在Web服務端通過軟件來實現。可是這種實現,如何才能完成呢?
了解HTTP協議的讀者,可能會想到,可以遵循HTTP協議實現一個服務器端軟件,提供增強功能。想法本身沒有錯誤,但是由于HTTP協議服務器端的實現較為復雜,需要考慮很多方面,而且由于應用的廣泛性,不可能針對每一種應用都去實現這樣的一個HTTP服務器,所以這種方法在現實中不太可行。還有一種方法,就是利用已經實現HTTP協議的服務器端軟件,而這些軟件預先為我們留出了擴展的接口,我們只需要按照一定的規則去提供相應的擴展功能。當這類Web服務器接收到客戶請求后,判斷請求是否是訪問我們提供的擴展功能,如果是,就將請求交由我們所編寫的程序去處理。當處理完成后,程序將處理結果交回Web服務器軟件,Web服務器軟件拿到結果信息后,再將結果作為響應信息返回給客戶端。第二種方式的好處在于,我們不需要對HTTP協議有過多的了解,HTTP協議服務器端的實現已經由Web服務器軟件完成了,我們只需要根據我們的應用去開發相應的功能模塊,然后將這些功能模塊按照你所采用的Web服務器軟件的要求,部署到Web服務器中進行集成。在用戶看來,Web服務器端就是一個整體,在為他/她提供服務。
早期使用的Web服務器擴展機制是CGI,它允許用戶調用Web服務器上的CGI程序。CGI的全稱是Common Gateway Interface,即公共網關接口。大多數的CGI程序使用Perl來編寫,也有使用C、Python或PHP來編寫的。用戶通過單擊某個鏈接或者直接在瀏覽器的地址欄中輸入URL來訪問CGI程序,Web服務器接收到請求后,發現這個請求是給CGI程序的,于是就啟動并運行這個CGI程序,對用戶請求進行處理。CGI程序解析請求中的CGI數據,處理數據,并產生一個響應(通常是HTML頁面)。這個響應被返回給Web服務器,Web服務器包裝這個響應(例如添加消息報頭),以HTTP響應的形式發送給Web瀏覽器。整個過程如圖1-2所示。

圖1-2 用戶訪問CGI程序
然而CGI程序存在著一些缺點,主要是CGI程序編寫困難、對用戶請求的響應時間較長、以進程方式運行導致性能受限等。由于CGI程序的這些缺點,開發人員需要其他的CGI方案。1997年,SUN公司推出了Servlet技術,作為Java陣營的CGI解決方案。作為對微軟ASP技術(1996年推出)的回應,SUN公司于1998年推出了JSP技術,允許在HTML頁面中嵌入Java腳本代碼,從而實現動態網頁功能。與ASP、JSP類似的服務器端頁面編寫技術還有Rasmus Lerdorf于1994年發明的PHP技術。
- 高效微控制器C語言編程
- Unity 2020 Mobile Game Development
- 程序員面試算法寶典
- Python Game Programming By Example
- Practical DevOps
- 深入淺出Android Jetpack
- Python程序設計
- Selenium Testing Tools Cookbook(Second Edition)
- Android系統原理及開發要點詳解
- Java圖像處理:基于OpenCV與JVM
- Getting Started with Polymer
- 微前端設計與實現
- JavaWeb從入門到精通(視頻實戰版)
- 軟件開發中的決策:權衡與取舍
- Puppet Cookbook(Third Edition)