概念
Servlet 是服務(wù)端的組件瓷叫,運行在 Servlet 容器中妄辩,而 Servlet 容器負責 Servlet 和 客戶的通信以及調(diào)用 Servlet 的方法春瞬,Servlet 和客戶的通信采用“請求/響應(yīng)”的模式凳寺。
可以完成以下功能:
1鸭津、創(chuàng)建并返回基于客戶請求的動態(tài) HTML 頁面
2、創(chuàng)建可以嵌入到現(xiàn)有 HTML 頁面中的部分 HTML 頁面
3肠缨、與其他服務(wù)器資源進行通信
使用
當項目里找不到? Servlet 類時逆趋,需要在 Project Structure 中的 Libraries 進行添加 jar 包。
創(chuàng)建類 helloServlet 并實現(xiàn) Servlet:
在 web.xml 文件里配置和映射 Servlet:
注:必須配置和映射晒奕,為了讓網(wǎng)頁直接訪問 Java 類
運行 Tomcat闻书,并訪問 localhost:8080/hello:
可以看出 Servlet 所執(zhí)行的生命周期,如果一直刷新網(wǎng)頁則會一直執(zhí)行 service:
當我們關(guān)閉 Tomcat 時:
Servlet 生命周期的方法(以下方法都是由 Servlet 容器負責調(diào)用)
1脑慧、構(gòu)造器:只被調(diào)用一次魄眉,只有第一次請求 Servlet 時,創(chuàng)建 Servlet 的實例闷袒,調(diào)用構(gòu)造器坑律。說明 Servlet 是單實例的。
2囊骤、init 方法:只被調(diào)用一次晃择,在創(chuàng)建好實例后立即被調(diào)用,用于初始化當前 Servlet也物。
3宫屠、service 方法:被多次調(diào)用,每次請求都會調(diào)用 service 方法焦除。實際用于響應(yīng)請求的激况。
4、destroy 方法:只被調(diào)用一次,在當前 Servlet 所在的 WEB 應(yīng)用被卸載后調(diào)用乌逐,用于釋放當前 Servlet 所占用的資源竭讳。
load-on-startup 參數(shù)
1、配置在 servlet 的節(jié)點中浙踢,如下圖
2绢慢、指定 Servlet 被創(chuàng)建的時機,如果該數(shù)值若為負數(shù)洛波,則在第一次請求時被創(chuàng)建胰舆,若為 0 或者正數(shù),則在當前 WEB 應(yīng)用被 Servlet 容器加載時創(chuàng)建實例蹬挤,且數(shù)值越小越早被創(chuàng)建缚窿。
關(guān)于 servlet-mapping
1、同一個 Servlet 可以被映射到多個 URL 上焰扳,即多個 <servlet-mapping> 元素 <servlet-name> 子元素的設(shè)置值可以是同一個 Servlet 注冊名倦零。
2、在 Servlet 映射到 URL 中也可以使用 * 通配符吨悍,但是只能有兩種固定的格式:
⑴ “ *.擴展名 ”
⑵ “ /* ”
注:帶擴展名的不能帶斜桿
Servlet 初始化參數(shù)
以節(jié)點 <init-param> 配置初始化參數(shù)扫茅,且該節(jié)點位置必須在節(jié)點 <load-on-startup> 前面。
獲取初始化參數(shù):
1育瓜、通過 getInitParamter 獲取指定參數(shù)名稱的參數(shù)值
2葫隙、通過 getInitParameterNames 獲取參數(shù)名組成的 Enumeration 對象
ServletContext:
Servlet 引擎為每個 WEB 應(yīng)用都創(chuàng)建一個對應(yīng)的 ServletContext 對象,一個 WEB 應(yīng)用中的所有 Servlet 都共享同一個?ServletContext? 對象躏仇,所以?ServletContext? 對象被稱之為 application 對象恋脚。
ServletContext 由?ServletConfig 來獲取,相當于 WEB 應(yīng)用的一個大管家钙态,可以從中獲取 WEB 應(yīng)用中的各個方面的信息慧起。
配置當前 WEB 應(yīng)用的初始化參數(shù):
獲取當前 WEB 應(yīng)用的初始化參數(shù):
用法和 Servlet 獲取初始化參數(shù)一樣。
兩者區(qū)別在于册倒,Servlet 初始化參數(shù)是局部參數(shù)蚓挤,針對某個 Servlet 使用,而 ServletContext 初始化參數(shù)是全局的驻子,每個 Servlet 都可以使用灿意。
獲取當前 WEB 應(yīng)用的某個文件的的絕對路徑(不是部署前的位置):
返回的路徑其實是應(yīng)用的部署后輸出的位置:
獲取當前 WEB 應(yīng)用某個文件對應(yīng)的輸入流:
ServletRequest、ServletResponse:
ServletRequest 封裝了請求信息崇呵,可以從中獲取到任何的請求信息缤剧。
ServletResponse 封裝了響應(yīng)信息,如果給用戶什么響應(yīng)域慷,具體可以使用該接口的方法實現(xiàn)荒辕。
這兩個接口的實現(xiàn)類都是服務(wù)器給予實現(xiàn)的汗销,并在服務(wù)器調(diào)用 service 時傳入。
案例:
在 webapp 下新建 login.html抵窒,并放置一個 <form> 表單弛针,以 POST 方式提交:
新建 LoginServlet 類,在 service 里面接收參數(shù)并打永罨省:
在 web.xml 里添加配置:
其中節(jié)點 <url-pattern> 的信息對應(yīng)的是 form 表單里的 action 值削茁。
重啟 Tomcat 服務(wù)器,訪問以下地址:
分別填寫信息:
點擊 login:
打印了接收參數(shù)的值掉房,通過參數(shù)可以在 Java 類里面使用 JDBC 去訪問數(shù)據(jù)庫茧跋。
如果是以 checkbox 的方式提交參數(shù):
應(yīng)使用如下來接收多個參數(shù):
如果需要獲取更多信息,可以將 servletRequest 轉(zhuǎn)換為子接口 httpServletRequest:
servletResponse:
getWriter():返回 PrintWriter 對象卓囚,調(diào)用 print 或者 write 方法可以將信息打印到網(wǎng)頁上
setContentType():設(shè)置響應(yīng)的內(nèi)容類型
每次新建 Servlet 都得實現(xiàn) Servlet 的全部方法瘾杭,而繼承?GenericServlet 可以省略到只剩 service 方法,簡便很多捍岳。
GenericServlet 是 Servlet 接口和 ServletConfig 接口的實現(xiàn)類富寿,也是一個抽象類睬隶。
HttpServlet(實際開發(fā)用):
1锣夹、繼承自?GenericServlet,針對于 HTTP 協(xié)議所定制
2苏潜、在 service 方法中直接把 ServletRequest 和 ServletResponse 轉(zhuǎn)為?HttpServletRequest 和?HttpServletResponse银萍,可以用來獲取請求方式
3、實際開發(fā)中恤左,使用時直接繼承?HttpServlet 并重載里面的 doGet 或者 doPost 方法:
補充
Servlet 3.0 以上可以通過注解的方式來配置 servlet
表單使用
以上為本人的一些學習筆記贴唇,如有出錯歡迎指正,陸續(xù)更新7纱4疗!