1、注冊Servlet的訪問路徑
精確匹配(名稱)
a、給Servlet取唯一的一個訪問名,只能通過該訪問名訪問這個Servlet
b、特征:比較直觀,但是比較麻煩
c、舉例
查詢員工:/findEmp
刪除員工:/deleteEmp
新增員工:/addEmp
通配符(/*)
a、任何請求都可以訪問這個Servlet
b、特征:可以使用一個Servlet處理項目中的所有請求
從而達到簡化Servlet注冊的目的
c、舉例:ActionServlet —》/*
所有的請求都交給actionServlet
后綴(*.abc)
a、帶有“abc”后綴的請求都可以訪問此Servlet
b、特點:每一個模塊單獨使用一個Servlet處理業務,用后綴區分模塊
c、舉例
員工模塊(增刪改查員工)
EmpServlet——>.emp
部門模塊(增刪改查)
DeptServlet——>.dept
注意此方案也可以寫成一個Servlet處理所有請求
即將所有請求當成一個模塊
ActionServlet——>*.do
2、項目中的做法
在項目中,為了減少web.xml的配置,通常會使用一個Servlet處理所有請求
a、參考SpringMVC框架的做法
Servlet——>*.do
即采用第三種方案(后綴)處理所有請求
b、參考Struts2框架的做法
Filter(類似于Servlet)——?/*
采用第二種方案(通配符)處理所有請求
c、注意:
①在這種方案下寫Servlet,一個Servlet處理全部請求
那么必須事先約定哪個功能對應哪個請求,然后此Servlet才能遵循這個約定處理業務
②開發之前必須完成這些約定(開發規范)
3、重構emp項目
a、目標:使用一個Servlet處理所有的請求
b、規范:
所有的請求后綴都是.do結尾
員工模塊 :查詢findEmp.do
保存:saveEmp.do
刪除deleteEmp.do
部門模塊
查詢:findDept.do
保存:saveDept.do
DAO
什么是DAO
data access object,封裝了數據訪問邏輯,調用者(一般是業務邏輯模塊 )不需要了解底層的數據訪問細節就可以實現數據訪問,這樣一來,當底層的數據訪問細節發生改變時,不會影響到調用者
EmpDaoJ dao=new EmpDaoJ()
EmpDaoH dao=new EmpDaoH()
如何寫一個DAO
a、實體類
為了方便處理數據庫中的記錄,可以定義與記錄對應的實體類,既可以講數據庫中的記錄轉成一個實體類的實例
比如Emp類,提供了id name salary age屬性以及相關的get set方法,我們可以將t_emp表中的記錄轉換成一個Emp對象
b、dao接口
申明一些數據訪問方法,這些方法不要涉及具體技術,
如:public void save(Emp e) throws SQLException;
SQLException是JDBC 中出現的異常,他涉及到了具體的技術Jdbc
可以改成:public void save(Emp e)throws Exception;
dao的實現類
采用具體的技術dao接口
如使用jdbc實現dao接口EmpdapjdbcImpl
dao工廠(工廠模式)
工廠類,封裝了對象創建的細節,為調用者提供方護額要求 的對象
重構emp項目
1、定義接口EmpDao
2、援用的EmpDao改成EmpDaoJdbcImpl,并實現Empdao接口
3、修改Servlet中的dao