Servlet中的三大數(shù)據(jù)存放對(duì)象
- ServletContext :通常用application來(lái)表示這個(gè)對(duì)象亚享。
- HttpSession:通常用session表示,
- HttpServletRequest:通常用request表示
ServletContext:
WEB容器在啟動(dòng)時(shí)揉抵,它會(huì)為每個(gè)WEB應(yīng)用程序都創(chuàng)建一個(gè)對(duì)應(yīng)的ServletContext對(duì)象扁凛,它代表當(dāng)前web應(yīng)用背伴。ServletConfig對(duì)象中維護(hù)了ServletContext對(duì)象的引用,開(kāi)發(fā)人員在編寫(xiě)servlet時(shí)问窃,可以通過(guò)config.getServletContext()方法獲得ServletContext對(duì)象亥鬓。
存活時(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通過(guò)ServletContext對(duì)象實(shí)現(xiàn)數(shù)據(jù)共享
獲得ServletContext對(duì)象
ServletContext application = this.getServletConfig().getServletConte();
將數(shù)據(jù)存儲(chǔ)到ServletContext對(duì)象中
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)請(qǐng)求轉(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來(lái)保存的尉姨。
存活時(shí)間:一次會(huì)話庵朝,當(dāng)session銷毀時(shí)結(jié)束(默認(rèn)為短暫會(huì)話,若要持久會(huì)話需要設(shè)置最大存活期session.setMaxInactiveInterval(秒數(shù));)。
-
session的創(chuàng)建與獲染鸥:服務(wù)器若有對(duì)應(yīng)的session則直接獲取椎瘟,沒(méi)有則創(chuàng)建一個(gè)session。
HttpSession session=request.getSession();
-
使用session傳輸數(shù)據(jù):
session.setAttribute("key",value); session.getAttribute("key",value);
session與cookie的詳細(xì)比較:http://www.reibang.com/p/25802021be63
HttpServletRequest
HttpServletRequest對(duì)象代表客戶端的請(qǐng)求侄旬,當(dāng)客戶端通過(guò)HTTP協(xié)議訪問(wèn)服務(wù)器時(shí)肺蔚,HTTP請(qǐng)求頭中的所有信息都封裝在這個(gè)對(duì)象中,通過(guò)這個(gè)對(duì)象提供的方法儡羔,可以獲得客戶端請(qǐng)求的所有信息宣羊。
存活時(shí)間:一次請(qǐng)求。
-
使用HttpServletRequest傳輸數(shù)據(jù):
返回請(qǐng)求中name參數(shù)的值笔链,如果name參數(shù)有多個(gè)值段只,該方法返回值列表中的第一個(gè)值腮猖。如果請(qǐng)求中沒(méi)有找到該參數(shù)鉴扫,返回null
request.getParameter(String name);
返回請(qǐng)求中name參數(shù)的數(shù)組。
getParameterValues(String name)
將數(shù)據(jù)作為request對(duì)象的一個(gè)屬性存放到request對(duì)象中
setAttribute(String name,Object o)
獲取request對(duì)象的name屬性的屬性值
getAttribute(String name)
移除request對(duì)象的name屬性
removeAttribute(String name)
獲取request對(duì)象的所有屬性名
getAttributeNames()
使用HttpServletREquest請(qǐng)求轉(zhuǎn)發(fā)
request.getRequestDispatcher("/test.jsp").forward(request, response);
request.getRequestDispatcher("/test.jsp").include(request, response);
**調(diào)用forward()方法后澈缺,原先存放在HttpResponse對(duì)象中的內(nèi)容將會(huì)自動(dòng)被清除**
**調(diào)用forward()方法后坪创,原先存放在HttpResponse對(duì)象中的內(nèi)容將不會(huì)被清除,內(nèi)容追加**