JavaWeb
基礎
描述
Web服務器的作用是接受客戶端的請求,給客戶端響應
服務器的使用
Tomcat(最常用的)
JBoss
Weblogic
Websphere
JavaWeb的三大組件
Servlet
主要負責接收并處理來自客戶端的請求,隨后生成響應結果。例如,在處理用戶登錄請求時,Servlet 能夠驗證用戶輸入的賬號和密碼是否正確,并依據驗證結果返回相應提示信息給客戶端。
JSP
基于 HTML 頁面嵌入 Java 代碼片段或表達式,從而實現動態網頁內容的生成與展示。以顯示商品列表頁面為例,借助 JSP 可從數據庫獲取商品數據,并在頁面中動態呈現商品名稱、價格等信息。
JavaBean
是一種Java的對象用于封裝數據例如:可創建一個 JavaBean 類封裝用戶的姓名、年齡、性別等屬性及其相關的獲取和設置方法。
服務器相應碼
404 Not Found
含義:服務器無法找到客戶端請求的資源。這可能是因為資源不存在、URL 拼寫錯誤等原因
500 Internal Server Error
服務器在處理客戶端請求時發生了內部錯誤。這可能是由于代碼錯誤、服務器配置錯誤、數據庫故障等原因導致的。
503 Service Unavailable
服務器暫時無法處理客戶端請求,通常是由于服務器過載、維護或者其他臨時故障導致的。
Servlet
三種實現方式
實現Servlet接口
需要重寫的方法
接口方法的詳解init() Servlet在創建的過程中自動調用的方法 。 service()處理客戶端請求的方法。Servlet的每調用一次,service()方法就執行一次。 getServletInfo() 放回Servlet的描述信息。 destroy()服務端任務結束,調用該方法摧毀Servlet的對象。
繼承GenericServlet類
GenericServlet類 幫我們把其他四個方法都實現類, 只留下一個抽象service() 讓我們重寫
繼承HttpServlet類(最推薦的方式)只需要重寫doGet()和doPost()方式說明:兩種方式都是來處理客戶端發送來的請求,寫在服務端,是Javaweb處理業務的邏輯的核心代碼代碼,由程序員來完成。可以實現登錄、注冊等基礎業務。
Servlet的生命周期:
Servlet對象會在第一次訪問的時候由tomcat自動創立,并調用init()初始化方法,而且 一個Servlet類型,服務器只創建一個實例對象 。之后每次訪問都會調用Servlet()方法。在服務器結束后調用destroy()摧毀Servlet
請求(request)與響應(response)
一個JavaWeb響應的整個流程
requset
request概述
在客戶端發出每個請求時,服務器都會創建一個request對象,并把請求數據封裝到request中,然后在調用Servlet.service()方法時傳遞給service()方法,這說明在service()方法中可以通過request對象來獲取請求數據。
作用
封裝了請求頭數據; 封裝了請求正文數據,如果是GET請求,那么就沒有正文; request是一個域對象,可以把它當成Map來添加獲取數據; request提供了請求轉發和請求包含功能
兩種請求的區別 Get請求: 直接在瀏覽器地址欄輸入網址 使用<a href=""/> 也是get請求 使用提交表單form, method沒有寫, 寫get Post請求: 使用提交表單form, method =“post”get 請求,post請求區別: get請求,請求參數通過url傳遞, post請求: 通過請求體傳遞參數 get請求不安全, 有敏感字段, 一定不能使用get, post請求安全一些 get請求無法傳遞文件參數, 提交文件必須使用post請求 get請求參數有大小限制: 4KB, post請求沒有限制
request域的方法
void setAttribute(String name, Object value):用來存儲一個對象
servletContext.setAttribute(“xxx”, “XXX”),在request中保存了一個域屬性,域屬性名稱為xxx,域屬性的值為XXX。
Object getAttribute(String name):用來獲取request中的數據,當前在獲取之前需要先去存儲才行
void removeAttribute(String name):用來移除request中的域屬性
請求轉發
概念:客戶一個請求,都表示由多個Servlet共同來處理一個請求。例如Servlet1來處理請求,然后Servlet1又轉發給Servlet2來繼續處理這個請求。如果在AServlet中請求轉發到BServlet,那么在AServlet中就不允許再輸出響應體,即不能再使用response.getWriter()和response.getOutputStream()向客戶端輸出,這一工作應該由BServlet來完成
response
概念
response是響應對象,向客戶端輸出響應正文(響應體)可以使用response的響應流
字符編碼
在使用response.getWriter()時需要注意默認字符編碼為ISO-8859-1,如果希望設置字符流的字符編碼為utf-8,可以使用response.setCharaceterEncoding(“utf-8”)來設置。這樣可以保證輸出給客戶端的字符都是使用UTF-8編碼的!
關于重定向
當你訪問http://www.sun.com時,你會發現瀏覽器地址欄中的URL會變成http://www.oracle.com/us/sun/index.htm,這就是重定向了。重定向是服務器通知瀏覽器去訪問另一個地址,即再發出另一個請求。
重定向是兩次請求; 重定向的URL可以是其他應用,不局限于當前應用; 重定向的響應頭為302,并且必須要有Location響應頭; 重定向就不要再使用response.getWriter()或response.getOutputStream()輸出數據,不然可能會出現異常;
請求轉發與重定向比較
- 請求轉發是一個請求,而重定向是兩個請求; - 請求轉發后瀏覽器地址欄不會有變化,而重定向會有變化,因為重定向是兩個請求; - 請求轉發的目標只能是本應用中的資源,重定向的目標可以是其他應用; - 請求轉發對AServlet和BServlet的請求方法是相同的,即要么都是GET,要么都是POST,因為請求轉發是一個請求; - 重定向的第二個請求一定是GET; - 請求轉發是在服務端內部執行的,而重定向是在客戶端執行的.
Cookie
概念
Cookie就是一個鍵和一個值構成的,隨著服務器端的響應發送給客戶端瀏覽器。然后客戶端瀏覽器會把Cookie保存起來,當下一次再訪問服務器時把Cookie再發送給服務器。
創建方式
response.addCookie(cookie)
注意
- Cookie大小上限為4KB; - 一個服務器最多在客戶端瀏覽器上保存20個Cookie; - 一個瀏覽器最多保存300個Cookie;
應用案例
用戶身份驗證和會話管理:通過 Cookie 可以記錄用戶的登錄狀態。比如,用戶登錄成功后,服務器會設置一個包含用戶 ID 或登錄令牌的 Cookie。在用戶訪問網站的其他頁面時,服務器通過檢查這個 Cookie 來確定用戶是否已經登錄,避免用戶在每個頁面都需要重新輸入登錄信息。
過濾器(Filter)
概念
當用戶請求某個Servlet時,會先執行部署在這個請求上的Filter,如果Filter“放行”,那么會繼承執行用戶請求的Servlet;如果Filter不“放行”,那么就不會執行用戶請求的Servlet。
實現案例
過濾器就是寫一個類,實現Filter接口。需要在web.xml部署Filter: <filter> <filter-name>helloFilter</filter-name> <filter-class>cn.itcast.filter.HelloFilter</filter-class> </filter> <filter-mapping> <filter-name>helloFilter</filter-name> <url-pattern>/index.jsp</url-pattern> </filter-mapping>