Servlet中的三大數(shù)據(jù)存放對象
- ServletContext :通常用application來表示這個(gè)對象。
- HttpSession:通常用session表示,
- HttpServletRequest:通常用request表示
ServletContext:
WEB容器在啟動(dòng)時(shí),它會(huì)為每個(gè)WEB應(yīng)用程序都創(chuàng)建一個(gè)對應(yīng)的ServletContext對象,它代表當(dāng)前web應(yīng)用。ServletConfig對象中維護(hù)了ServletContext對象的引用,開發(fā)人員在編寫servlet時(shí),可以通過config.getServletContext()方法獲得ServletContext對象。
存活時(shí)間:一直存在于項(xiàng)目中,直到項(xiàng)目被關(guān)閉。
-
ServletContext的配置:在項(xiàng)目的web.xml文件下配置如下信息
<context-param>
<param-name>key</param-name> <param-value>value</param-value> </context-param>
key為屬性的名字,value為屬性的值
-
數(shù)據(jù)共享:多個(gè)Servlet通過ServletContext對象實(shí)現(xiàn)數(shù)據(jù)共享
獲得ServletContext對象
ServletContext application = this.getServletConfig().getServletConte();
將數(shù)據(jù)存儲(chǔ)到ServletContext對象中
application.setAttribute("key", value);
獲得ServletContext的數(shù)據(jù)
application.getAttribute("key", value);
-
使用servletContext讀取資源文件
InputStream is = context.getResourceAsStream("/WEB-INF/init/db.properties"); System.out.println(is); Properties prop = new Properties(); prop.load(is); String name = (String) prop.getProperty("name"); String gender = prop.getProperty("gender");
-
使用用servletContext實(shí)現(xiàn)請求轉(zhuǎn)發(fā)
application.getRequestDispatcher("/login.jsp").forward(request, response);
HttpSession:
創(chuàng)建于服務(wù)器端,保存于服務(wù)器,維護(hù)于服務(wù)器端,每創(chuàng)建一個(gè)新的Session,服務(wù)器端都會(huì)分配一個(gè)唯一的ID,并且把這個(gè)ID保存到客戶端的Cookie中,保存形式是以JSESSIONID來保存的。
存活時(shí)間:一次會(huì)話,當(dāng)session銷毀時(shí)結(jié)束(默認(rèn)為短暫會(huì)話,若要持久會(huì)話需要設(shè)置最大存活期session.setMaxInactiveInterval(秒數(shù));)。
-
session的創(chuàng)建與獲取:服務(wù)器若有對應(yīng)的session則直接獲取,沒有則創(chuàng)建一個(gè)session。
HttpSession session=request.getSession();
-
使用session傳輸數(shù)據(jù):
session.setAttribute("key",value); session.getAttribute("key",value);
session與cookie的詳細(xì)比較:http://www.lxweimin.com/p/25802021be63
HttpServletRequest
HttpServletRequest對象代表客戶端的請求,當(dāng)客戶端通過HTTP協(xié)議訪問服務(wù)器時(shí),HTTP請求頭中的所有信息都封裝在這個(gè)對象中,通過這個(gè)對象提供的方法,可以獲得客戶端請求的所有信息。
存活時(shí)間:一次請求。
-
使用HttpServletRequest傳輸數(shù)據(jù):
返回請求中name參數(shù)的值,如果name參數(shù)有多個(gè)值,該方法返回值列表中的第一個(gè)值。如果請求中沒有找到該參數(shù),返回null
request.getParameter(String name);
返回請求中name參數(shù)的數(shù)組。
getParameterValues(String name)
將數(shù)據(jù)作為request對象的一個(gè)屬性存放到request對象中
setAttribute(String name,Object o)
獲取request對象的name屬性的屬性值
getAttribute(String name)
移除request對象的name屬性
removeAttribute(String name)
獲取request對象的所有屬性名
getAttributeNames()
使用HttpServletREquest請求轉(zhuǎn)發(fā)
request.getRequestDispatcher("/test.jsp").forward(request, response);
request.getRequestDispatcher("/test.jsp").include(request, response);
**調(diào)用forward()方法后,原先存放在HttpResponse對象中的內(nèi)容將會(huì)自動(dòng)被清除**
**調(diào)用forward()方法后,原先存放在HttpResponse對象中的內(nèi)容將不會(huì)被清除,內(nèi)容追加**