Java Web總結(jié)
JavaWeb
Web訪問原理客戶
1輸入網(wǎng)址5頁面內(nèi)容HTTP超文本協(xié)議2發(fā)出請求客戶端瀏覽器4返回結(jié)果服務(wù)器3處理請求瀏覽器只能讀取Html文本所以服務(wù)器返回的只是Html服務(wù)器動態(tài)生成Html頁面服務(wù)器工作原理
服務(wù)器產(chǎn)生動態(tài)頁面的方法和技術(shù):
實現(xiàn)動態(tài)輸出HTML頁面時由運行在服務(wù)端的CGI程序產(chǎn)生的,CGI根據(jù)不同客戶的請求輸出相應(yīng)的HTML頁面,然后Web服務(wù)器在把這個靜態(tài)頁面返回哥瀏覽器作為客戶端的響應(yīng)。
CGI的操作過程
服輸出生成Html
務(wù)頁面
端請求運行某
個CGI程序
CGI程序(生成所需的
Html文件)數(shù)據(jù)庫讀取數(shù)據(jù)和文件注意:CGI程序在服務(wù)器執(zhí)行,并可以和Web服務(wù)器在同一個主機上。CGI可以訪問存儲數(shù)據(jù)庫中的數(shù)據(jù)和其他系統(tǒng)中的文件。
CGI的不足:
需要為每個請求都啟動一個操作CGI的系統(tǒng)進程,開銷很大。需要重復(fù)編寫出來網(wǎng)絡(luò)歇息的代碼及進行編碼,非常耗時。
JavaServlet
JavaServlet改進的CGI
思想:CGI程序為每個請求都運行一個CGI程序的系統(tǒng)進程開銷很大,Servlet技術(shù)只需要啟動一次服務(wù)進程而且只需加載一次JVM,之后這個JVM在加載另外的類。好處:
只需啟動一個操縱系統(tǒng)進程以及加載一個JVM,大大降低了系統(tǒng)的開銷如果有多個請求需要做同樣的處理的時候,這時只需加載一個類。所有動態(tài)加載的類可以實現(xiàn)對網(wǎng)絡(luò)協(xié)議以及請求解碼的代碼共享
Servlet能夠直接額Web服務(wù)器交互,能夠各個程序之間共享數(shù)據(jù),數(shù)據(jù)庫連接池之類
的功能很容易實現(xiàn)
Servlet類重復(fù)使用PrintWriter.println();方法來輸出相應(yīng)的HTML頁面,以達到動態(tài)生成HTML頁面的效果。
注意:所有的JavaWeb服務(wù)器都應(yīng)該遵守JavaServletAPI(運用程序接口)的編碼標準。Servlet的缺點:
Servlet生成網(wǎng)頁的方法是在Java類中嵌入HTML標簽和表達式,所以修改起來很麻煩。
JSP基本原理
JSP:Servlet的模板
JavaServerPages(JSP)是一種實現(xiàn)靜態(tài)HTML和動態(tài)HTML混合編碼的技術(shù),是ServletAPI的一個擴展。
JavaBean返回的數(shù)據(jù)JSP頁面訪問原理
服務(wù)器端
瀏覽器請求調(diào)用某個JavaBean組件讀取數(shù)據(jù)庫和文件JavaBean(基于Java組件)返回HTML頁面數(shù)據(jù)庫服務(wù)器存儲的JSP文件(后綴.jsp)相應(yīng)請求JSP基本原理:Web容器出來JSP文件步驟翻譯階段編譯階段請求處理階段會話會話請求會話翻譯轉(zhuǎn)換JavaServlet實現(xiàn)代碼(.java)編譯JavaServlet實現(xiàn)類(.class):二進制文件激活請求準備JavaServlet實現(xiàn)對象Java編譯工具Java編譯工具JSP容器響應(yīng)翻譯階段:JSP文件首先被Web容器中的JSP引擎轉(zhuǎn)換成Java源代碼也是就是通過Servlet引擎
編譯階段:JSP文件所翻譯成的Java源代碼會被翻譯成可執(zhí)行的二進制文件
請求階段:當(dāng)容器接受了客戶端的請求后,就執(zhí)行前面已經(jīng)編譯成的二進制的JSP文
件,容器吧生成的頁面反饋給客戶進行顯示。
注意:一旦容器把JSP文件翻譯和編譯之后來自客戶端的每一個JSP請求就可以重用這個編譯好的二進制文件,沒有必要把同一個JSP進行翻譯和編譯。也就是說如果一個JSP文件是第一次請求要經(jīng)歷上述三個階段,如果一個JSP文件之前已經(jīng)就被請求過就沒必要經(jīng)歷翻譯和編譯階段,直接使用編譯好的二進制文件。
擴展閱讀:Java Web總結(jié)
JavaWeb總結(jié)
1.Web工作原理..........................................................................................................................2
1.1.HTTP處理步驟............................................................................................................21.2.HTTP請求的組成........................................................................................................21.3.HTTP響應(yīng)的組成........................................................................................................31.4.理解HTTP無狀態(tài)協(xié)議...............................................................................................31.5.CGI與Servlet..............................................................................................................31.6.Servlet的主要任務(wù)......................................................................................................41.7.Web容器......................................................................................................................41.8.JavaWeb應(yīng)用程序的組成...........................................................................................42.Servlet基礎(chǔ).............................................................................................................................4
2.1.Servlet框架的組成......................................................................................................42.2.Servlet編碼和部署......................................................................................................52.3.ServletURL映射路徑.................................................................................................52.4.Servlet生命周期.........................................................................................................62.5.ServletConfig與ServletContext................................................................................63.HTTP請求................................................................................................................................8
3.1.Servlet與Web容器配合處理請求和響應(yīng).................................................................83.2.GET與POST提交方式的區(qū)別..................................................................................83.3.獲取HTTP協(xié)議請求行...............................................................................................83.4.獲取HTTP協(xié)議請求頭...............................................................................................93.5.獲取表單數(shù)據(jù)...............................................................................................................93.6.請求轉(zhuǎn)發(fā).......................................................................................................................93.7.請求范圍對象綁定.......................................................................................................94.HTTP響應(yīng)................................................................................................................................9
4.1.HTTP狀態(tài)行................................................................................................................94.2.設(shè)置響應(yīng)頭.................................................................................................................104.3.設(shè)置響應(yīng)消息體.........................................................................................................104.4.傳輸數(shù)據(jù).....................................................................................................................10
4.4.1.傳輸文本數(shù)據(jù).................................................................................................104.4.2.傳輸二進數(shù)據(jù).................................................................................................104.4.3.請求重定向.....................................................................................................10
5.Web應(yīng)用程序狀態(tài)管理........................................................................................................11
5.1.Cookie.........................................................................................................................115.2.Session........................................................................................................................115.3.URL重寫....................................................................................................................126.對象作用域與Servlet事件監(jiān)聽器.......................................................................................13
6.1.對象作用域.................................................................................................................136.2.監(jiān)聽器.........................................................................................................................137.過濾器.....................................................................................................................................158.JSP...........................................................................................................................................JSP運行機制:..........................................................................................................16JSP語法和語義..........................................................................................................168.2.1.JSP腳本元素..................................................................................................168.2.2.JSP注釋..........................................................................................................178.2.3.JSP指令..........................................................................................................178.2.4.JSP標準動作..................................................................................................178.2.5.JSP隱式對象..................................................................................................17
9.JavaWeb開發(fā)模式................................................................................................................18
9.1.MVC模型...................................................................................................................18
9.1.1.視圖.................................................................................................................189.1.2.模型.................................................................................................................189.1.3.控制器.............................................................................................................189.2.MVC實現(xiàn)步驟...........................................................................................................1910.JSTL與EL表達式......................................................................................................19
10.1.EL表達式解釋.......................................................................................................1910.2.在EL表達式中的隱式變量..................................................................................19
8.1.8.2.
1.Web工作原理
1.1.HTTP處理步驟
創(chuàng)建與服務(wù)器的連接發(fā)送HTTP請求
接收客戶端HTTP請求,生成HTTP響應(yīng)回發(fā)關(guān)閉與服務(wù)器的連接
1.2.HTTP請求的組成
請求行請求頭空行消息體
1.3.HTTP響應(yīng)的組成
狀態(tài)行響應(yīng)頭空行消息體
1.4.理解HTTP無狀態(tài)協(xié)議
主要是說,客戶機的狀態(tài),服務(wù)器是不知道的。比如說,用戶關(guān)掉瀏覽器,服務(wù)器無法得知。只能向客戶端提供靜態(tài)網(wǎng)頁內(nèi)容
1.5.CGI與Servlet
CGI:即通用網(wǎng)關(guān)接口(CommonGatewayInterface),它可以用Shell、Perl、C、PHP、Python等編寫。每次請求就打開一個CGI進程,嚴重消耗服務(wù)器資源。極大地限制了一個服務(wù)器可以支持的并發(fā)CGI用戶數(shù)量,但是安全性高。
Servlet:Servlet與Web容器被設(shè)計用來解決CGI的問題,JavaServlet的優(yōu)點在于它們的執(zhí)行速度更快于CGI程序。各個用戶請求被激活成單個程序中的一個線程,而無需創(chuàng)建單獨的進程,這意味著服務(wù)器端處理請求的系統(tǒng)開銷將明顯降低。Servlet運行在一個主進程或者一個父程序中,這就是為什么Servlet更高效的關(guān)鍵原因。
1.6.Servlet的主要任務(wù)
讀取客戶端發(fā)送的顯式和隱式數(shù)據(jù)生成結(jié)果
向客戶端發(fā)送顯式數(shù)據(jù)(即文檔)和隱式數(shù)據(jù)(HTTP響應(yīng)數(shù)據(jù))
1.7.Web容器
Web容器負責(zé)管理和運行Servlet,容器對Servlet的支持包括:通信支持生命周期管理多線程支持JSP支持處理安全性
1.7.1.1.1.7.1.2.1.7.1.3.1.7.1.4.1.7.1.5.
1.8.JavaWeb應(yīng)用程序的組成
配置文件、靜態(tài)HTML文件和JSP、類文件和包。
2.Servlet基礎(chǔ)
2.1.Servlet框架的組成
Servlet框架的核心是:javax.servlet.Servlet接口,所有的Servlet都必須實現(xiàn)這一接口。Servlet框架是由2個Java包組成:javax.servlet和javax.servlet.httpjavax.servlet包中定義了所有Servlet類都必須實現(xiàn)的接口和類。javax.servlet包的接口為:
ServletConfig接口----在初始化過程中由Servlet容器使用ServletContext接口----定義Servlet用于獲取容器信息的方法ServletRequest接口----向服務(wù)器請求信息ServletResponse接口----響應(yīng)客戶端請求
Servlet接口----定義所有Servlet必須實現(xiàn)的方法javax.servlet包中的類為:
ServletInputStream類----用于從客戶端讀取二進制數(shù)據(jù)ServletOutputStream類----用于將二進制數(shù)據(jù)發(fā)送到客戶端
GenericServlet類----抽象類,定義一個通用的,獨立于底層協(xié)議的Servlet。javax.servlet.http包中定義了采用HTTP通信的HttpServlet類。
javax.servlet.http包的接口為:
HttpServletRequest接口----提供http請求HttpServletResponse接口----提供http響應(yīng)
HttpSession接口----用于標識客戶端并存儲有關(guān)客戶信息
HttpSessionAttributeListener接口----實現(xiàn)這個偵聽接口用戶獲取會話的屬性列表的改變的通知
javax.servlet.http包中的類:
HttpServlet類----擴展了GenericServlet的抽象類,用于擴展創(chuàng)建HttpServlet處理Http請求
Cookie類----創(chuàng)建一個Cookie,用于存儲Servlet發(fā)送給客戶端的信息
注意javax.servlet包和javax.servlet.http包的區(qū)別,javax.servlet.http這個包里的類都去實現(xiàn)了javax.servlet包里的接口,用于專門用于HTTP協(xié)議。
2.2.Servlet編碼和部署
Servlet體系結(jié)構(gòu):Servlet-->GenericServlet-->HttpServlet-->用戶自定義的Servlet
2.2.1.1.用戶自定義的Servlet繼承HttpServlet,重寫一下方法中的一個:doGet()和doPost()2.2.1.2.在容器中注冊Servlet,配置web.xml,在web.xml文件中加入
Hello
com.lovo.servlet.Hello
2.2.1.3.映射虛擬路徑,同樣是通過配置web.xml,在web.xml文件中加入
Hello/Hello
2.3.ServletURL映射路徑
2.3.1.1.精確模式匹配。這種類型的模式用于將請求一對一映射到指定的Servlet。
2.3.1.2.擴展名匹配“*.擴展名”。在這種情況下,所有以指定擴展名結(jié)尾的URL都轉(zhuǎn)向指
定的Servlet。2.3.1.3.路徑映射。路徑映射必須以"/"開始,以"/*"結(jié)尾,在這之間可以出現(xiàn)任意字符。路徑
匹配通常用于將對某個目錄的所有請求轉(zhuǎn)向一個指定的Servlet。
2.3.1.4.默認的Servlet,"/"。默認的Servlet映射用于定義一個在沒有給出路徑信息時請求
轉(zhuǎn)向的Servlet。
2.4.Servlet生命周期
Servlet的生命周期由Servlet容器控制,該容器創(chuàng)建Servlet的實例。
Servlet生命周期就是指創(chuàng)建Servlet實例后響應(yīng)客戶請求直至銷毀的全過程。Serlvet生命周期的三個方法:init()-->service()-->destroy()Servlet生命周期:
實例化:Servlet容器創(chuàng)建Servlet類的實例對象,有兩種方式,一種是容器檢測到需要這個Servlet來響應(yīng)第一個請求時,創(chuàng)建Servlet實例。另一種是容器啟動時創(chuàng)建Servlet實例,1,數(shù)字越小啟動順序越靠前。
初始化:Servlet容器調(diào)用Servlet的init()方法
服務(wù):容器調(diào)用service()方法,根據(jù)請求的方式,調(diào)用doGet或者doPost方法銷毀:銷毀實例之前調(diào)用destroy()方法
2.5.
ServletConfig與ServletContext
2.5.1.ServletConfig與ServletContext的關(guān)系
一個Servlet對應(yīng)一個ServletConfig,也就是說容器加載了多少個Servlet就有多少個ServletConfig。而ServletContext是在容器啟動時創(chuàng)建,一個Web應(yīng)用一個ServletContext,可以把ServletContext看成是一個全局變量,所有的Servlet共享。
2.5.2.ServletContext應(yīng)用上下文
屬于整個Web應(yīng)用程序,可以訪問到Web應(yīng)用程序資源的本地輸入流,把資源的虛擬路徑轉(zhuǎn)換為物理路徑,綁定一個對象在整個Web應(yīng)用程序中共享。常用的方法有:
getRealPath():返回一個web資源的真實路徑
getResourcePaths(path):返回一個指定路徑下的所有資源列表getResourceAsStream(path):返回一個資源的InputStreamgetResource(path):返回一個web資源的URL地址setAttribute(name,value):保存一個共享數(shù)據(jù)getAttribute(name):提取共享數(shù)據(jù)
2.5.3.ServletConfig
通過重寫有參數(shù)的init(ServletConfigconfig)方法獲取到ServletConfig對象,通過config.getInitParameter("driver")方法獲取到web.xml里相對應(yīng)的配置信息。
publicvoidinit(ServletConfigconfig)throwsServletException{
}Hello
com.lovo.servlet.Hello
driver
//TODOAuto-generatedmethodstubconfig.getInitParameter("driver");super.init(config);Hello:com.mysql.driver.Driver
3.HTTP請求
3.1.Servlet與Web容器配合處理請求和響應(yīng)
3.1.1.客戶端向Web服務(wù)器發(fā)起一個HTTP請求。3.1.2.HTTP請求被Web服務(wù)器接受,如果請求的是靜態(tài)頁面,則由Web服務(wù)器負責(zé)處理。
如果請求的是JavaWeb組件(Servlet或者JSP),則移交給Web容器。Web容器可以在主機的同一個進程、不同的進程或其他的Web服務(wù)主機的進程中啟動。
3.1.3.Web容器根據(jù)Servlet的配置文件確定調(diào)用的具體Servlet類,并把HttpServletRequest
對象、HttpServletResponse對象傳給它。
3.1.4.Servlet通過HttpServletRequest對象知道客戶端的使用者是誰,客戶的請求信息是什
么和其他的一些信息。Servlet處理完請求后把要返回的信息放入HttpServletResponse對象返回到客戶端。
3.1.5.一旦Servlet完成了請求的處理,Web容器就會刷新HttpServletResponse,把控制權(quán)
返回給web服務(wù)器。
由此可見,每一次請求容器都會創(chuàng)建去創(chuàng)建HttpServletRequest對象與HttpServletResponse
3.2.GET與POST提交方式的區(qū)別
GET方式只能提交文本數(shù)據(jù),POST即可以提交文本數(shù)據(jù)也可以提交二進制數(shù)據(jù)。GET方式一次只能提交1024個字節(jié),而POST沒有限制。
安全性問題。使用GET的時候,參數(shù)會顯示在地址欄上,而POST不會。所以,如果這些數(shù)據(jù)是中文數(shù)據(jù)而且是非敏感數(shù)據(jù),那么使用GET,如果用戶輸入的數(shù)據(jù)不是中文字符而且包含敏感數(shù)據(jù),那么還是使用POST為好。
3.3.獲取HTTP協(xié)議請求行
3.3.1.getMethod():獲取HTTP的請求方法,例如GET、POST等3.3.2.getRequestURI():獲取請求的URI資源
3.3.3.getRequestURL():獲取請求的URL,包含協(xié)議名、服務(wù)器名或IP、端口號和請求資
源但不包括查詢字符串參數(shù)
3.3.4.getQueryString():獲取請求URL后面的查詢字符串3.3.5.getProtocol():獲取HTTP的協(xié)議名和版本號
3.3.6.getContextPath():獲取請求URI資源的上下文路徑3.3.7.getServletPath():獲取Servlet的映射路徑3.4.獲取HTTP協(xié)議請求頭
1.2.3.4.5.
getHeader(name):返回指定的請求頭的值
getHeaders(name):返回一個Enumeration(枚舉)包含請求頭中的所有值getHeaderNames():特定請求中接受到的所有請求頭的名稱
getIntHeader(name):獲取特定請求頭的值,并將其轉(zhuǎn)化為int類型
getDateHeader(name):獲取特定請求頭的值,并將其轉(zhuǎn)化為Date類型
3.5.獲取表單數(shù)據(jù)
1.getParameter(parameterName):獲取表單參數(shù)的值,參數(shù)名區(qū)分大小寫,與
HTML表單中出現(xiàn)的參數(shù)名一致,GET請求還是POST請求都可以采用相同的方式
2.getParameterValues(parameterName):獲取同一個參數(shù)名的多個參數(shù)值,返回字
符串?dāng)?shù)組對象
3.getParameterNames():以Enumeration(枚舉)的方式返回請求中所有的表單
參數(shù)名列表
3.6.請求轉(zhuǎn)發(fā)
請求轉(zhuǎn)發(fā)是客戶端向服務(wù)器發(fā)送請求后,服務(wù)器將這一次請求又交給了另一個Servlet。由另一個servlet來作出響應(yīng)。請求轉(zhuǎn)發(fā)只有一次請求。
1.getRequestDispatcher(path):方法返回給定路徑的RequestDispatcher對象2.getNamedDispatcher(name):返回某個名稱的Servlet的RequestDispatcher對
象3.forward(ServletRequest,ServletResponse):派發(fā)請求和響應(yīng)對象到
RequestDispatcher對象所確定的新資源(Servlet、JSP或者HTML等)4.include(ServletRequest,ServletResponse)該方法關(guān)鍵是能包含服務(wù)器端的資源
3.7.請求范圍對象綁定
變量可以可以通過request.setAttribute("value",param)將對象保存在請求范圍中,可以通過request.getAttribute("value")獲取在請求范圍內(nèi)所綁定的相應(yīng)的對象但是在請求范圍之外就不能進行訪問了。結(jié)合請求轉(zhuǎn)發(fā)理解。
4.HTTP響應(yīng)
4.1.HTTP狀態(tài)行
狀態(tài)行分為HTTP協(xié)議、狀態(tài)碼和狀態(tài)描述三個部分100-199:表示信息性代碼,標示客戶端應(yīng)該采取的其他動作,請求正在進行。200-299:表示客戶請求成功。
300-399:表示用于已經(jīng)移走的資源文件,指示新的地址。400-499:表示由客戶端引發(fā)的錯誤。500-599:表示由服務(wù)器端引發(fā)的錯誤。
瀏覽器會根據(jù)以上的狀態(tài)碼作出相應(yīng)的處理。
通過response.setStatus(HttpServletResponse.SC_NOT_FOUND),設(shè)置響應(yīng)的響應(yīng)碼,注意使用HttpServletResponse的常量進行設(shè)置。
4.2.設(shè)置響應(yīng)頭
1.2.3.4.5.6.7.
setHeader()addHeader()setIntHeader()setDateHeader()containsHeader()setContentType()addCookie()
4.3.設(shè)置響應(yīng)消息體
response.setContentType("image/gif");方法可以處理亂碼和顯示其他形式的內(nèi)容例如把內(nèi)容以其它的形式顯示出來(如:圖片、Excel等)
4.4.傳輸數(shù)據(jù)4.4.1.傳輸文本數(shù)據(jù)
利用PrintWriterout=response.getWriter()獲取一個字符輸出流傳輸文本out.println("HelloWorld");
4.4.2.傳輸二進數(shù)據(jù)
利用OutputStringout=getOutputStream()獲取一個字節(jié)輸出流傳輸二進制數(shù)據(jù)our.write(byte[]b);
4.4.3.請求重定向
response.sendRedirect(":3030/bbs/main.html");與請求傳發(fā)不同,重定向是先對客戶端作出響應(yīng),響應(yīng)碼為302或者307,瀏覽器再根據(jù)重定向的路徑再發(fā)起一次新的請求。(結(jié)合請求轉(zhuǎn)發(fā)理解)5.Web應(yīng)用程序狀態(tài)管理
對容器而言,每一個請求都來自于一個新的客戶,我們可以利用Cookie、Session、以及URL重寫讓服務(wù)器知道,這一系列的請求都是同一個用戶的行為。
5.1.Cookie
服務(wù)器在響應(yīng)請求時將一些數(shù)據(jù)以“鍵-值”對的形式通過響應(yīng)信息保存在客戶端。Cookiecookie=newCookie("cookie","tiger!");response.addCookie(cookie);
Servlet中提供了如下一系列操作Cookie的API:
1.Cookie(name,value):構(gòu)造方法用于創(chuàng)建一個或多個Cookie
2.setMaxAge(intlifetime):設(shè)置Cookie的過期時間(以秒為單位)。默認值為負
值(Cookie將在瀏覽器關(guān)閉時過期)3.getMaxAge():獲取Cookie的過期時間。
4.setName(StringcookieName):設(shè)置Cookie的名字5.getName():獲取Cookie的名字
6.setValue(Stringvalue):指定Cookie的值。7.getValue():獲取Cookie的值
5.2.Session
服務(wù)器可以為客戶端創(chuàng)建并維護一個Session對象,用于存放數(shù)據(jù)。在創(chuàng)建Session對象的同時,服務(wù)器將會為該Session對象產(chǎn)生一個唯一編號,這個編號稱之為SessionID,服務(wù)器以Cookie的方式將SessionID存放在客戶端。當(dāng)瀏覽器再次訪問該服務(wù)器時,會將SessionID作為Cookie信息帶到服務(wù)器,服務(wù)器可以通過該SessionID檢索到以前的Session對象,并對其進行訪問。
HttpSessionsession=request.getSession(),容器在第一次調(diào)用getSession()方法的時候創(chuàng)建Session對象將Session對象存放于容器內(nèi),直到Session過期。另外還可以通過isNew()方法來判斷是不是第一次創(chuàng)建Session
HttpSession接口常用的一些方法:
1.setAttribute(java.lang.String,java.lang.Object):在Session對象中用一個名字綁
定一個對象。
2.getAttribute(java.lang.String):通過名字獲取Session對象中保存的對象。3.removeAttribute(java.lang.String):在Session中刪除與一個名字對應(yīng)的對象。4.getCreationTime():返回第一次創(chuàng)建會話的時間。
5.getLastAccessedTime():返回容器最后一次得到該會話ID的請求時間。
6.setMaxInactiveInterval(intinterval):對于會話指定客戶請求的最大間隔時間,
以秒為單位。-1表示永不過期
7.getMaxInactiveInterval(intinterval):返回客戶請求的最大間隔時間。
8.invalidate():會話結(jié)束,當(dāng)前存在在會話中的所有會話屬性也會解除綁定。9.getId():此方法返回每個session唯一的標識
Session的過期時間設(shè)置,通過在web.xml里進行配置,單位是分鐘,如果不進行配置默認的過期時間由容器決定,比如Tomcat默認的過期時間為30分鐘。
155.3.URL重寫
Session對象的正常使用要依賴于Cookie,如果用戶禁用Cookie,則瀏覽器無法再將SessionID發(fā)送至服務(wù)器,這時候服務(wù)器就無法通過SessionID檢索到以前的Session對象,并對其進行訪問了。為了解決這個問題可以利用URL地址重寫能夠取得置于Cookie中的會話,并把會話ID附加到訪問應(yīng)用的各個URL最后。response.encodeURL(“/bbs/index.html”)用于鏈接
response.encodeRedirectURL(“/bbs/index.html”)用于重定向
6.對象作用域與Servlet事件監(jiān)聽器
6.1.對象作用域
在Servlet里可以用一個名字綁定一個對象通過setAttribute(String,Object)綁定,通過getAttribute(Sting)獲取一個所綁定的對象。ServletContext對象、HttpSession對象、ServletRequest對象都有這兩個方法。
ServletContext(上下文)整個Web應(yīng)用程序HttpSession(會話)一個會話交互過程ServletRequest(請求)一次請求過程范圍越大所消耗的系統(tǒng)資源就越多。并且他們都不是線程安全的,存在一定的安全隱患。
6.2.監(jiān)聽器
監(jiān)聽session,request,application這三個對象里存取數(shù)據(jù)的變化,監(jiān)聽器對象可以在事情發(fā)生前、發(fā)生后可以做一些必要的處理,Servlet監(jiān)聽器主要目的是給Web應(yīng)用增加事件處理機制,以便更好地監(jiān)視和控制Web應(yīng)用的狀態(tài)變化事件類型生命周期ServletContext事件屬性改變生命周期會話遷移HttpSession事件屬性改變對象綁定生命周期ServletRequest事件屬性改變描述Listener接口Servlet上下文剛被創(chuàng)建并可以開始為第一次請求服務(wù),或者Servlet上下文將要ServletContextListener被關(guān)閉發(fā)生的事件Servlet上下文內(nèi)的屬性被增加、刪除或者替換時發(fā)生的事件HttpSession被創(chuàng)建、無效或超時時發(fā)生HttpSession被激活或鈍化時發(fā)生在HttpSession中的屬性被增加、刪除、替換時發(fā)生對象被綁定到或者移出HttpSession時發(fā)生。在Servletr請求開始被Web組件處理時發(fā)生在ServletRequest對象中的屬性被增加、刪除、替換時發(fā)生ServletRequestListenerServletRequestAttributeListenerHttpSessionAttributeListenerHttpSessionBindingListenerServletContextAttributeListenerHttpSessionListenerHttpSessionActivationListener7.過濾器
一個中間組件,用于攔截源數(shù)據(jù)和目的數(shù)據(jù)之間的消息,過濾二者之間傳遞的數(shù)據(jù),過濾從客戶端傳遞到服務(wù)器端的請求和響應(yīng)。
過濾器可以組成一個過濾器鏈。鏈中的每個過濾器負責(zé)特定的操作和任務(wù),客戶端的請求和響應(yīng)在這些過濾器之間傳遞。
8.JSP
Servlet的缺陷:編碼、部署和調(diào)試任務(wù)繁瑣,生成動態(tài)網(wǎng)頁繁瑣,不利于項目分工,采用JSP技術(shù)編寫動態(tài)頁面就能,由HTML語句和嵌套在其中的Java代碼組成的一個普通文本文件。JSP頁面的擴展名必須為.jsp,部署在Web工程的根目錄下,Web容器第一次接收到對某個JSP頁面的請求后,首先自動將該JSP頁面翻譯為Servlet代碼,Tomcat將翻譯后的代碼放在Tomcat安裝目錄的/work子目錄下,也可以說所有JSP頁面本質(zhì)上就是Serlvet程序,但是不需要配置web.xml,所見即所得,很好的彌補了上述中Servlet的缺陷。
8.1.JSP運行機制:
1.頁面翻譯2.頁面編譯3.類裝載4.實例化
5.初始化方法是jspInit()6.服務(wù)方法是_jspService()7.銷毀方法是jspDestroy()
JSP生命周期完全遵循Servlet生命周期從15步只會在JSP頁面第一次訪問的時候才執(zhí)行被實例化后就像Servlet一樣一直存在于容器中了。
8.2.JSP語法和語義
JSP網(wǎng)頁主要由元素(Element)和模板數(shù)據(jù)(TemplateData)兩個部分組成,模板數(shù)據(jù)是JSP的靜態(tài)部分WEB容器不處理,元素則是必須經(jīng)由WEB容器解釋,元素都是以XML做為語法基礎(chǔ),并且大小寫要一致
8.2.1.JSP腳本元素
聲明定義變量或者方法。在聲明部分出現(xiàn)的語句,JSP在被編譯成java文件后聲明部分為成為這個java當(dāng)中的成員變量或者方法
Scriplet在Scriplet部分出現(xiàn)的語句,JSP在被編譯成java文件后Scriplet部分的代碼會被置放于_jspService()方法內(nèi)部
腳本表達式等同于out.println();8.2.2.JSP注釋
1.JSP注釋,其語法結(jié)構(gòu)為:2.HTML注釋:3.Java代碼注釋
8.2.3.JSP指令
提供整個JSP頁面的相關(guān)信息,用于JSP頁面與容器之間的通信,在JSP中,有三種類型的指令:
1.page指令為當(dāng)前頁面提供處理指令
2.include指令用于把另一個文件包含在JSP中3.taglib指令指定如何包含和訪問自定義標簽庫
8.2.4.JSP標準動作
1.動作是一種動態(tài)的包含
2.動作將客戶端所發(fā)出來的請求,從一個JSP網(wǎng)頁轉(zhuǎn)發(fā)到另一個
JSP頁面
3.得到或者創(chuàng)建一個JavaBean對象
8.2.5.JSP隱式對象
對象名requestresponse描述代表與請求相關(guān)的HttpServletRequest對象代表與響應(yīng)相關(guān)的HttpServletResponse對象作用域requestpagepagesessionapplicationpagepagepagepagepageContext代表封裝請求某個JSP頁面時請求環(huán)境的pageContext對象session代表特定用戶請求會話的HttpSession對象。該對象只有在JSP頁面參與一個HTTP會話時才有意義application代表Web應(yīng)用程序的ServletContext對象outconfigpage代表與響應(yīng)輸出流相關(guān)的JspWriter對象代表JSP頁面的Servlet相關(guān)的ServletConfig對象等于Java編程語言中的this變量exception代表JSP頁面拋出的Trowable對象。這個對象只能在JSP錯誤頁面中使用9.JavaWeb開發(fā)模式
9.1.MVC模型
9.1.1.視圖
視圖是用戶看到并與之交互的界面。對老式的Web應(yīng)用程序來說,視圖就是由HTML元素組成的界面,在新式的Web應(yīng)用程序中,HTML依舊在視圖中扮演著重要的角色,但一些新的技術(shù)已層出不窮,它們包括MacromediaFlash和象XHTML,XML/XSL,WML等一些標識語言和Webservices.
如何處理應(yīng)用程序的界面變得越來越有挑戰(zhàn)性。MVC一個大的好處是它能為你的應(yīng)用程序處理很多不同的視圖。在視圖中其實沒有真正的處理發(fā)生,不管這些數(shù)據(jù)是聯(lián)機存儲的還是一個雇員列表,作為視圖來講,它只是作為一種輸出數(shù)據(jù)并允許用戶操縱的方式。
9.1.2.模型
模型表示企業(yè)數(shù)據(jù)和業(yè)務(wù)規(guī)則。在MVC的三個部件中,模型擁有最多的處理任務(wù)。例如它可能用象EJBs和ColdFusionComponents這樣的構(gòu)件對象來處理數(shù)據(jù)庫。被模型返回的數(shù)據(jù)是中立的,就是說模型與數(shù)據(jù)格式無關(guān),這樣一個模型能為多個視圖提供數(shù)據(jù)。由于應(yīng)用于模型的代碼只需寫一次就可以被多個視圖重用,所以減少了代碼的重復(fù)性。
9.1.3.控制器
控制器接受用戶的輸入并調(diào)用模型和視圖去完成用戶的需求。所以當(dāng)單擊Web頁面中的超鏈接和發(fā)送HTML表單時,控制器本身不輸出任何東西和做任何處理。它只是接收請求并決定調(diào)用哪個模型構(gòu)件去處理請求,然后用確定用哪個視圖來顯示模型處理返回的數(shù)據(jù)。
現(xiàn)在我們總結(jié)MVC的處理過程,首先控制器接收用戶的請求,并決定應(yīng)該調(diào)用哪個模型來進行處理,然后模型用業(yè)務(wù)邏輯來處理用戶的請求并返回數(shù)據(jù),最后控制器用相應(yīng)的視圖格式化模型返回的數(shù)據(jù),并通過表示層呈現(xiàn)給用戶。
三層架構(gòu)即“表現(xiàn)層”,“業(yè)務(wù)層”,“持久化層”。表現(xiàn)層實現(xiàn)的代表作品是Struts框架,業(yè)務(wù)層實現(xiàn)的代表作品是Spring,持久層實現(xiàn)的代表作品是Hibernate。
9.2.MVC實現(xiàn)步驟
1.2.3.4.5.6.
定義一系列Bean來表示數(shù)據(jù)使用一個Servlet來處理請求在Servlet中填充Bean
在Servlet中,將Bean存儲到請求、會話或者Servlet上下文中將請求轉(zhuǎn)發(fā)到JSP頁面
在JSP頁面中,從Bean中提取數(shù)據(jù)
10.JSTL與EL表達式
10.1.EL表達式解釋
${person.dog.name}這是一段EL表達式的語法,這樣的一句EL表達式如果翻譯成JAVA語句的話:
getAttribute(“person”).getDog().getName();
對應(yīng)上面的EL表達式來看person就是從某個作用域中取出一個鍵的值是”person”的綁定的對象再調(diào)用綁定的對象的getDog()方法獲取到Dog對象,再調(diào)用獲取到的對象的getName方法獲取到name屬性的值
10.2.在EL表達式中的隱式變量
類別JSP作用域隱式變量名pageContextpageScoperequestScopesessionScopeapplicationScope描述用來訪問JSP的隱式對象與page作用域?qū)傩缘拿Q和值相關(guān)聯(lián)的Map類與request作用域?qū)傩缘拿Q和值相關(guān)聯(lián)的Map類與session作用域?qū)傩缘拿Q和值相關(guān)聯(lián)的Map類與application作用域?qū)傩缘拿Q和值相關(guān)聯(lián)的Map類請求參數(shù)paramparamValues包含請求參數(shù)字符串的Map類包含請求參數(shù)字符串?dāng)?shù)組(String[])的Map類包含請求頭字符串的Map類包含請求頭字符串?dāng)?shù)組(String[])的Map類按名稱存儲請求附帶的cookie的Map類請求頭headerheaderValuesCookie
cookie
友情提示:本文中關(guān)于《Java Web總結(jié)》給出的范例僅供您參考拓展思維使用,Java Web總結(jié):該篇文章建議您自主創(chuàng)作。
來源:網(wǎng)絡(luò)整理 免責(zé)聲明:本文僅限學(xué)習(xí)分享,如產(chǎn)生版權(quán)問題,請聯(lián)系我們及時刪除。