一、什么是Servlet?
Servlet是javaEE規范之一。規范就是接口。JavaWeb三大組件分別是:Servlet程序、Filter過濾器、Listener監聽器。Servlet是運行在服務器上的一個Java小程序,它可以接收客戶端發送來的請求,并響應數據給客戶端。
二、Servlet的生命周期
- 執行Servlet構造器方法(只在第一次創建Servlet程序會調用)
- 執行init初始化方法(只在第一次創建Servlet程序會調用)
- 執行service方法(每次訪問都會調用)
- 執行destroy銷毀方法(在web工程停止的時候調用)
三、實現Servlet程序(2種方法)
方法1:實現Servlet接口(不常用)
- 編寫一個類去實現Servlet接口;在src目錄下創建
- 實現service方法,處理請求,并響應數據;需要根據getMethod方法,來區分get,post請求。
- 在web.xml中去配置servlet程序的訪問地址;
- <servlet>
- <servlet-name>:Servlet程序起的別名。一般為類名。
- <servlet-class>:Servlet程序的全類名。
- <servlet-mapping>
- <servlet-name>:Servlet程序起的別名。一般為類名。
- <url-pattern>:配置訪問地址。
方法2:繼承HttpServlet類(常用)
- 編寫一個類去繼承HttpServlet類;在src目錄下創建。
- 根據業務需要重寫doGet或doPost方法。
- 在web.xml中去配置servlet程序的訪問地址。
四、ServletConfig類
- ServletConfig是Servlet程序的配置信息類。
- Servlet程序的配置信息,web.xml中<servlet>標簽中的信息(屬于每個Servlet,而不是整個web工程)。
- <servlet-name> Servlet程序的別名。
- <init-param> Servlet程序的初始化參數。
- Servlet程序 & ServletConfig對象的創建。
- Servlet程序和ServletConfig對象都是由Tomcat負責創建。
- Servlet程序默認是第一次訪問的時候創建,ServletConfig是每個Servlet程序創建時,就創一個對應的ServletConfig對象。
- 一個Servlet程序對應一個ServletConfig對象
- 通過當前ServletConfig對象,不可以獲取其他Servlet程序的配置信息。
注意:
- 通過getSevletConfig()獲取ServletConfig對象
- 重寫init方法,一定要調用父類GenericServlet的init方法
ServletConfig的作用:
- 獲取Servlet程序的別名<servlet-name>的值 getServletname()
- 獲取初始化參數<init-param> getInitParameter(name)
- 獲取ServletConfig對象 servletConfig.getServletContext()
五、ServletContext類
一、什么是ServletContext?
- ServletContext是一個接口,它表示Servlet上下文對象
- 在web.xml中<context-param>中配置Servlet上下文信息,不單獨屬于某個<servlet>,在所有<servlet>外面
- 一個web工程,只有一個ServletContext對象實例
- ServletContext對象作用域是整個web工程
二、ServletContext生命周期
ServletContext對象在工程部署啟動時創建,在工程停止時銷毀。
三、ServletContext作用
- 獲取web.xml中配置的上下文參數context-param getInitParameter(name)
- 獲取當前的工程路徑,格式:/工程路徑 getContextPath()
- 獲取工程部署后在服務器硬盤上的絕對路徑 getRealPath("/")
- 像Map一樣存取數據
- setAttribute("key","value")
- getAttribute("key")
六、HTTP協議
一、什么是HTTP協議
HTTP協議是指客戶端與服務器之間通信時,發送的數據需要遵守的規則
二、Get請求&Post請求
常見的Get請求:
- form標簽method=get
- a標簽
- link標簽引入css
- Script標簽引入js文件
- img標簽引入圖片
- iframe引入html頁面
- 在瀏覽器地址欄中輸入地址后敲回車
常見的Post請求:
- form標簽method=post
三、常用響應碼
- 200:表示請求成功
- 302:表示請求重定向
- 404:數據不存在(請求地址錯誤)
- 500:服務器內部錯誤(代碼錯誤,比如Servlet中分母為0)
七、HttpServletRequest類
作用:獲取到所有的請求信息,Tomcat服務器會把請求過來的HTTP協議信息解析封裝好到Request對象中。然后傳遞到service方法(doget和doPost)中給我們使用。
1、如何請求獲取參數
req.getParameter(name);
2、POST請求的中文亂碼解決
req.setCharacterEncoding("UTF-8")
3、請求轉發
請求轉發是指,服務器收到請求后,從一次資源跳轉到另一個資源的操作
請求轉發的特點:
- 瀏覽器地址欄不會改變
- 他們是一次請求
- 他們共享request域中的數據
- 可以轉發到WEB-INF目錄下
- 不可以訪問工程以外的資源
req.getRequestDispather("待轉發的Servlet路徑").forward(req.resp);
4、web中/斜杠的不同意義
- 在web中/斜杠是一種絕對路徑
- /斜杠 如果被瀏覽器解析,得到的地址是:http://ip:port/
- /斜杠 如果被服務器解析,得到的地址是:http://ip:port/工程路徑
特殊情況:
response.sendRedict("/");把斜杠發送給瀏覽器解析,得到http://ip:port/
八、HTTPServletRespons類
1、HTTPServletRespons類的作用
表示所有響應的信息。用來設置返回給客戶端的信息
2、如何往客戶端回傳數據
? ? ? ? 1、通過輸出往客戶端回傳數據信息(2種流)
- 字節流:getOutputStream(); 常用于下載(傳遞二進制數據);
- 字符流:getWriter();常用于回傳字符串(常用);
? ? ? ? 2、解決響應的中文亂碼
? ? ? ? resp.setContentType("text/html;charset=UTF-8");
- 同時設置服務器和客戶端都使用utf-8字符集,還設置了響應頭
- 一定要在獲取流對象之前使用才有效。
? ? ? ? 3、請求重定向
? ? ? ? resp.sendRedirect("http://localhost:8080");
特點:
- 瀏覽器地址欄會改變
- 他們是兩次請求
- 不共享request域中的數據
- 不能訪問WEB_INF目錄下
- 可以訪問工程以外的資源,如www.baidu.com