1,開發(fā)一個servlet大致需要的步驟:
(1),編寫servlet源碼并編譯。
(2),在web.xml進行相應(yīng)的配置。
(3),將包含該servlet的web應(yīng)用程序部署到web容器里,并啟動web容器。
(4),通過瀏覽器訪問該servlet。
2,servlet 的四個周期: 加載,初始化(init()),提供服務(wù)(service()),銷毀(detory())
3,get的請求方式會把請求的參數(shù)追加到請求的url后面,首先在url的后面加一個?,然后使用"參數(shù)名=參數(shù)值",的形式追加參數(shù)。
post請求方式則是把請求的參數(shù)放在請求的正文里,不能直接通過url看到。,
4,獲取客戶端參數(shù)的兩種方式:getParament()(只有一哥 參數(shù))和getParamentValues()(用于多值的參數(shù))
例子:
String username= request.getParament("username")
String[] hobbies=request.getParamentValues("hobby");
5,cookie:記錄在客戶端瀏覽器的數(shù)據(jù),它的格式是“名-值”對,一般可以通過cookie保存一些用戶的數(shù)據(jù),如,登錄名,密碼等。
java web容器會在用戶第一次請求的時候在瀏覽器的cookie里加入 一條名為“jsessionid”的數(shù)據(jù),同樣web容器也有。以后的每次請求瀏覽器都會把cookie的值傳回到服務(wù)器端,所以服務(wù)器就會根據(jù)‘jsessionid’的值跟蹤一個用戶了。瀏覽器關(guān)閉,跟蹤結(jié)束。(回話的時間是有限制的)
6,servlet轉(zhuǎn)發(fā)一個http請求分為直接轉(zhuǎn)發(fā)和間接轉(zhuǎn)發(fā)。
間接轉(zhuǎn)發(fā)本質(zhì)是兩次http請求,服務(wù)器端在響應(yīng)第一次請求的時候,讓瀏覽器再向另外一個url發(fā)送,從而達到轉(zhuǎn)發(fā)的目的。
直接轉(zhuǎn)發(fā)是瀏覽器只發(fā)出一次請求,servlet把請求轉(zhuǎn)發(fā)給servlet,Html,jsp或其他信息資源,有第二個信息資源響應(yīng)該請求,在請求對象request中保存的對象對于每個信息資源都是共享的。
web應(yīng)用程序大多會有一個控制器,由控制器來控制請求應(yīng)該轉(zhuǎn)發(fā)給那個信息資源,然后有信息資源處理請求,處理我完后還可能轉(zhuǎn)發(fā)給另外的信息資源返回給用戶,這個過程既是經(jīng)典的MVC模式。
7,過濾器:就是在目標(biāo)資源和源頭資源之間起到過濾作用的一個東西。對于web應(yīng)用程序來說,過濾器是處于服務(wù)器端的,隊請求消息和響應(yīng)消息進行過濾的一中組件。
過濾器是一種重要的設(shè)計模式,不僅引用在javaweb開發(fā)中,其他開發(fā)領(lǐng)域也會應(yīng)用到過濾器模式,他可以在不侵入原有代碼的基礎(chǔ)上為他們提供一些功能。
8,java web 應(yīng)用程序的范圍模型。
request:請求 代表了一次http請求,他的生命周期從請求開始知道請求的響應(yīng)結(jié)束。中間可能會穿插多個信息資源,如過濾器, servlet,jsp。
Session 會話,代表了一次會話,也可認為代表了一個用戶,一個會話里可以包含多次的請求。如果用戶長時間不發(fā)出請求,可能導(dǎo)致會話超時而過期,超時時長可以設(shè)置。因為它代表一個用戶,所以一般使用session保存用戶的數(shù)據(jù),如購物車。
application :應(yīng)用 他的生命周期從web 容器啟動或部署該應(yīng)用開始,一web 容器停止,或取消部署而結(jié)束。他的作用范圍最大,一般用于存放應(yīng)用標(biāo)題,或其他外部資源連接器等。
9,監(jiān)聽器體現(xiàn)了一種監(jiān)聽事件模型。
三種事件監(jiān)聽:1,request事件監(jiān)聽實現(xiàn)接口(ServltRequestListener)
2,session事件監(jiān)聽接口(HttpSessionListener)
3,application事件監(jiān)聽接口(ServletContextListener)
10,forward和redirect的區(qū)別:
forward是直接轉(zhuǎn)發(fā),通過request調(diào)用
redirect是間接轉(zhuǎn)發(fā),通過response調(diào)用
forward在服務(wù)端的內(nèi)部發(fā)生,對于客戶端來說是不可見的,即使請求在服務(wù)器端的各個資源間轉(zhuǎn)發(fā)過多次,客戶端瀏覽器的地址欄的地址依然是最初的請求地址,redirect則相反,他的請求轉(zhuǎn)發(fā)實質(zhì)是向客戶端發(fā)送一條請求另一個地址的結(jié)果,瀏覽器會修改地址欄的地址,再重新發(fā)一次新的請求,對于客戶端來說是可見的。
11,
Servlet體系結(jié)構(gòu)和層次結(jié)構(gòu)
1,Servlet體系結(jié)構(gòu)
------請求 ---> -------> ------->
客戶端 HTTP服務(wù)器 Servlet容器 Servlet
<----- 響應(yīng) ---- <--------- <-------
2,Servlet層次結(jié)構(gòu)
Servlet是實現(xiàn)javax.servlet.Servlet接口的對象,大多數(shù)Servlet通過GenericServlet或HttpServlet進行擴展. Servlet API 由兩個程序包組成
javax.servlet 包
類:
ServletInputStream類:從客戶端讀取二進制數(shù)據(jù);
ServletOutputStream類;向客戶端發(fā)送二進制數(shù)據(jù);
GenericServlet類:抽象類,定義了一個通用的,獨立于底層協(xié)議的Servlet。
接口:
Servlet接口:管理Sevlet。定義實現(xiàn)Servlet的必須方法。一個Servlet必須實現(xiàn)Servlet接口或Servlet接口的擴展。
ServletConfig接口:Servlet初始化時,向Servlet傳遞配置信息。
ServletContext接口;Servlet上下文,使Servlet與其他的Servlet容器進行交互通信。
ServletRequest接口:向Servlet客戶端提供請求信息
ServletResponse接口;Servlet向客戶端提供響應(yīng)信息。
javax.servlet.http 包
類:
Cookie類
HttpServlet類:抽象類,繼承自GenericServlet。應(yīng)用于HTTP協(xié)議的請求和響應(yīng)的Servlet。
接口:
HttpSession接口:
HttpAttributeListener接口:會話的屬性監(jiān)聽接口;
HttpServletRequest接口;擴展ServletRequest接口,向Servlet客戶端提供HTTP請求信息。
HttpServletResponse接口;擴展ServletResponse接口,Servlet向客戶端提供HTTP響應(yīng)信息。
總體可以分為:
Servlet類: 實現(xiàn)具體協(xié)議的業(yè)務(wù)類,其目的是一個業(yè)務(wù)實現(xiàn)的WEB組件類;
Servlet接口: 該接口獨立于協(xié)議實現(xiàn),其目的是為了定義服務(wù)器的組件標(biāo)準(zhǔn);
GenericServlet抽象類: 該類提供了一個獨立于協(xié)議的實現(xiàn),其目的是為了滿足服務(wù)器;
HttpServlet: 該類實現(xiàn)了HTTP協(xié)議,其目的是為了讓客戶程序擴展;