河軟CSDN樂知學院
學員周學習總結
姓名 |
** |
周次 |
7 |
方向 |
Java |
|||||||
內 容 |
本週學習知識點: Tomcat配置Web站點 HTTP Servlet入門 |
|||||||||||
本週學習收穫: Tomcat配置Web站點 WEB應用的相關知識 安裝 Tomcat Tomcat 的啓動與停止 配置WEB站點的虛擬目錄 配置虛擬主機 Web應用程序簡介 應用程序:指允許用戶執行特定任務的軟件程序,主要分爲桌面應用程序和Web應用程序兩種類型。 桌面應用程序(DesktopApplication):一般是指採用客戶機/服務器結構(Client/Server)的應用程序。 C/S模式將應用與服務分離,系統具有穩定性和靈活性 C/S模式配備的是點對點的結構模式,適用於局域網,有可靠的安全性 由於客戶端實現與服務器端的直接連接,沒有中間環節,因此響應速度快 在C/S模式中,作爲客戶機的計算機都要安裝客戶機程序,一旦軟件系統升級,每臺客戶機都要安裝客戶機程序,系統升級和維護較爲複雜 Web應用程序(Web Application) Web應用程序一般是指採用瀏覽器和服務器結構(Browser/Server,簡稱B/S結構)的應用程序。 Web應用程序由Web服務器和Web客戶端組成。 Web服務器:Web服務器上裝有某個應用程序,這個Web服務器應用程序負責接收客戶請求進行處理,向客戶返回結果 Web客戶端:允許用戶請求服務器上的某個資源,並且向客戶端返回結果。Web應用程序的客戶端一般是指Web瀏覽器。Web瀏覽器就是一個軟件,它知道怎麼與服務器通信,它還有一個重要任務,就是解釋HTML代碼,把Web頁面呈現給用戶 B/S模式的優點: (1)易於維護:基於B/S模型的系統當需要升級或維護時,只需修改服務器程序即可。 (2)易於實現。B/S模型的表現層可以用製作網頁的html來實現,瀏覽器和網頁設計技術已經相當成熟。而且用Java技術開發的Web系統可以安裝在任意一種服務器系統平臺上,也就是常說的具有跨平臺性。 (3)使用方便,無論客戶在什麼地方,只要服務器正在運行,客戶就能通過網絡進行連接,實現對數據的訪問和操作。 URL:Uniform Resource Locator(統一資源定位符) 例如,http://www.it315.org:80/java/index.html 主要的WEB服務器軟件 IIS、Apache 、Tomcat WEB,在英語中web即表示網頁的意思,它用於表示Internet主機上供外界訪問的資源。 Internet上供外界訪問的Web資源分爲: 靜態web資源(如html 頁面):指web頁面中供人們瀏覽的數據始終是不變。 動態web資源:指web頁面中供人們瀏覽的數據是由程序產生的,不同時間點訪問web頁面看到的內容各不相同。 靜態web資源開發技術 Html 常用動態web資源開發技術: JSP/Servlet、ASP、PHP等 在Java中,動態web資源開發技術統稱爲Javaweb,我們課程的重點也是教大家如何使用Java技術開發動態的web資源,即動態web頁面。 認識web.xml文件的作用: 通過web.xml文件把某個web資源配成網站首頁。 部署描述符文件 <WEB應用程序>/WEB-INF/web.xml <Tomcat主目錄>/conf/web.xml 目錄的默認網頁文件 <welcome-file-list> <welcome-file>index.html</welcome-file> <welcome-file>index.htm</welcome-file> <welcome-file>index.jsp</welcome-file> </welcome-file-list> 在一個tomcat服務器中可以放置多個網站,所謂配置虛似主機,就是在tomcat服務器中配置一個網站。 如需在WEB服務器中配置一個網站,需使用Host元素進行配置,例: <Hostname=”site1” appBase=”c:\app”></Host> 配置的主機(網站)要想被外部訪問,必須在DNS服務器或windows系統中註冊。 配置多個網站。 缺省虛似主機。 HTTP HTTP簡介 l 客戶端連上web服務器後,若想獲得web服務器中的某個web資源,需遵守一定的通訊格式,HTTP協議用於定義客戶端與web服務器通迅的格式。 l WEB瀏覽器與WEB服務器之間的一問一答的交互過程必須遵循一定的規則,這個規則就是HTTP協議。 l HTTP是hypertext transferprotocol(超文本傳輸協議)的簡寫,它是TCP/IP協議集中的一個應用層協議,用於定義WEB瀏覽器與WEB服務器之間交換數據的過程以及數據本身的格式。 l HTTP協議的版本 HTTP/1.0、HTTP/1.1 l HTTP協議是學習JavaWEB開發的基石,不深入瞭解HTTP協議,就不能說掌握了WEB開發,更無法管理和維護一些複雜的WEB站點。深入理解HTTP協議,對管理和維護複雜的WEB站點、開發具有特殊用途的WEB服務器程序具有直接影響。 HTTP 1.0的會話方式 l 四個步驟: 建立連接 發送請求 回送響應 關閉連接 l 瀏覽器與WEB服務器的連接過程是短暫的,每次連接只處理一個請求和響應。對每一個頁面的訪問,瀏覽器與WEB服務器都要建立一次單獨的連接。 l 瀏覽器到WEB服務器之間的所有通訊都是完全獨立分開的請求和響應對。 HTTP 協議 瀏覽器訪問多圖網頁的過程 l 一個web頁面中,使用img標籤引用了三幅圖片,當客戶端訪問服務器中的這個web頁面時,客戶端總共會訪問幾次服務器,即向服務器發送了幾次HTTP請求。 HTTP請求消息 l 客戶端連上服務器後,向服務器請求某個web資源,稱之爲客戶端向服務器發送了一個HTTP請求。一個完整的HTTP請求包括如下內容: l 一個請求行、若干消息頭、以及實體內容,如下所示:
l 請求消息的結構: 一個請求行、若干消息頭、以及實體內容,其中的一些消息頭和實體內容都是可選的,消息頭和實體內容之間要用空行隔開。 l 舉例: GET /books/java.html HTTP/1.1 Accept: */* Accept-Language: en-us Connection: Keep-Alive Host: localhost Referer: http://localhost/links.asp User-Agent: Mozilla/4.0 Accept-Encoding: gzip, deflate 請求行: l 請求行中的GET稱之爲請求方式,請求方式有: • POST、GET、HEAD、OPTIONS、DELETE、TRACE、PUT • 常用的有: GET、 POST • 用戶如沒有設置,默認情況下瀏覽器向服務器發送的都是get請求,例如在瀏覽器直接輸地址訪問,點超鏈接訪問等都是get,用戶如想把請求方式改爲post,可通過更改表單的提交方式實現。 l 不管POST或GET,都用於向服務器請求某個WEB資源,這兩種方式的區別主要表現在數據傳遞上: • 如請求方式爲GET方式,則可以在請求的URL地址後以?的形式帶上交給服務器的數據,多個數據之間以&進行分隔,例如: • GET /mail/1.html?name=abc&password=xyz HTTP/1.1 • GET方式的特點:在URL地址後附帶的參數是有限制的,其數據容量通常不能超過1K。 • 如請求方式爲POST方式,則可以在請求的實體內容中向服務器發送數據,Post方式的特點:傳送的數據量無限制。 消息頭: l 用於HTTP請求中的常用頭 • Accept: text/html,image/* • Accept-Charset: ISO-8859-1 • Accept-Encoding: gzip,compress • Accept-Language: en-us,zh-cn • Host: www.it315.org:80 • If-Modified-Since: Tue, 11 Jul 2000 18:23:51 GMT • Referer: http://www.it315.org/index.jsp • User-Agent: Mozilla/4.0 (compatible; MSIE 5.5; Windows NT 5.0) • Cookie • Connection: close/Keep-Alive • Date: Tue, 11 Jul 2000 18:23:51 GMT HTTP響應 l 一個HTTP響應代表服務器向客戶端回送的數據,它包括: 一個狀態行、若干消息頭、以及實體內容 。
l 舉例: HTTP/1.1 200 OK Server: Microsoft-IIS/5.0 Date: Thu, 13 Jul 2000 05:46:53 GMT Content-Length: 2291 Content-Type: text/html Cache-control: private <HTML> <BODY> …… 狀態行: l 狀態行 格式: HTTP版本號 狀態碼 原因敘述<CRLF> 舉例:HTTP/1.1 200 OK 典型情況 l 200(正常) 表示一切正常,返回的是正常請求結果。 l 302/307(臨時重定向) 指出被請求的文檔已被臨時移動到別處,此文檔的新的URL在Location響應頭中給出。 l 304(未修改) 表示客戶機緩存的版本是最新的,客戶機應該繼續使用它。 l 403(禁止) 服務器理解客戶端請求,但拒絕處理它。通常由於服務器上文件或目錄的權限設置所致。 l 404(找不到) 服務器上不存在客戶機所請求的資源。 l 500(內部服務器錯誤) 服務器端的CGI、ASP、JSP等程序發生錯誤。 Servlet入門 Servlet的應用 1.Servlet是一種獨立於平臺和協議的服務器端的Java應用程序,可以生成動態的web頁面。它擔當Web瀏覽器或其他http客戶程序發出請求、與http服務器上的數據庫或應用程序之間交互的中間層。 2.主要內容:Web應用程序開發過程、Servlet的運行原理、Servlet的生命週期等。 Java Web應用程序的開發過程 1. 開發Java Web應用程序的大致流程 – 設計目錄結構:根據具體業務需要,遵照規範的目錄結構設計好Web應用程序的目錄結構。 – 編寫Web應用程序代碼:編寫業務邏輯所需的Java代碼。 – 編寫部署描述文件:把Servlet、初始化參數等定義到部署描述文件web.xml中。 – 編譯代碼:把編寫好的Java源代碼編譯成字節碼。 – 將Web應用程序打包:把整個Web應用程序打成War包,以方便部署。 – 部署Web應用程序:把打好的War包部署到Web服務器上。 2. 執行Web應用程序:啓動Web服務器,利用客戶端瀏覽器進行訪問測試。 注意:在具體的開發過程中,一般都會使用IDE工具,使用IDE工具進行Web應用程序開發時,只需要開發人員完成前三個步驟,其他步驟IDE工具可以自動完成。 Servlet運行原理 1.當Web服務器接收到一個HTTP請求時,它會先判斷請求內容——如果是靜態網頁數據,Web服務器將會自行處理,然後產生響應信息;如果牽涉到動態數據,Web服務器會將請求轉交給Servlet容器。此時Servlet容器會找到對應的處理該請求的Servlet實例來處理,結果會送回Web服務器,再由Web服務器傳回用戶端。 2.針對同一個Servlet,Servlet容器會在第一次收到http請求時建立一個Servlet實例,然後啓動一個線程。第二次收到http請求時,Servlet容器無須建立相同的Servlet實例,而是啓動第二個線程來服務客戶端請求。所以多線程方式不但可以提高Web應用程序的執行效率,也可以降低Web服務器的系統負擔。 Servlet的生命週期 不存在Servlet實例—容器裝載Servlet—創建Servlet實例—初始化Servlet調用init方法—調用Servlet方法對應Servlet的Servlet方法—結束Servlet調用destroy方法 Servlet接口實現類: 1、HttpServlet指能夠處理HTTP請求的servlet,它在原有Servlet接口上添加了一些與HTTP協議處理方法,它比Servlet接口的功能更爲強大。因此開發人員在編寫Servlet時,通常應繼承這個類,而避免直接去實現Servlet接口。 2、HttpServlet在實現Servlet接口時,覆寫了service方法,該方法體內的代碼會自動判斷用戶的請求方式,如爲GET請求,則調用HttpServlet的doGet方法,如爲Post請求,則調用doPost方法。因此,開發人員在編寫Servlet時,通常只需要覆寫doGet或doPost方法,而不要去覆寫service方法。 Servlet的一些細節(1) 1、:由於客戶端是通過URL地址訪問web服務器中的資源,所以Servlet程序若想被外界訪問,必須把servlet程序映射到一個URL地址上,這個工作在web.xml文件中使用<servlet>元素和<servlet-mapping>元素完成。 2、<servlet>元素用於註冊Servlet,它包含有兩個主要的子元素:<servlet-name>和<servlet-class>,分別用於設置Servlet的註冊名稱和Servlet的完整類名。 3、一個<servlet-mapping>元素用於映射一個已註冊的Servlet的一個對外訪問路徑,它包含有兩個子元素:<servlet-name>和<url-pattern>,分別用於指定Servlet的註冊名稱和Servlet的對外訪問路徑。 Servlet的一些細節(2): 1、同一個Servlet可以被映射到多個URL上,即多個<servlet-mapping>元素的<servlet-name>子元素的設置值可以是同一個Servlet的註冊名。 2、在Servlet映射到的URL中也可以使用*通配符,但是隻能有兩種固定的格式:一種格式是“*.擴展名”,另一種格式是以正斜槓(/)開頭並以“/*”結尾。 Servlet的一些細節(3): 對於如下的一些映射關係: Servlet1 映射到 /abc/* Servlet2 映射到 /* Servlet3 映射到 /abc Servlet4 映射到 *.do Servlet的一些細節(4): 1、Servlet是一個供其他Java程序(Servlet引擎)調用的Java類,它不能獨立運行,它的運行完全由Servlet引擎來控制和調度。 2、針對客戶端的多次Servlet請求,通常情況下,服務器只會創建一個Servlet實例對象,也就是說Servlet實例對象一旦創建,它就會駐留在內存中,爲後續的其它請求服務,直至web容器退出,servlet實例對象纔會銷燬。 3、在Servlet的整個生命週期內,Servlet的init方法只被調用一次。而對一個Servlet的每次訪問請求都導致Servlet引擎調用一次servlet的service方法。對於每次訪問請求,Servlet引擎都會創建一個新的HttpServletRequest請求對象和一個新的HttpServletResponse響應對象,然後將這兩個對象作爲參數傳遞給它調用的Servlet的service()方法,service方法再根據請求方式分別調用doXXX方法。 Servlet的一些細節(5): 1、如果在<servlet>元素中配置了一個<load-on-startup>元素,那麼WEB應用程序在啓動時,就會裝載並創建Servlet的實例對象、以及調用Servlet實例對象的init()方法。 2、用途:爲web應用寫一個InitServlet,這個servlet配置爲啓動時裝載,爲整個web應用創建必要的數據庫表和數據。 Servlet的一些細節(6): 1、如果某個Servlet的映射路徑僅僅爲一個正斜槓(/),那麼這個Servlet就成爲當前Web應用程序的缺省Servlet。 2、凡是在web.xml文件中找不到匹配的<servlet-mapping>元素的URL,它們的訪問請求都將交給缺省Servlet處理,也就是說,缺省Servlet用於處理所有其他Servlet都不處理的訪問請求。 3、在<tomcat的安裝目錄>\conf\web.xml文件中,註冊了一個名稱爲org.apache.catalina.servlets.DefaultServlet的Servlet,並將這個Servlet設置爲了缺省Servlet。 4、當訪問Tomcat服務器中的某個靜態HTML文件和圖片時,實際上是在訪問這個缺省Servlet。 線程安全: 1、當多個客戶端併發訪問同一個Servlet時,web服務器會爲每一個客戶端的訪問請求創建一個線程,並在這個線程上調用Servlet的service方法,因此service方法內如果訪問了同一個資源的話,就有可能引發線程安全問題。 2、如果某個Servlet實現了SingleThreadModel接口,那麼Servlet引擎將以單線程模式來調用其service方法。 3、SingleThreadModel接口中沒有定義任何方法,只要在Servlet類的定義中增加實現SingleThreadModel接口的聲明即可。 4、對於實現了SingleThreadModel接口的Servlet,Servlet引擎仍然支持對該Servlet的多線程併發訪問,其採用的方式是產生多個Servlet實例對象,併發的每個線程分別調用一個獨立的Servlet實例對象。 5、實現SingleThreadModel接口並不能真正解決Servlet的線程安全問題,因爲Servlet引擎會創建多個Servlet實例對象,而真正意義上解決多線程安全問題是指一個Servlet實例對象被多個線程同時調用的問題。事實上,在Servlet API 2.4中,已經將SingleThreadModel標記爲Deprecated(過時的)。 ServletConfig對象: 1、在Servlet的配置文件中,可以使用一個或多個<init-param>標籤爲servlet配置一些初始化參數。 2、當servlet配置了初始化參數後,web容器在創建servlet實例對象時,會自動將這些初始化參數封裝到ServletConfig對象中,並在調用servlet的init方法時,將ServletConfig對象傳遞給servlet。進而,程序員通過ServletConfig對象就可以得到當前servlet的初始化參數信息。 3、閱讀ServletConfigAPI,並舉例說明該對象的作用: 獲得字符集編碼 獲得數據庫連接信息 獲得配置文件 |
||||||||||||
學習總結: Java Web,是用Java技術來解決相關web互聯網領域的技術總和。web包括:web服務器和web客戶端兩部分。Java在客戶端的應用有java applet不過現在使用的很少,Java在服務器端的應用非常的豐富,比如Servlet,JSP和第三方框架等等。Java技術對Web領域的發展注入了強大的動力。 |
||||||||||||
對授課教師意見建議: 希望老師能帶領我們學習java web實戰開發項目,讓我們能更好的體會學習。 |