關(guān)于Servlet的部分重點(diǎn)內(nèi)容(接口及實(shí)現(xiàn)類、生命周期、配置方法、虛擬路徑及多重映射
1、Servlet 接口及其實(shí)現(xiàn)類GenericServlet和HttpServlet,以及他們之間的關(guān)系是什么?
GenericServlet是一個(gè)抽象類,為Servlet接口提供了部分實(shí)現(xiàn),并沒有實(shí)現(xiàn)http的請(qǐng)求處理;HttpServlet是GenericServlet的子類,它繼承了GenericServlet的所有方法,并且為http請(qǐng)求中的post,get等方式提供了具體的操作方法
2、Servlet生命周期的三個(gè)階段是什么?
初始化階段、運(yùn)行階段、銷毀階段
初始化階段:
①客戶端向Servlet容器發(fā)出請(qǐng)求訪問Servlet
②Servlet容器解析請(qǐng)求
③檢查內(nèi)存中有無Servlet對(duì)象,沒有就創(chuàng)建Servlet實(shí)例對(duì)象
④調(diào)用init()方法完成Servlet的初始化
運(yùn)行階段:
①調(diào)用service ()方法
Servlet容器會(huì)為客戶端請(qǐng)求創(chuàng)建代表http請(qǐng)求的ServletRequest對(duì)象和代表http響應(yīng)的ServletResponse對(duì)象,然后將它們作為參數(shù)傳遞給Servlet的service ()方法。service()方法從從ServletRequest對(duì)象中獲得客戶端請(qǐng)求信息并處理該請(qǐng)求,通過ServletResponse對(duì)象生成響應(yīng)結(jié)果。
②輸出響應(yīng)信息
③返回響應(yīng)
在Servlet的生命周期內(nèi),對(duì)于Servlet的每一次訪問請(qǐng)求,Servlet容器都會(huì)調(diào)用一次Servlet的service()方法,并且創(chuàng)建新的ServletRequest和ServletResponse對(duì)象。
銷毀階段:
當(dāng)服務(wù)器關(guān)閉或web應(yīng)用被移除出容器時(shí),Servlet會(huì)隨著web應(yīng)用的銷毀而銷毀,在銷毀之前會(huì)調(diào)用Servlet的destroy()方法(只調(diào)用一次),釋放Servlet對(duì)象占用的資源
3、如何對(duì)Servlet類進(jìn)行配置?有哪些方法?
Servlet的配置主要有使用Web應(yīng)用的配置文件web.xml和使用@WebServlet注解
(1)使用Web應(yīng)用的配置文件web.xml
①在web.xml文件中,通過<servlet>標(biāo)簽進(jìn)行注冊(cè)
②把Servlet映射到URL地址,使用<servlet-mapping>標(biāo)簽進(jìn)行映射,使用<servlet-name>子標(biāo)簽指定要映射的Servlet名稱,名稱要和之前在<servlet>標(biāo)簽下注冊(cè)的相同;使用<url-pattern>子標(biāo)簽映射URL地址,地址前必須加"/",否則訪問不到。
(2) @WebServlet注解配置Servlet
Servlet 3.0之后提供了@Servlet注解,簡(jiǎn)化了Servlet的配置
@WebServlet注解用于代替web.xml文件中的<servlet><servlet-mapping>等標(biāo)簽,該注解將會(huì)在項(xiàng)目部署時(shí)被容器處理,容器會(huì)根據(jù)具體的屬性配置將相應(yīng)的類部署為Servlet。
①定義@WebServlet注解時(shí),value屬性或者urlPattern屬性通常是必須的,但二者不能共存,如果同時(shí)定義,通常是忽略value的值
②@WebServlet注解可以標(biāo)注在任意一個(gè)繼承了HttpServlet類的類之上,屬于類級(jí)別的注解。
4、什么是Servlet的虛擬路徑?如何實(shí)現(xiàn)Servlet的多重映射?如何在Servlet映射路徑中使用通配符?
客戶端通過 URL 地址來訪問 Web 服務(wù)器中的資源,Servlet 程序若想被外界訪問,就必須被映射到一個(gè) URL 地址上。很多時(shí)候,該 URL 地址和 Servlet 程序的物理路徑(在硬盤上的存儲(chǔ)位置)并不一致,因此它被稱為虛擬路徑。
5、ServletConfig 接口中的常用方法及其作用有哪些?
String getInitParameter(String name)
根據(jù)初始化參數(shù)名返回對(duì)應(yīng)的初始化參數(shù)值
Enumeration getInitParameterNames()
返回一個(gè)Enumeration對(duì)象,其中包含了所有的初始化參數(shù)名
ServletContext getServletContext()
返回一個(gè)代表當(dāng)前Web應(yīng)用的ServletContext對(duì)象
String getServletName()
返回Servlet的名字
6、ServletContext對(duì)象有什么特性?
每一個(gè)Web應(yīng)用都有一個(gè)唯一的ServletContext對(duì)象。ServletContext對(duì)象不僅封裝了當(dāng)前Web應(yīng)用的所有信息,而且是先看多個(gè)Servlet之間的數(shù)據(jù)共享
7、對(duì)于每一個(gè)訪問請(qǐng)求,Servlet 是否會(huì)創(chuàng)建一個(gè)新的HttpServletRequest對(duì)象和HttpServletResponse對(duì)象?
是的。
8、HttpServletRequest對(duì)象和HttpServletResponse對(duì)象分別可以用來做什么?
HttpServletRequest專門用于封裝http請(qǐng)求消息,可用于獲取請(qǐng)求消息的請(qǐng)求信息、請(qǐng)求頭,跳轉(zhuǎn)Servlet,獲取請(qǐng)求參數(shù),通過Request對(duì)象傳遞數(shù)據(jù)。
HttpServletResponse專門用于封裝http響應(yīng)消息,可用于向客戶端發(fā)送狀態(tài)碼、響應(yīng)消息頭、響應(yīng)消息體,實(shí)現(xiàn)請(qǐng)求重定向。