關注我,帶你了解java
老話說得好,要想學好javaWeb,必須先學會tomcat和servlet!
大家好,我是冰冰,因工作原因最近一個月沒更新作品,和大家說聲抱歉!
前段時間總結了MySQL的知識,接下來幾天就總結一下javaWeb的知識!
一、tomcat的介紹和安裝
1. tomcat介紹
Tomcat 是由 Apache 開發的一個 Servlet 容器,實作了對 Servlet 和 JSP 的支援,并提供了作為Web伺服器的一些特有功能,Tomcat是一種類似于IIS、Apache Http的Web服務端程式,由于 Tomcat 本身也内含了一個 HTTP 伺服器,它也可以被視作一個單獨的 Web 伺服器。也就是Web容器。
由于 Tomcat 是由 Java 語言實作的,是以需要運作在 Java 虛拟機上,是以使用前要先安裝 JDK,以提供運作環境
Tomcat 實作了幾個 Java EE 規範,包括 Java Servlet、Java Server Pages(JSP)、Java Expression Language 和 Java WebSocket 等。在下載下傳好 Tomcat 後,可以在它的 lib 目錄中看到相關的 Java EE 規範 API 源碼的引用
Tomcat 實作的幾個 Java EE 規範中,有一個很重要的規範Servlet,通過它我們可以運作自己編寫的 Servlet 應用程式處理動态請求,即實作動态頁面
Tomcat 的 Connector 元件實作了 HTTP 請求的解析,可以把 Tomcat 看作是一個 HTTP 伺服器,Tomcat 可以通過 Connector 元件接收 HTTP 請求并解析,然後把解析後的資訊交給 Servlet 處理:
(1) 對于靜态資源(html/css/js 等)請求:Tomcat 提供預設的 Servlet 來處理響應
(2) 對于動态請求:可以映射到自己編寫的 Servlet 應用程式來處理
2. tomcat下載下傳和安裝
這裡以 Tomcat 8 為例,
注意: 由于 Tomcat 運作在 Java 虛拟機上,是以在安裝 Tomcat 之前要先下載下傳好 JDK
進入tomcat官網:https://tomcat.apache.org/
下載下傳Tomcat 8
選擇 zip 壓縮包,下載下傳後解壓即可
打開 Tomcat 檔案夾,進入 bin 目錄,輕按兩下 startup.bat 就可以運作 Tomcat 伺服器
注意: 由于 CMD 預設的編碼方式是 GBK,而 Tomcat 的預設編碼方式是 UTF-8,是以在輕按兩下 startup.bat 啟動 Tomcat 時,CMD 上顯示的會是亂碼。但該問題可以不處理,因為并不需要通過 CMD 來檢視 Tomcat 的啟動狀況及其它情況,可以使用其它方式。
這時我們打開浏覽器,輸入localhost:8080/ 可打開tomcat官網,說明tomcat配置成功。
二、servlet介紹
1. servlet是什麼
說完tomcat,就不得不說servlet,因為Java Servlet 是運作在 Web 伺服器或應用伺服器上的程式,它是作為來自 Web 浏覽器或其他 HTTP 用戶端的請求和 HTTP 伺服器上的資料庫或應用程式之間的中間層。
Servlet可以收集來自網頁表單的使用者輸入,呈現來自資料庫或者其他源的記錄,還可以動态建立網頁。
Java Servlet 通常情況下與使用 CGI(公共網關接口)實作的程式可以達到異曲同工的效果。但是相比于 CGI,Servlet 有以下幾點優勢:
1.性能明顯更好。
2.Servlet 在 Web 伺服器的位址空間内執行。這樣它就沒有必要再建立一個單獨的程序來處理每個用戶端請求。
3.Servlet 是獨立于平台的,因為它們是用 Java 編寫的。
4.伺服器上的 Java 安全管理器執行了一系列限制,以保護伺服器計算機上的資源。是以,Servlet 是可信的。
5.Java 類庫的全部功能對 Servlet 來說都是可用的。它可以通過 sockets 和 RMI 機制與 applets、資料庫或其他軟體進行互動。
2. servlet是做什麼的?
讀取用戶端(浏覽器)發送的顯式的資料。這包括網頁上的 HTML 表單,或者也可以是來自 applet 或自定義的 HTTP 用戶端程式的表單。
讀取用戶端(浏覽器)發送的隐式的 HTTP 請求資料。這包括 cookies、媒體類型和浏覽器能了解的壓縮格式等等。
處理資料并生成結果。這個過程可能需要通路資料庫,調用 Web 服務。
發送顯式的資料到用戶端(浏覽器)。該文檔的格式可以是多種多樣的,包括文本檔案(HTML 或 XML)、二進制檔案(GIF 圖像)、Excel 等。
發送隐式的 HTTP 響應到用戶端(浏覽器)。這包括告訴浏覽器或其他用戶端被傳回的文檔類型(例如 HTML),設定 cookies 和緩存參數,以及其他類似的任務。
3.servlet的生命周期
Servlet 生命周期可被定義為從建立直到毀滅的整個過程。以下是 Servlet 遵循的過程:
Servlet 初始化後調用 init () 方法。
Servlet 調用 service() 方法來處理用戶端的請求。
Servlet 銷毀前調用 destroy() 方法。
Servlet 是由 JVM 的垃圾回收器進行垃圾回收的。
4. 核心接口和類
4.1 Servlet的接口:javax.servlet.Servlet
4.2 GenericServlet
是一個抽象類,該類為Servlet接口提供了部分實作,它并沒有實作HTTP請求處理。
4.3 HttpServlet
是GenericServlet的子類,它繼承了GenericServlet的所有方法,并且為HTTP請求中的POST、GET等類型提供了具體的操作方法。
通常情況下,編寫的Servlet類都繼承自HttpServlet,在開發中使用的具體的Servlet對象就是HttpServlet對象。HttpServlet的常用方法及其說明如下表所示。
4.4 ServletContext接口
Servlet 容器啟動時,會為每個 Web 應用(webapps 下的每個目錄都是一個 Web 應用)建立一個唯一的 ServletContext 對象,該對象一般被稱為“Servlet 上下文”。ServletContext 對象的生命周期從 Servlet 容器啟動時開始,到容器關閉或應用被解除安裝時結束。Web 應用中的所有 Servlet 共享同一個 ServletContext 對象,不同 Servlet 之間可以通過 ServletContext 對象實作資料通訊,是以 ServletContext 對象也被稱為 Context 域對象
ServletContext 的官方文檔介紹:
定義 servlet 用來與其 servlet 容器通信的一組方法,例如,擷取檔案的MIME類型、分派請求或寫入日志檔案。
每個Java虛拟機的每個“web應用程式”都有一個上下文。(“web應用程式”是一個 servlet 和内容的集合,安裝在伺服器URL命名空間的特定子集下,如/catalog,可能通過.war檔案安裝。)
在 web 應用程式的部署描述符中标記為“分布式”的情況下,每個虛拟機都有一個上下文執行個體。在這種情況下,上下文不能用作共享全局資訊的位置(因為資訊不是真正的全局的)。需要使用外部資源用作共享全局資訊的載體,如資料庫。
ServletContext 對象包含在 ServletConfig 對象中,當 servlet 初始化時,Web伺服器将向該對象(ServletConfig)提供可用的 servlet。
獲得 ServletContext 對象4種方式
(1)通過 GenericServlet 提供的 getServletContext() 方法
(2)通過 ServletConfig 提供的 getServletContext() 方法
(3)通過 HttpSession 提供的 getServletContext() 方法
(4)通過 HttpServletRequest 提供的 getServletContext() 方法
4.5 HttpServletRequest接口和HttpServletResponse接口
HttpServletRequest請求轉發
一種在伺服器内部的資源跳轉方式。即通路某個資源後跳轉到下一個資源繼續通路。
//使用請求轉發
req.getRequestDispatcher("/下一個資源路徑").forward(req, resp);
轉發特點:
1、浏覽器位址欄路徑不發生變化
2、隻能轉發到目前伺服器内部資源中。
3、轉發是一次請求。浏覽器請求一次,通路多個資源。
HttpServletRequest接口最常用的方法就是獲得請求中的參數,這些參數一般是用戶端表單中的資料。同時,HttpServletRequest接口可以擷取由用戶端傳送的名稱,也可以擷取産生請求并且接收請求的伺服器端主機名及IP位址,還可以擷取用戶端正在使用的通信協定等資訊。下表是接口HttpServletRequest的常用方法。
HttpServletResponse重定向
重定向(Redirect)也是一種資源跳轉的方式。就是通過各種方法将各種網絡請求重新定個方向轉到其它位置(如:網頁重定向、域名的重定向、路由選擇的變化也是對資料封包經由路徑的一種重定向)。
重定向(redirect)告訴浏覽器的資訊:
1、告訴浏覽器重定向:狀态碼302
2、告訴浏覽器B資源的路徑: 響應頭location:其他資源的路徑
代碼:
// 第一種代碼實作
//1. 設定狀态碼為302
response.setStatus(302);
//2.設定響應頭location,響應頭location的值為/day15/responseDemo2response.setHeader("location","/day15/responseDemo2");
// 第二種簡單上述代碼實作
// 簡單的重定向方法response.sendRedirect("/day15/responseDemo2");
重定向的特點:
1、位址欄發生變化。
2、重定向可以通路其他站點(伺服器)的資源。
3、重定向是兩次請求。不能使用 request 對象來共享資料。
在Servlet中,當伺服器響應用戶端的一個請求時,就要用到HttpServletResponse接口。設定響應的類型可以使用setContentType()方法。發送字元資料,可以使用getWriter()傳回一個對象。下表是接口HttpServletResponse的常用方法。
星辰大海,永不止步
END