servlet服務程式

2021-07-14 17:05:44 字數 3923 閱讀 7707

在form的action屬性中,直接寫servlet的url路徑,預設是在當前目錄下查詢,一旦網頁在子目錄中,那麼會在提交路徑中加上子目錄的名稱,可以通過../回到上一級目錄。

精確對映 /abc 表示只能以/abc路徑查詢servlet

擴充套件對映 *.action 表示凡是以.action結尾的請求,都能訪問servlet

路徑對映 /abc/* 表示方式在/abc/路徑下的請求,都能訪問servlet

啟動tomcat,讀取conf/server.xml檔案,以確定啟動埠和web應用程式的部署目錄

讀取部署目錄中所有的web應用程式中的web.xml,並解析,所以一旦有乙個web應用程式中的web.xml書寫錯誤,那麼解析失敗,從而丟擲解析異常。正確解析web.xml,可以確定部署的web元件資訊。

載入並例項化servlet。加上標籤,如果該標籤的值為0或正數,表示web容器一啟動就例項化,如果該標籤不寫或為負數,表示第一次訪問再例項化。呼叫init()方法完成初始化。當請求到達後,呼叫service()方法完成業務。銷毀階段,呼叫destory()方法完成清理工作。

在整個生命週期中,1,2,3,4,6都只執行一次,只有個5才是每次請求都會執行,而且servlet物件只有乙個,是單例項多執行緒的類。

aa

111

進行servlet初始化資訊的描述,可以通過servletconfig配置物件中的getinitparameter()根據引數名稱,得到引數值,但該初始化引數只能在當前servlet中使用,不能再別的servlet使用。

http狀態碼

何時設定狀態碼:在使用printwriter向客戶端輸出資訊之前,設定狀態碼

通過響應物件 httpservletresponse 的setheader()可以設定響應頭,但是響應頭必須要被瀏覽器識別才有意義。所有通常會把響應頭的設定封裝成相應物件的方法,比如:setcontenttype(),andcookie()

由於只有http協議才會有響應頭,所以setheader()只存在於httpservletresponse中

httpservletresponse響應物件有兩個方法可以向客戶端輸出資料。getwriter(),得到列印字元流,可以向客戶端輸出文字資料,getoutputstream()得到輸出位元組流,可以向客戶端輸出二進位制資料。

重定向工作流程:客戶端訪問伺服器,伺服器呼叫response.sendredirect(),產生響應時,會產生302狀態碼,同時產生location響應頭,客戶端瀏覽器在接受到響應資訊之後,發現是302狀態碼,那麼就會讀取location想應頭的內容,然後將該內容更新瀏覽器位址列,在向伺服器傳送第二次請求。

cannot call sendredirect() after the response has been ……不能重複請求response方法

瀏覽器向web伺服器傳送http請求

預設情況下都是使用http協議的get方法提交請求

定製瀏覽器行為

流格式的區別。

get方式表單資料附加在url後面,而post方式表單資料在訊息體中,所以get方式沒有訊息體。

用途的區別

get方式主要用於資料的查詢,而post方式主要用於資料的傳輸。

傳輸效能的區別

get方式只能傳輸文字資料,而post方式可以傳輸文字和二進位制資料。

get方式不能傳輸大資料。而post方式可以傳輸大資料。

get方式的表單資料附加url後面,所以表單資料會在瀏覽器位址列中顯示出來,而post方式的的表單資料在訊息體中,所以瀏覽器位址列不會顯示,相對get方式資料安全一些。

get方式的資料會在瀏覽器快取,而post方式不會快取。

如果以 / 開始,必須加上部署名 /webtest/all

如果以 / 開始,應該書寫相對於web應用程式的路徑,不加部署名

getparametervalues返回字串陣列,得到乙個表單名對應的所有值

它們的區別在於:

重定向由response發出,而內部**由requestdispatcher發出。

重定向,客戶端發出兩次請求,而內部**,客戶端只發出異常請求,所以,內部**可以共享request請求物件中的封裝資料,而重定向不行

內部**只能**伺服器內部的資源,但重定向可以在第二次請求時,轉向別的伺服器。

狀態跟蹤:http協議是一種無狀態的協議,當請求和響應完成後,會斷開連線,以釋放伺服器的記憶體資源。所有伺服器無法儲存客戶端的狀態,伺服器會認為每次請求的客戶端都是新使用者,但是很多時候,我們需要得到客戶端的狀態,完成一系列的商務活動,這時候需要狀態跟蹤

隱藏表單

cookie

session

url重寫

客戶端風味伺服器,伺服器呼叫response.addcookie()方法,產生響應時,會產生set-cookie響應頭,將cookie文字傳送給客戶端,客戶端會將文字儲存起來,當客戶端再次請求伺服器時,會產生cookie請求頭,將之前伺服器傳送的cookie資訊,在傳送給伺服器,伺服器就可以根據cookie資訊跟蹤客戶端的狀態

存放在客戶端瀏覽器的快取中,瀏覽器不關閉,cookie資訊一起存在,瀏覽器一關閉,cookie消失

存放在客戶端的檔案中,並可以設定cooki的過期時間,過期時間之內,即使瀏覽器關閉,也可以將cookie資訊傳送給伺服器,超過過期時間,cookie消失

cookie資訊是以文字方式存放在客戶端的,所以容易引起一些安全隱患,所以不要把隱秘資訊以cookie方式儲存客戶端訪問伺服器,伺服器呼叫request.getsession()產生session物件,用於跟蹤使用者的狀態,同時,給session物件分配乙個唯一標識sessionid。為了管理session物件,以sessionid為鍵,以session物件為值,封裝成map集合。

產生響應時,將sessionid以cookie方式傳送給客戶端,存放在客戶端瀏覽器的快取中。當客戶端再次請求伺服器,會將sessionid以cookie請求頭的方式傳送給伺服器。伺服器得到sessionid後,從map集合中,得到session物件,從而跟蹤狀態

物件作用域:

servletcontext(上下文):整個web應用程式

httpsession(會話):乙個會話互動過程

servletrequest(請求):一次請求過程

設定超時時間

呼叫session物件的invalidate(),強行銷毀

應用伺服器崩潰

cookie資訊是存放在客戶端的,session資訊學是以物件方式存放在伺服器的

cookie資訊存放的事文字資料,而session物件可以繫結物件共享

客戶端和伺服器之間傳遞cookie,傳遞的事具體的資料,而使用session時傳遞的只是sessionid,所有使用session安全性比較好。

當客戶端禁用了cookie之後,這時,伺服器傳送給客戶端的sessionid,客戶端就不能通過cookie方式進行儲存了,這樣客戶端請求時,也不能將sessionid,以cookie請求頭方式,提交給伺服器,伺服器得不到sessionid。也就無法取出session物件,從而不能跟蹤狀態

解決方法:當客戶端禁用了cookie之後,在url後面,清醒附加sessionid

servlet程式注意點

1 配置tomcat下的web應用程式 要有完整的目錄標準.如有webservlet應用程式,要有web inf下有classes lib資料夾,web.xml檔案,此外,如,index.html,hello.html,a.jsp要放在webserlet的根目錄下 也可以在webserlet建立乙個...

編寫 Servlet 程式 1

建立servlet 大部分分三步 一 建立動態web工程 在以前的博文,已經說過。搭建個性j2ee企業應用 系列1 二 建立servlet類 在eclipse 中選擇 new web servlet 如圖 輸入類名 方法選擇 doget 和 dopost 完成建類。在完成時,會有許多,沒有定義的現象...

編寫 Servlet 程式 2

servlet 中的doget 和 dopost 分別對應資訊反饋和資訊提交。乙個純的servlet就是把網頁 寫到outer中!比如 out.println out.println 實現的網頁如圖 doget response.setcontenttype text html charset gb...