1、理解Web應用程序的運行原理和機制
Web應用程序是基於瀏覽器/服務器模式(也稱B/S架構)的應用程序,它開發完成后,需要部署到Web服務器上才能正常運行,與用戶交互的客戶端是網頁瀏覽器。
瀏覽器負責顯示來自服務器的數據和接受用戶的輸入數據,也稱為“與用戶交互”;服務器負責處理瀏覽器的訪問請求,並把處理結果(數據或消息)組織成瀏覽器可以識別的格式文本返回。
Web應用程序的主要特點如下:
1)瀏覽器主動請求服務器資源。在Web應用程序中,一般是瀏覽器首先向服務器發起訪問某個網頁或某些數據的請求。
2)服務器被動響應瀏覽器請求。服務器收到瀏覽器的訪問請求后,根據請求的事項執行相應的業務邏輯代碼,一般還要連接數據庫提取或處理數據,並把提取的數據或處理結果,組織成HTML或JSON格式或普通文本,返回給瀏覽器。這個過程稱為響應和處理請求。
3)使用TCP/IP和HTTP協議通信。Web應用程序的服務器與瀏覽器之間,約定使用TCP/IP和HTTP協議交換數據。其中:TCP/IP是傳輸控制協議,HTTP是文本數據格式協議。
4)Web應用程序的安裝部署簡便。Web服務器和瀏覽器是一對多的關系,即一個服務器可以同時滿足多個瀏覽器的訪問請求。由於瀏覽器一般隨操作系統(如:Windows系統)附帶安裝,與Web應用程序無關,不需要開發者維護。所以,Web應用程序開發者只需要考慮在Web服務器上部署和維護應用程序,相對於C/S架構的應用程序,大大減輕了應用程序的部署、安裝和維護工作量,提高了維護效率。
2、認識JavaWeb應用程序結構
使用java開發Web應用程序已經走過了漫長的路程,期間出現過多種典型的Web應用程序結構。包括:
2.1 JSP頁面結構
瀏覽器直接請求JSP頁面,JSP中包含了處理各種業務的邏輯代碼。其結構圖如下:
該種結構的特點是大量Java 腳本代碼直接嵌入在JSP頁面中。對於簡單的應用程序,不失為一種直接簡便的方法。但是這種結構很難做到代碼重用,不利於功能模塊的規划和設計。
2.2 JavaBean頁面結構
為了改進JSP頁面結構的不足,我們將處理后台資源的邏輯代碼用Bean進行封裝,發展成為帶Bean的頁面結構,再結合自定義標簽,可將一部分代碼從JSP中移出,獲得較為干凈的JSP頁面。如下圖所示:
但是這種結構隨着功能的增加,層次變得不夠清晰,可擴展性不好,不利於應用程序的維護。
2.3 MVC結構
MVC是三個英文單詞Model-View-Control首字母的縮寫,中文就是“模型-視圖-控制器”的意思。
MVC結構將Web應用程序代碼按照基本任務划分為三個部分: 模型實現數據封裝和業務邏輯,視圖實現用戶交互界面,控制器整合模型和視圖,並根據請求調用對應的模型和視圖。
MVC結構比較科學、合理地解決了任務分工與整合,業務功能擴展和代碼維護的問題,被業界廣泛接受,是最典型、最成功的網絡應用程序結構。MVC結構處理用戶請求的基本步驟如下:
(1)瀏覽器向服務器發出訪問請求,服務器收到請求后轉發給控制器;
(2)控制器檢查客戶請求URL,初始化管理對象,調用相應的業務模型來處理請求;
(3)模型包括處理客戶請求的所有業務規則,它與數據庫和文件資源交互,將提取的數據包裝成對象返回給控制器;
(4)控制器接收模型返回的數據,選擇顯示數據的JSP頁面,即視圖;
(5)JSP頁面將數據嵌入到HTML元素中,生成標准的HTML頁面文本,返回給瀏覽器。
(6)瀏覽器顯示HTML網頁,完成一個請求和響應回合。
使用java實現MVC結構的典型方案,是使用Bean創建模型,JSP創建視圖,Servlet實現控制。
3、理解Servlet與Servlet容器
Servlet本身是一種特定的運行機制,有一套規范的編程接口(API),支持請求和響應過濾器。但我們一般將Servlet理解為程序員編寫的符合Servlet規范,並由Servlet容器來調用和執行的Java類。它可以對任何類型的請求進行處理和響應,別稱“服務器小程序”。
編寫一個Servlet,就是按照Servlet規范編寫一個Java類。但是它沒有main方法,不能獨立運行,必須部署到Servlet容器中,由容器來實例化並調用它的相關方法(如:doGet()和doPost()方法)。
Servlet容器也叫Servlet引擎,是Web服務器的一部分。它在Servlet生命周期內管理Servlet,並負責解析基於MIME的請求文本,以及格式化基於MIME的響應數據。
Tomcat就是一款包括Servlet容器的Web服務器。Tomcat服務器接受客戶請求並做出響應的過程如下:
1)客戶端瀏覽器訪問Web服務器,發送訪問Servlet的HTTP請求。
2)Web服務器接收到請求后,傳遞給Servlet容器。
3)Servlet容器初始化Servlet實例,調用實例的Service()方法,並向其傳遞兩個對象參數:表示請求的HttpServletRequest對象和表示響應的HttpServletResponse對象。
4)Servlet實例使用HttpServletRequest對象獲取客戶的請求信息,然后進行相應的處理。
5)Servlet實例將處理結果通過HttpServletResponse對象返回給容器,容器負責確保處理結果正確地發送給瀏覽器,同時將控制權返回給Web服務器。
6)Servlet一旦實例化就一直保存在內存中,直到Web服務器停止運行應用程序時,再銷毀Servlet實例。
提示:Web瀏覽器並不直接和Servlet通信。Servlet是由Servlet容器加載和執行的。常用的MIME類型有:text/html,application/pdf,video/quicktime,application /java,image/jpeg,application/jar,application/octet-stream,application/x- zip等等。