01_Servlet的概述&入門案例
Servlet
是Java所提供的一門用於開發動態WEB資源的技術,也是JavaEE的規範之一
開發步驟
創建一個WEB項目
在WEB項目中創建一個類,讓該類去實現Servlet接口(繼承Servlet接口的實現類)
在web.xml文件中進行相關的配置
<servlet>
<servlet-name>DemoServlet</servlet-name>
<servlet-class>com.heima.servlet.DemoServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>DemoServlet</servlet-name>
<url-pattern>/DemoServlet</url-pattern>
</servlet-mapping>
發佈WEB項目至WEB服務器
02_Servlet的執行過程
03_Servlet的體系結構
04_使用Eclipse創建Servlet
05_Servlet的生命週期
出生
第一次訪問Servlet時由WEB服務器創建對象
第一次訪問Servlet時進行初始化,並調用方法init()
活着
每次訪問Servlet都會調用他的service方法
死亡
當WEB服務器關閉的時候會銷燬Servlet的對象
當WEB服務器關閉的時候會調用destory()方法
06_Servlet的線程安全問題
如果有多個客戶端併發的訪問同一個Servlet,WEB服務器會爲每一個客戶端的請求創建一個線程,在線程中調用Servlet的service方法,
如果多個線程併發的訪問同樣的數據,那這個時候就有可能會出現線程的安全問題
解決方案
把有可能會出現問題的代碼扔到同步代碼塊裏面
讓Servlet去實現一個接口,SingleThreadModel
儘量減少使用成員變量
servlet-mapping
除了可以配置資源名稱,也可以進行路徑的配置,而且路徑可以有多層
同一個Servlet我們可以配置多個映射路徑
配置Servlet映射路徑時可以使用通配符(*),使用通配符只有兩種格式
格式1
*.擴展名,比如*.do
不能以正斜槓開頭
格式2
可以使用正斜槓開頭,也需要使用"/*"來結尾
不能在*後面加上擴展名
load-on-startup
tomcat啓動的時候直接創建Servlet的對象
08_ServletConfig的概述和測試
ServletConfig對象
在Servlet的配置文件中,可以使用init-param標籤可以爲Servlet配置一些初始化參數,
可以使用ServletConfig對象來獲取這些初始化參數
ServletConfig對象的獲取
一,通過init方法來獲取,他會作爲參數傳遞進來
二,調用方法 getServletconfig來獲取
09_ServletContext概述&獲取WEB應用的初始化參
WEB服務器啓動的時候,會爲每一個WEB應用程序創建一個對應的ServletContext對象,他代表了當前的WEB應用,也稱之爲是WEB應用的上下文
作用
獲取WEB應用的初始化參數
10_ServletContext實現數據的共享
作用
讓多個Servlet實現數據的共享,域對象
域對象:有範圍的Map,讓數據在整個應用所共享
11_ServletContext的其他功能
作用
獲取當前WEB應用的絕對路徑
轉發
將請求轉發給另外一個WEB資源,可以是Servlet,JSP,HTML
只能轉發到內部資源
共享請求和響應對象
地址欄中的路徑不會發生變化
在轉發之後響應的內容會被取消
包含
用於在響應中包含其他的WEB資源
只能轉發到內部資源
共享請求和響應對象
地址欄中的路徑不會發生變化
包含前後可以繼續的響應其他內容
12_JavaWeb開發中常用的路徑
絕對路徑
物理路徑,在磁盤中的路徑,以盤符開頭
比如D:\java\apache-tomcat-7.0.65\webapps\myServlet
相對路徑
不以盤符開頭,相對於某個路徑
不以正斜槓開頭
直接寫路徑和資源名稱,相對於當前路徑,和當前WEB資源在同一個路徑下
以正斜槓開頭
服務器端
Servlet映射路徑,轉發路徑和包含路徑
正斜槓代表的當前WEB應用的根路徑
客戶端
a,img,form
正斜槓代表的WEB服務器的根路徑,如果我們要訪問某個應用下的WEB自已,需要手動的加上應用的名稱