Servlet只是一種規(guī)范,滿足我們的軟件開發(fā),還需要其它很多相關(guān)聯(lián)的對象,這里介紹一下:1,ServletConfig,ServeltContext 2,HttpServletRequest 3,Cookie,Session
一,關(guān)于Servlet的兩個對象:
1,ServletConfig:Javax.servlet.ServletConfig:是SUN制定的接口。
ServletConfig對象是Servlet配置信息對象,Servlet類在web.xml文件中配置的信息會自動被封裝到對應(yīng)的ServletConfig對象中,一個Servlet對象對應(yīng)一個ServletConfig對象。ServletConfig對象的創(chuàng)建時刻和Servlet幾乎在同一時間創(chuàng)建。這個好比,我們每個人都有一份檔案,檔案隨著我們的出生而來,隨著我們的死亡而去,記錄著我們的所有相關(guān)信息。
2,ServletContext:javax.servlet.ServletContext是SUN制定的接口。
ServletContext對象在Tomcat服務(wù)器啟動階段解析web.xml文件的時候被創(chuàng)建,一個webapp對應(yīng)一個ServletContext對象。該對象一旦被創(chuàng)建不會被銷毀,除非Tomcat服務(wù)器關(guān)閉。(web.xml文件和ServletContext對象是對應(yīng)關(guān)系。一個web.xml文件對應(yīng)一個ServletContext)。這個其實(shí)就相當(dāng)于JSP中的九大內(nèi)置對象之一——application。
這個看一下它的幾個方法,還是會經(jīng)常用的,例如一個網(wǎng)站的訪問量等,設(shè)計(jì)到整個項(xiàng)目的變量,所有用戶共享的數(shù)據(jù)需要存儲在ServletContext中:
分析總結(jié)一下:
對于Servlet這三個對象,他們之間的關(guān)系可以看做這張圖的:
二,HttpServletRequest ,這個是和HttpServlet關(guān)聯(lián)的一個對象,但是在應(yīng)用中,它在數(shù)據(jù)傳輸方面起著非常重要的作用,所以拿出來總結(jié)一下:
1,javax.servlet.http.HttpServletRequest也是SUN制定的規(guī)范、接口。
2,簡介:HttpServletRequest我們稱作請求,這個請求對象的創(chuàng)建是Tomcat服務(wù)器完成的。代表一次請求,一次請求對應(yīng)一個request對象。“HTTP請求協(xié)議”中所有的數(shù)據(jù)都被封裝到request對象中,所以我們通過request對象可以獲取用戶提交的所有數(shù)據(jù)。
3,常用方法: 獲取請求路徑
獲取請求URI
獲取參數(shù)Map
獲取參數(shù)Map集合的所有key,獲取用戶提交數(shù)據(jù)的所有name
通過參數(shù)Map集合的key,獲取參數(shù)Map集合的value(適合于復(fù)選框checkbox)
通過參數(shù)Map集合的key獲取參數(shù)Map集合value(一維數(shù)組)的首元素
獲取客戶端IP地址
轉(zhuǎn)發(fā)(轉(zhuǎn)發(fā)的下一個資源可能是Servlet、JSP、HTML),轉(zhuǎn)發(fā)是一次請求。
分析總結(jié):HttpServletRequest在數(shù)據(jù)傳遞方面非常重要,代表著一次請求。在下邊的Session中,會對比一下request,session,application三者。
三,Cookie和Seesion對象:
1,Cookie:
a,Cookie的原理:Cookie是在服務(wù)器上創(chuàng)建,發(fā)送到瀏覽器客戶端,并保存在瀏覽器上的一個Java對象;
b,Cookie和路徑的關(guān)系:默認(rèn)情況下,Cookie綁定其路徑本身,相同根路徑,子路徑,都可以觸發(fā)Cookie的發(fā)送;綁定情況下,只受固定的路徑進(jìn)行觸發(fā)。
c,Cookie和時間的關(guān)系和保存方式的關(guān)系:默認(rèn)情況下,Cookie會存儲到緩存當(dāng)中,關(guān)閉瀏覽器,其當(dāng)自動消失,當(dāng)設(shè)定時間值>0時,會保存到硬盤上,0為無效的Cookie,<0則相當(dāng)于沒有設(shè)置時間相當(dāng)于默認(rèn)的情況。
分析總結(jié):也就是在我們?yōu)g覽器上保存了訪問服務(wù)器的一些信息,(這個在我們使用的瀏覽器上應(yīng)該經(jīng)常見到的,例如訪問歷史記錄,幾周內(nèi)自動登錄等功能)方便我們對服務(wù)器的訪問。
2,HttpSession
a,Session的工作原理:在javaweb中session是一個存儲在WEB服務(wù)器端的java對象,該對象代表用戶和WEB服務(wù)器的一次會話,通過session對象可以完成數(shù)據(jù)的存取,而放在session對象中的數(shù)據(jù)都是用戶相關(guān)的。系統(tǒng)為每個訪問者都設(shè)立一個獨(dú)立的session對象,用以存取數(shù)據(jù),并且各個訪問者的session對象互不干擾。session與cookie是緊密相關(guān)的??蛻舳送ㄟ^將cookie中數(shù)據(jù)發(fā)送到服務(wù)器端,服務(wù)器從session中讀取數(shù)據(jù),進(jìn)行數(shù)據(jù)展示,加快速度。例如用戶姓名等信息會存放到session中。
b,Session的常用方法:
c,Session對象的超時設(shè)置的三種方式:
<Context path="/test" docBase="/test" defaultSessionTimeOut="3600" isWARExpanded="true" isWARValidated="false" isInvokerEnabled="true" isWorkDirPersistent="false"/>
<session-config> <session-timeout>30</session-timeout> </session-config>
session.setMaxInactiveInterval(30*60);
分析總結(jié):request,session,aplication,都是用來專門存儲數(shù)據(jù)的,那么他們都是存儲什么數(shù)據(jù)呢?有什么選擇原則么?
1,request是請求范圍的,只針對一次請求有效,范圍最小,用來存儲一次請求中需要的數(shù)據(jù),消耗內(nèi)存較少,最優(yōu)選擇; 2,session是用戶級別的,一個用戶一個session,范圍中間,用來存儲和用戶級別有關(guān)的數(shù)據(jù),選擇次之; 3,application是程序級別的,一個應(yīng)用程序,一個application,用來存儲和整個程序有關(guān)的數(shù)據(jù),消耗內(nèi)存較大,能不用則不用,但是向訪問量等全局?jǐn)?shù)據(jù)還是需要使用的。
綜上為Servlet開發(fā)中用到的一次重要對象,相互之間的關(guān)系,相互之間的區(qū)別,每一個對象的功能,使用,都需要我們熟練掌握,非常重要的。 |
|