java web總結
JavaWeb總結
1.JSP運行原理
(1)用戶通過客戶端瀏覽器向服務器發(fā)送請求。
(2)JSP文件將JSP引擎編譯成Java的class文件,即servlet。(3)將產(chǎn)生的servlet加載到內(nèi)存執(zhí)行。
(4)Servlet的運行結果以HTML(或XML)形式通過web服務器返回客戶端的瀏覽器。
2.web項目設計
(1)公開目錄(2)web_INF目錄(3)Class目錄
3.JSP的基本語法
(1)腳本元素:聲明、腳本段、表達式。(2)腳本段:
(3)聲明:不會產(chǎn)生任何輸出內(nèi)容→聲明全局變量。(4)表達式:(5)EL表達式:${}
(6)指令元素:不在客戶端可見(7)page指令、include指令、taglib指令
page指令:language屬性、contentType(text/html)、text/plainapplication/msword、application/x-msexecl、PageEncoding、info、import屬性.
include指令:在JSP頁面中靜態(tài)包含一個文件taglib指令:指令元素翻譯階段執(zhí)行,動作元素執(zhí)行階段被執(zhí)行。
用于包含其他文件可以是靜態(tài)文件,也可以是動態(tài)文件。包含動態(tài)文件時用傳(建一值)考點:
4.指令與動作的區(qū)別(include)1.執(zhí)行時間不同
指令是偏譯時包含靜態(tài)文件
動作是運行時包含的文件2.引入內(nèi)容不同
指令引入靜態(tài)文本(html.jsp)。動作引入執(zhí)行頁面或severlet的應答文本。
5.JSP內(nèi)置對象
Out,request,response,session,application,page,pageContext,exception,config
request客戶端向服務端發(fā)送請求。
response用于服務器端封裝JSP處理請求后產(chǎn)生的結果。response對象的sendRedirect(url)方法相當于兩次請求。
而在網(wǎng)址不變情況下內(nèi)部跳轉不同頁面,但依舊屬于同一次請求
6.session和cookie的區(qū)別
1.存放地點不同
Session存放在服務器端,cookie存放在客戶端的硬盤里2.存活時間
session隨用戶訪問服務器而產(chǎn)生,隨客戶下線或超時而消失3.安全性
session存放在服務器端,不能被修改,且隨客戶端瀏覽器的關閉而消失,安全性較好。Cookie存放在客戶端,安全性較差。
7.數(shù)據(jù)庫
java.sql.Driver
java.sql.DriverManager加載驅(qū)動程序java.sql.Connetion表示數(shù)據(jù)庫連接對象,對數(shù)據(jù)庫一切操作都在這個基礎上
java.sql.Statement執(zhí)行SQL語句和返回結果
java.sql.ResultSet結果集用來暫時存放數(shù)據(jù)庫查詢操作結果
8.編寫程序的步驟1.裝載驅(qū)動程序
class.forName("com.mySQL.jdbc.Driver")2.定義所需連接數(shù)據(jù)庫的地址
StringmysqlURL="jdbc.mysql://host:port/dbName"3.建立與數(shù)據(jù)庫的連接
Connectionconn=DriverMannager.getConnection(url,"登錄數(shù)據(jù)庫用戶名","密碼")
4.聲明并執(zhí)行SQL語句5.處理返回的結果6.關閉對象
StringdriverStr="com.mysql.jdbc.Driver"
Stringconnstr="jdbc:mysql://localhost:3306/book";ClassforName(driverStr)
Connectionconn=DriverManager.getConnection(connstr."root"."123")第4步:建立語句對象
Statementstmt=conn.createStatement()第5步:聲明并執(zhí)行SQL語句
Stringsql="select*frombook";
ResultSetrs=stmt.executeQuery(sql);第6步:
Statement接口的3個方法:1、ResultSetexecuteQuery(Stringsql)2、intexecuteUpdate(Stringsql)3、booleanexecute(Stringsql)ResultSet的方法:1、booleannext()2、getxxx()
第7:rs.close()stmt.close()con.close()注:關閉資源的順序與打開資源順序恰好相反。第8步:異常處理
try{.........}catch(SQLExecptionex){.........}
9.JavaBean組件(可重用)
組件:是一個獨立的模塊,外界可以不了解內(nèi)部如何實現(xiàn),只需通過其提供的接口對組件進行訪問即可,組件可重用。
特點:1、實現(xiàn)代碼重復使用;2、易編寫,易維護,易使用。
10.JavaBean類的編碼約定
1、類實現(xiàn)了java.io.Serializable接口2、必須放在某個Package(包)中
3、類中如果有構造方法,那么這個方法是共有的,并且無參數(shù)4、所有屬性都是私有的(private修飾)5、getXXX:用來獲取屬性,此方法是共有的6、setXXX:用來設置屬性,此方法是共有的
7、對于boolean類型的成員變量允許使用“is”代替“get”和“set”8、類中的普通方法不適合上面的命名規(guī)則,但這個方法必是public的。
3個標記:
網(wǎng)頁中創(chuàng)建JavaBean實例
用于為bean中的屬性賦值用于獲取bean中屬性的值id=”javaBean實例名”class=”javaBean對應的類名”設置的屬性
獲取JavaBean實例指令的屬性值,并將這個值轉換成字符串顯示到JSP頁面。
11.servlet的生命周期
(1)當客戶第一次請求servlet時,servlet被加載到內(nèi)存容器會創(chuàng)建servlet實例,并調(diào)用其init()方法進行初始化工作。
(2)容器創(chuàng)建請求對象,然后調(diào)用servlet的service()方法為客戶提供服務。(3)當servlet不再被需求時,容器調(diào)用servlet的destory()方法將servlet實例銷毀。
12.Servlet開發(fā)
引入import.javax.servlet.*和import.javax,servlet.http.*包
13.Servlet過濾器
Servlet過濾器是一種java組件,它位于客戶端和處理程序之間Servlet過濾器工作原理
14.Model1和model2Model1:JSP+JavaBean
Model2:JSP+Servlet+JavaBean
Model1中,jsp頁面實現(xiàn)頁面顯示、業(yè)務邏輯和流程控制,數(shù)據(jù)處理由JavaBean完成。
優(yōu)點:進行快速和小規(guī)模的應用開發(fā)時優(yōu)勢非常明顯。缺點:不利于web應用的擴展和更新;調(diào)試和排錯困難。
Model2中,MVC模式--->模型-視圖-控制器.即把web應用的輸入輸出和處理流程按照Model.View和Controller分成三層。Model1和Model2的區(qū)別:
Model1和Model2實際上就是對采用JSP技術開發(fā)的web應用的不同模型的描述。Model1采用JSP+JavaBean技術開發(fā)web應用,它比較適合小規(guī)模應用的開發(fā),效率較高,易于實現(xiàn),但由于在JSP頁面中內(nèi)嵌了大量的Java代碼,以至于當業(yè)務邏輯復雜時,代碼可維護性、可擴展性和可重用性就會下降;Model2采用JSP+Servlet+JavaBean技術開發(fā)web應用,該模型基于MVC模式,完全實現(xiàn)了頁面顯示和邏輯的分離,它充分利用了JSP和Servlet兩種技術的優(yōu)點,JSP更適合前臺頁面的開發(fā),而Servlet更擅長服務器端程序的編寫,Model2分工明確,更適合大型項目的開發(fā)和管理。視圖(view)用于與用戶交互,可以用HTML.JSP實現(xiàn)。
15.模型(model)用于表示業(yè)務數(shù)據(jù)和實現(xiàn)業(yè)務邏輯,可以用JavaBean實現(xiàn)控制器(controller)完成流程控制,它接收來自視圖層用戶輸入的數(shù)據(jù),并調(diào)用相應的模型進行處理,最后選擇合適的視圖去響應用戶?刂茖涌梢杂肧ervlet實現(xiàn)。
優(yōu)點:MVC模式完全實現(xiàn)了頁面表示和業(yè)務邏輯的分離;MVC優(yōu)勢之一在于三層各司其職,互不干涉。缺點:沒有明確的定義。
模型層為JavaBean,實現(xiàn)了數(shù)據(jù)的表示和業(yè)務邏輯,視圖層為JSP頁面,只負責顯示功能。
控制器為Servlet,負責接收用戶的請求,設置JavaBean屬性,調(diào)用JavaBean完成業(yè)務處理,最后將處理結果交給JSP頁面顯示。16.自定義標簽
對隱式對象的操作、處理表單、訪問數(shù)據(jù)庫及其他企業(yè)級服務。
自定義標簽種類:
1.不帶有屬性和標簽體:
2.帶有屬性沒有標簽體的標簽:3.帶有屬性帶有標簽體:myBody
17.EL表達式基本語法${expr}
功能:對屬性對象的簡明訪問:${user}
對屬性對象的屬性訪問:${customer.firstname}
對屬性集合元素的訪問:對數(shù)組和list:${variable[index]}對map:${variable[key]}
對請求參數(shù)cookie等的簡單訪問.請求參數(shù)${param.custID}
Cookie對象:${cookie.userCookie}
18."."操作符和"[]"操作符${user.address}=${user[address]}訪問數(shù)組和集合元素,需使用[]${class[0].name}=${class[0][name]}
${param.username}={%=request.getparameter("userName")%}
19."."與"[]"使用存在差異
1.當訪問的數(shù)據(jù)中包含一個特殊字符(如:"."或"_"時),就必須用"[]"操作符2.當動態(tài)取值時必須使用"[]"操作符,"."操作符只能取到靜態(tài)的值
注:當"[]"操作符中的屬性名為常量時必須用""""引起,否則將會當做變量來處理.20.SQL標簽
1.標簽2.執(zhí)行數(shù)據(jù)庫查詢3.執(zhí)行數(shù)據(jù)庫更新
4.和指明參數(shù)值5.用于事務處理
21.Tomcat的目錄結構及描述:
\\bin放置啟動和關閉Tomcat的可執(zhí)行文件和批處理文件
\\common放置在此目錄中的jar、class文件,可以被此服務器下所有的web應用使用
\\conf放置Tomcat的主要配置文件\\logs放置Tomcat的日志文件
\\server放置Tomcat管理接口的應用\\src放置Tomcat相關的源代碼\\temp放置Tomcat臨時文件\\webapps放置Tomcat應用的目錄
\\work放置JSP頁面翻譯成對應的Servlet類的目錄
擴展閱讀:Java Web總結
JavaWeb總結
1.Web工作原理..........................................................................................................................2
1.1.HTTP處理步驟............................................................................................................21.2.HTTP請求的組成........................................................................................................21.3.HTTP響應的組成........................................................................................................31.4.理解HTTP無狀態(tài)協(xié)議...............................................................................................31.5.CGI與Servlet..............................................................................................................31.6.Servlet的主要任務......................................................................................................41.7.Web容器......................................................................................................................41.8.JavaWeb應用程序的組成...........................................................................................42.Servlet基礎.............................................................................................................................4
2.1.Servlet框架的組成......................................................................................................42.2.Servlet編碼和部署......................................................................................................52.3.ServletURL映射路徑.................................................................................................52.4.Servlet生命周期.........................................................................................................62.5.ServletConfig與ServletContext................................................................................63.HTTP請求................................................................................................................................8
3.1.Servlet與Web容器配合處理請求和響應.................................................................83.2.GET與POST提交方式的區(qū)別..................................................................................83.3.獲取HTTP協(xié)議請求行...............................................................................................83.4.獲取HTTP協(xié)議請求頭...............................................................................................93.5.獲取表單數(shù)據(jù)...............................................................................................................93.6.請求轉發(fā).......................................................................................................................93.7.請求范圍對象綁定.......................................................................................................94.HTTP響應................................................................................................................................9
4.1.HTTP狀態(tài)行................................................................................................................94.2.設置響應頭.................................................................................................................104.3.設置響應消息體.........................................................................................................104.4.傳輸數(shù)據(jù).....................................................................................................................10
4.4.1.傳輸文本數(shù)據(jù).................................................................................................104.4.2.傳輸二進數(shù)據(jù).................................................................................................104.4.3.請求重定向.....................................................................................................10
5.Web應用程序狀態(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)建與服務器的連接發(fā)送HTTP請求
接收客戶端HTTP請求,生成HTTP響應回發(fā)關閉與服務器的連接
1.2.HTTP請求的組成
請求行請求頭空行消息體
1.3.HTTP響應的組成
狀態(tài)行響應頭空行消息體
1.4.理解HTTP無狀態(tài)協(xié)議
主要是說,客戶機的狀態(tài),服務器是不知道的。比如說,用戶關掉瀏覽器,服務器無法得知。只能向客戶端提供靜態(tài)網(wǎng)頁內(nèi)容
1.5.CGI與Servlet
CGI:即通用網(wǎng)關接口(CommonGatewayInterface),它可以用Shell、Perl、C、PHP、Python等編寫。每次請求就打開一個CGI進程,嚴重消耗服務器資源。極大地限制了一個服務器可以支持的并發(fā)CGI用戶數(shù)量,但是安全性高。
Servlet:Servlet與Web容器被設計用來解決CGI的問題,JavaServlet的優(yōu)點在于它們的執(zhí)行速度更快于CGI程序。各個用戶請求被激活成單個程序中的一個線程,而無需創(chuàng)建單獨的進程,這意味著服務器端處理請求的系統(tǒng)開銷將明顯降低。Servlet運行在一個主進程或者一個父程序中,這就是為什么Servlet更高效的關鍵原因。
1.6.Servlet的主要任務
讀取客戶端發(fā)送的顯式和隱式數(shù)據(jù)生成結果
向客戶端發(fā)送顯式數(shù)據(jù)(即文檔)和隱式數(shù)據(jù)(HTTP響應數(shù)據(jù))
1.7.Web容器
Web容器負責管理和運行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應用程序的組成
配置文件、靜態(tài)HTML文件和JSP、類文件和包。
2.Servlet基礎
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接口----向服務器請求信息ServletResponse接口----響應客戶端請求
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響應
HttpSession接口----用于標識客戶端并存儲有關客戶信息
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體系結構: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.擴展名匹配“*.擴展名”。在這種情況下,所有以指定擴展名結尾的URL都轉向指
定的Servlet。2.3.1.3.路徑映射。路徑映射必須以"/"開始,以"/*"結尾,在這之間可以出現(xiàn)任意字符。路徑
匹配通常用于將對某個目錄的所有請求轉向一個指定的Servlet。
2.3.1.4.默認的Servlet,"/"。默認的Servlet映射用于定義一個在沒有給出路徑信息時請求
轉向的Servlet。
2.4.Servlet生命周期
Servlet的生命周期由Servlet容器控制,該容器創(chuàng)建Servlet的實例。
Servlet生命周期就是指創(chuàng)建Servlet實例后響應客戶請求直至銷毀的全過程。Serlvet生命周期的三個方法:init()-->service()-->destroy()Servlet生命周期:
實例化:Servlet容器創(chuàng)建Servlet類的實例對象,有兩種方式,一種是容器檢測到需要這個Servlet來響應第一個請求時,創(chuàng)建Servlet實例。另一種是容器啟動時創(chuàng)建Servlet實例,1,數(shù)字越小啟動順序越靠前。
初始化:Servlet容器調(diào)用Servlet的init()方法
服務:容器調(diào)用service()方法,根據(jù)請求的方式,調(diào)用doGet或者doPost方法銷毀:銷毀實例之前調(diào)用destroy()方法
2.5.
ServletConfig與ServletContext
2.5.1.ServletConfig與ServletContext的關系
一個Servlet對應一個ServletConfig,也就是說容器加載了多少個Servlet就有多少個ServletConfig。而ServletContext是在容器啟動時創(chuàng)建,一個Web應用一個ServletContext,可以把ServletContext看成是一個全局變量,所有的Servlet共享。
2.5.2.ServletContext應用上下文
屬于整個Web應用程序,可以訪問到Web應用程序資源的本地輸入流,把資源的虛擬路徑轉換為物理路徑,綁定一個對象在整個Web應用程序中共享。常用的方法有:
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里相對應的配置信息。
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容器配合處理請求和響應
3.1.1.客戶端向Web服務器發(fā)起一個HTTP請求。3.1.2.HTTP請求被Web服務器接受,如果請求的是靜態(tài)頁面,則由Web服務器負責處理。
如果請求的是JavaWeb組件(Servlet或者JSP),則移交給Web容器。Web容器可以在主機的同一個進程、不同的進程或其他的Web服務主機的進程中啟動。
3.1.3.Web容器根據(jù)Servlet的配置文件確定調(diào)用的具體Servlet類,并把HttpServletRequest
對象、HttpServletResponse對象傳給它。
3.1.4.Servlet通過HttpServletRequest對象知道客戶端的使用者是誰,客戶的請求信息是什
么和其他的一些信息。Servlet處理完請求后把要返回的信息放入HttpServletResponse對象返回到客戶端。
3.1.5.一旦Servlet完成了請求的處理,Web容器就會刷新HttpServletResponse,把控制權
返回給web服務器。
由此可見,每一次請求容器都會創(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é)議名、服務器名或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):獲取特定請求頭的值,并將其轉化為int類型
getDateHeader(name):獲取特定請求頭的值,并將其轉化為Date類型
3.5.獲取表單數(shù)據(jù)
1.getParameter(parameterName):獲取表單參數(shù)的值,參數(shù)名區(qū)分大小寫,與
HTML表單中出現(xiàn)的參數(shù)名一致,GET請求還是POST請求都可以采用相同的方式
2.getParameterValues(parameterName):獲取同一個參數(shù)名的多個參數(shù)值,返回字
符串數(shù)組對象
3.getParameterNames():以Enumeration(枚舉)的方式返回請求中所有的表單
參數(shù)名列表
3.6.請求轉發(fā)
請求轉發(fā)是客戶端向服務器發(fā)送請求后,服務器將這一次請求又交給了另一個Servlet。由另一個servlet來作出響應。請求轉發(fā)只有一次請求。
1.getRequestDispatcher(path):方法返回給定路徑的RequestDispatcher對象2.getNamedDispatcher(name):返回某個名稱的Servlet的RequestDispatcher對
象3.forward(ServletRequest,ServletResponse):派發(fā)請求和響應對象到
RequestDispatcher對象所確定的新資源(Servlet、JSP或者HTML等)4.include(ServletRequest,ServletResponse)該方法關鍵是能包含服務器端的資源
3.7.請求范圍對象綁定
變量可以可以通過request.setAttribute("value",param)將對象保存在請求范圍中,可以通過request.getAttribute("value")獲取在請求范圍內(nèi)所綁定的相應的對象但是在請求范圍之外就不能進行訪問了。結合請求轉發(fā)理解。
4.HTTP響應
4.1.HTTP狀態(tài)行
狀態(tài)行分為HTTP協(xié)議、狀態(tài)碼和狀態(tài)描述三個部分100-199:表示信息性代碼,標示客戶端應該采取的其他動作,請求正在進行。200-299:表示客戶請求成功。
300-399:表示用于已經(jīng)移走的資源文件,指示新的地址。400-499:表示由客戶端引發(fā)的錯誤。500-599:表示由服務器端引發(fā)的錯誤。
瀏覽器會根據(jù)以上的狀態(tài)碼作出相應的處理。
通過response.setStatus(HttpServletResponse.SC_NOT_FOUND),設置響應的響應碼,注意使用HttpServletResponse的常量進行設置。
4.2.設置響應頭
1.2.3.4.5.6.7.
setHeader()addHeader()setIntHeader()setDateHeader()containsHeader()setContentType()addCookie()
4.3.設置響應消息體
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ā)不同,重定向是先對客戶端作出響應,響應碼為302或者307,瀏覽器再根據(jù)重定向的路徑再發(fā)起一次新的請求。(結合請求轉發(fā)理解)5.Web應用程序狀態(tài)管理
對容器而言,每一個請求都來自于一個新的客戶,我們可以利用Cookie、Session、以及URL重寫讓服務器知道,這一系列的請求都是同一個用戶的行為。
5.1.Cookie
服務器在響應請求時將一些數(shù)據(jù)以“鍵-值”對的形式通過響應信息保存在客戶端。Cookiecookie=newCookie("cookie","tiger!");response.addCookie(cookie);
Servlet中提供了如下一系列操作Cookie的API:
1.Cookie(name,value):構造方法用于創(chuàng)建一個或多個Cookie
2.setMaxAge(intlifetime):設置Cookie的過期時間(以秒為單位)。默認值為負
值(Cookie將在瀏覽器關閉時過期)3.getMaxAge():獲取Cookie的過期時間。
4.setName(StringcookieName):設置Cookie的名字5.getName():獲取Cookie的名字
6.setValue(Stringvalue):指定Cookie的值。7.getValue():獲取Cookie的值
5.2.Session
服務器可以為客戶端創(chuàng)建并維護一個Session對象,用于存放數(shù)據(jù)。在創(chuàng)建Session對象的同時,服務器將會為該Session對象產(chǎn)生一個唯一編號,這個編號稱之為SessionID,服務器以Cookie的方式將SessionID存放在客戶端。當瀏覽器再次訪問該服務器時,會將SessionID作為Cookie信息帶到服務器,服務器可以通過該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中刪除與一個名字對應的對象。4.getCreationTime():返回第一次創(chuàng)建會話的時間。
5.getLastAccessedTime():返回容器最后一次得到該會話ID的請求時間。
6.setMaxInactiveInterval(intinterval):對于會話指定客戶請求的最大間隔時間,
以秒為單位。-1表示永不過期
7.getMaxInactiveInterval(intinterval):返回客戶請求的最大間隔時間。
8.invalidate():會話結束,當前存在在會話中的所有會話屬性也會解除綁定。9.getId():此方法返回每個session唯一的標識
Session的過期時間設置,通過在web.xml里進行配置,單位是分鐘,如果不進行配置默認的過期時間由容器決定,比如Tomcat默認的過期時間為30分鐘。
155.3.URL重寫
Session對象的正常使用要依賴于Cookie,如果用戶禁用Cookie,則瀏覽器無法再將SessionID發(fā)送至服務器,這時候服務器就無法通過SessionID檢索到以前的Session對象,并對其進行訪問了。為了解決這個問題可以利用URL地址重寫能夠取得置于Cookie中的會話,并把會話ID附加到訪問應用的各個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應用程序HttpSession(會話)一個會話交互過程ServletRequest(請求)一次請求過程范圍越大所消耗的系統(tǒng)資源就越多。并且他們都不是線程安全的,存在一定的安全隱患。
6.2.監(jiān)聽器
監(jiān)聽session,request,application這三個對象里存取數(shù)據(jù)的變化,監(jiān)聽器對象可以在事情發(fā)生前、發(fā)生后可以做一些必要的處理,Servlet監(jiān)聽器主要目的是給Web應用增加事件處理機制,以便更好地監(jiān)視和控制Web應用的狀態(tài)變化事件類型生命周期ServletContext事件屬性改變生命周期會話遷移HttpSession事件屬性改變對象綁定生命周期ServletRequest事件屬性改變描述Listener接口Servlet上下文剛被創(chuàng)建并可以開始為第一次請求服務,或者Servlet上下文將要ServletContextListener被關閉發(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ù),過濾從客戶端傳遞到服務器端的請求和響應。
過濾器可以組成一個過濾器鏈。鏈中的每個過濾器負責特定的操作和任務,客戶端的請求和響應在這些過濾器之間傳遞。
8.JSP
Servlet的缺陷:編碼、部署和調(diào)試任務繁瑣,生成動態(tài)網(wǎng)頁繁瑣,不利于項目分工,采用JSP技術編寫動態(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.服務方法是_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做為語法基礎,并且大小寫要一致
8.2.1.JSP腳本元素
聲明定義變量或者方法。在聲明部分出現(xiàn)的語句,JSP在被編譯成java文件后聲明部分為成為這個java當中的成員變量或者方法
Scriplet在Scriplet部分出現(xiàn)的語句,JSP在被編譯成java文件后Scriplet部分的代碼會被置放于_jspService()方法內(nèi)部
腳本表達式等同于out.println();8.2.2.JSP注釋
1.JSP注釋,其語法結構為:2.HTML注釋:3.Java代碼注釋
8.2.3.JSP指令
提供整個JSP頁面的相關信息,用于JSP頁面與容器之間的通信,在JSP中,有三種類型的指令:
1.page指令為當前頁面提供處理指令
2.include指令用于把另一個文件包含在JSP中3.taglib指令指定如何包含和訪問自定義標簽庫
8.2.4.JSP標準動作
1.動作是一種動態(tài)的包含
2.動作將客戶端所發(fā)出來的請求,從一個JSP網(wǎng)頁轉發(fā)到另一個
JSP頁面
3.得到或者創(chuàng)建一個JavaBean對象
8.2.5.JSP隱式對象
對象名requestresponse描述代表與請求相關的HttpServletRequest對象代表與響應相關的HttpServletResponse對象作用域requestpagepagesessionapplicationpagepagepagepagepageContext代表封裝請求某個JSP頁面時請求環(huán)境的pageContext對象session代表特定用戶請求會話的HttpSession對象。該對象只有在JSP頁面參與一個HTTP會話時才有意義application代表Web應用程序的ServletContext對象outconfigpage代表與響應輸出流相關的JspWriter對象代表JSP頁面的Servlet相關的ServletConfig對象等于Java編程語言中的this變量exception代表JSP頁面拋出的Trowable對象。這個對象只能在JSP錯誤頁面中使用9.JavaWeb開發(fā)模式
9.1.MVC模型
9.1.1.視圖
視圖是用戶看到并與之交互的界面。對老式的Web應用程序來說,視圖就是由HTML元素組成的界面,在新式的Web應用程序中,HTML依舊在視圖中扮演著重要的角色,但一些新的技術已層出不窮,它們包括MacromediaFlash和象XHTML,XML/XSL,WML等一些標識語言和Webservices.
如何處理應用程序的界面變得越來越有挑戰(zhàn)性。MVC一個大的好處是它能為你的應用程序處理很多不同的視圖。在視圖中其實沒有真正的處理發(fā)生,不管這些數(shù)據(jù)是聯(lián)機存儲的還是一個雇員列表,作為視圖來講,它只是作為一種輸出數(shù)據(jù)并允許用戶操縱的方式。
9.1.2.模型
模型表示企業(yè)數(shù)據(jù)和業(yè)務規(guī)則。在MVC的三個部件中,模型擁有最多的處理任務。例如它可能用象EJBs和ColdFusionComponents這樣的構件對象來處理數(shù)據(jù)庫。被模型返回的數(shù)據(jù)是中立的,就是說模型與數(shù)據(jù)格式無關,這樣一個模型能為多個視圖提供數(shù)據(jù)。由于應用于模型的代碼只需寫一次就可以被多個視圖重用,所以減少了代碼的重復性。
9.1.3.控制器
控制器接受用戶的輸入并調(diào)用模型和視圖去完成用戶的需求。所以當單擊Web頁面中的超鏈接和發(fā)送HTML表單時,控制器本身不輸出任何東西和做任何處理。它只是接收請求并決定調(diào)用哪個模型構件去處理請求,然后用確定用哪個視圖來顯示模型處理返回的數(shù)據(jù)。
現(xiàn)在我們總結MVC的處理過程,首先控制器接收用戶的請求,并決定應該調(diào)用哪個模型來進行處理,然后模型用業(yè)務邏輯來處理用戶的請求并返回數(shù)據(jù),最后控制器用相應的視圖格式化模型返回的數(shù)據(jù),并通過表示層呈現(xiàn)給用戶。
三層架構即“表現(xiàn)層”,“業(yè)務層”,“持久化層”。表現(xiàn)層實現(xiàn)的代表作品是Struts框架,業(yè)務層實現(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上下文中將請求轉發(fā)到JSP頁面
在JSP頁面中,從Bean中提取數(shù)據(jù)
10.JSTL與EL表達式
10.1.EL表達式解釋
${person.dog.name}這是一段EL表達式的語法,這樣的一句EL表達式如果翻譯成JAVA語句的話:
getAttribute(“person”).getDog().getName();
對應上面的EL表達式來看person就是從某個作用域中取出一個鍵的值是”person”的綁定的對象再調(diào)用綁定的對象的getDog()方法獲取到Dog對象,再調(diào)用獲取到的對象的getName方法獲取到name屬性的值
10.2.在EL表達式中的隱式變量
類別JSP作用域隱式變量名pageContextpageScoperequestScopesessionScopeapplicationScope描述用來訪問JSP的隱式對象與page作用域?qū)傩缘拿Q和值相關聯(lián)的Map類與request作用域?qū)傩缘拿Q和值相關聯(lián)的Map類與session作用域?qū)傩缘拿Q和值相關聯(lián)的Map類與application作用域?qū)傩缘拿Q和值相關聯(lián)的Map類請求參數(shù)paramparamValues包含請求參數(shù)字符串的Map類包含請求參數(shù)字符串數(shù)組(String[])的Map類包含請求頭字符串的Map類包含請求頭字符串數(shù)組(String[])的Map類按名稱存儲請求附帶的cookie的Map類請求頭headerheaderValuesCookie
cookie
友情提示:本文中關于《java web總結》給出的范例僅供您參考拓展思維使用,java web總結:該篇文章建議您自主創(chuàng)作。
來源:網(wǎng)絡整理 免責聲明:本文僅限學習分享,如產(chǎn)生版權問題,請聯(lián)系我們及時刪除。