Head first servlet and jsp学习笔记
學(xué)習(xí)中遇到的問題:java基礎(chǔ)不行,都忘光了。
主要是:繼承,接口,多線程,IO。尤其是多線程,在分布式系統(tǒng)中應(yīng)該使用的比較多
第一章:前言和體系結(jié)構(gòu)
HTTP協(xié)議:
TCP/IP的上層協(xié)議(應(yīng)用層)。是一個請求/響應(yīng)序列
HTTP響應(yīng):HTTP首部信息+HTTP體(多數(shù)未HTML)
HTTP請求:
GET:請求獲得一個頁面,字?jǐn)?shù)有限,參數(shù)轉(zhuǎn)化為url地址
POST:使用表單向服務(wù)器發(fā)送數(shù)據(jù)
url結(jié)構(gòu):略
web服務(wù)器:只提供靜態(tài)網(wǎng)頁,調(diào)用其他程序(cgi或servlet)提供動態(tài)網(wǎng)頁
servlet:編寫,部署,運行的小例子,P30
按照書中方法,部署servlet。其中,首次部署失敗,原因是書中xml可能與tomcat不匹配,把tomcat ? ? ? ? ? ? ? ? ??中examples的xml開頭拷貝一下就解決了。
通過這個例子,基本了解了servlet和tomcat的工作流程!
servlet的問題:println html太糟糕了,因此引入jsp,頁面設(shè)計人員只需要會用java對象即可!
?第二章:高層體系結(jié)構(gòu)
容器:Servlet沒有main方法,管理servlet的程序成為web容器。
??? Tomcat就是這樣的容器。由容器向servlet提供請求和相應(yīng),容器調(diào)用servlet的方法。
容器提供:
通信支持:隱藏了servlet與web服務(wù)器之間的API
生命周期管理:實例化和銷毀servlet實例
多線程支持:
用xml配置安全性
把jsp翻譯成servlet
注:本質(zhì)上還是計算機設(shè)計的層次化思想:只關(guān)心本層次的工作,使用底層的API,為上層提供API,極大的提高工作效率!
采用xml方式配置servlet
*提高靈活性:不必或較少修改源碼,便于維護
*提高安全性:不能讓用戶知道真是路徑
MVC:
Servlet+jsp模式業(yè)務(wù)邏輯與表示分離,但又有密切聯(lián)系,servlet中的業(yè)務(wù)邏輯只能處理web應(yīng)用,不能重用到其他應(yīng)用(如PC客戶端,無線應(yīng)用),MVC設(shè)計模式解決此問題!
模型-視圖-控制器把業(yè)務(wù)邏輯從servlet中抽取出來放到“模型”中,業(yè)務(wù)邏輯和表示清晰分離。
?
問題:每個Model的Controller都有大量重復(fù)代碼,都要寫在每一個servlet還是只需要一個servlet???
?
第三章:MVC實戰(zhàn)
不使用IDE構(gòu)建一個MVC架構(gòu)的web應(yīng)用
?構(gòu)建成功!
問題:servlet怎么把請求交給jsp并把頁面轉(zhuǎn)至jsp頁面???request和response作用域是什么???
?
第四章:請求和響應(yīng)
servlet流程:
init()
httpservlet中service()方法決定調(diào)用doGet還是doPost。
他們是抽象方法,需要用戶的servelt程序覆蓋至少一個!
servlet生命周期中(可以理解為服務(wù)器程序開啟到關(guān)閉)只有一個實例!采用多線程實現(xiàn)多用戶訪問。這里如何操作線程,共享數(shù)據(jù),線程安全等都有tomcat的web容器完成,如果要深入理解,得先學(xué)習(xí)多線程!
?*GET和POST的區(qū)別:
GET參數(shù)你能放在請求行中,數(shù)據(jù)量小,暴露在url中 ,GET原則上應(yīng)該是冪等的,同樣的操作返回相同的結(jié)果,不對系統(tǒng)產(chǎn)生影響
POST參數(shù)放在http體中,數(shù)據(jù)量大,是不冪等的,對系統(tǒng)產(chǎn)生影響!
?*介紹HttpServletRequeset和HttpServletReponse的一些API
? Servlet處理IO,重定向,請求分派
第五章: 屬性和監(jiān)聽者
*ServletConfig:可以在web.xml中配置參數(shù)
通過設(shè)置request屬性的方式可以把servlet的初始化參數(shù)傳遞給jsp
*ServlentContext:整個web-app的全局參數(shù)
*如果希望整個web應(yīng)用有一個main函數(shù),用于數(shù)據(jù)庫 初始化等操作,即為監(jiān)聽者listener
? Servlet提供ServletContextListener接口。
在上下文初始化時得到通知
從ServletContext中得到初始化參數(shù)
使用初始化參數(shù)建立數(shù)據(jù)庫鏈接
把數(shù)據(jù)庫存儲為一個屬性,是Web應(yīng)用各個部分都能訪問
在上下文撤銷時得到通知:關(guān)閉數(shù)據(jù)庫鏈接
除了上下文監(jiān)聽者,還有其他監(jiān)聽者!
*屬性:
屬性建立了名稱和對象的映射,在屬性的作用域中的web應(yīng)用中的其他程序就能通過名稱使用屬性的對象!?
3個接口可以設(shè)置屬性:ServletContext,ServletRequest,HttpSession。
*線程安全:
上下文屬性不是線程安全的!
同步一個servlet也不能阻止其他servlet和jsp訪問屬性,所以要對上下文加鎖!
會話也不是線程安全的,應(yīng)為一個會話可能有多個請求。
請求屬性是線程安全的,應(yīng)為一個請求一個線程,請求的生命周期就是線程的生命周期
?第六章 會話管理
*會話用于保存同一客戶多個請求的狀態(tài)
*會話使用coikie識別客戶id(用ip也不安全,因為可能多個用戶用一個ip),如果客戶禁用cookie,則使用url重寫!
url重寫?:不是太明白
*刪除會話,靠設(shè)置超時來完成,可以在DD中配置全局超時,也可以在程序中設(shè)置單獨的超時
*cookie:服務(wù)器與客戶之間交換信息
*會話監(jiān)聽
*會話遷移:在分布式系統(tǒng)中,Servlet,ServletConfig,ServletContext都在vm中復(fù)制,只有會話在vm中遷移(一個時刻,一個會話之存在于一個vm中)?
?
第七章 使用jsp
jsp scriplet,page指令,jsp表達(dá)式
jsp聲明:在類中定義,置于服務(wù)方法外!
jsp生命周期:首次訪問時編譯加載
初始化jsp:在DD中配置,可以重寫jspInit方法
jsp屬性:多一個pageContext,且pageContext包含其他屬性的引用
jsp指令:
page指令:定義頁面特定的屬性
taglib指令:定義jsp可以使用的標(biāo)記庫
include指令:主要用于重用頁面
Scriptlet有害論:
多數(shù)人認(rèn)為java代碼放入jsp是個不好的實踐!
難于維護,不應(yīng)要求頁面設(shè)計人員懂java
解決:EL表達(dá)式,詳見下章,可以忽略
jsp動作:下章
?
轉(zhuǎn)載于:https://www.cnblogs.com/cjrzh/p/4480523.html
總結(jié)
以上是生活随笔為你收集整理的Head first servlet and jsp学习笔记的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: NSNumber, NSValue的使用
- 下一篇: 设计模式之适配器模式(Adapter P