servlet

1Servlet生命週期

Servlet生命週期包括三部分

初始化:Web容器加載servlet,調用init()方法

處理請求:請求到達,戴永濤service()方法,service自動派遣調用相應的doXXX方法。

銷燬:服務結束,web容器會調用servlet的distroy()方法銷燬servlet

2、get提交和post提交有何區別

(1)get一般用於從服務器上獲取數據,post一般用於向服務器傳送數據

(2)請求的時候參數的位置有區別,get的參數是拼接在url後面,用戶在瀏覽器地址欄可以看到。post是放在http包的包體中。

比如說用戶註冊,你不能把用戶提交的註冊信息用get的方式吧,那不是說把用戶的註冊信息都顯示在Url上了嗎,是不安全的。

(3) 能提交的數據有區別,get提交只能是文本,且大小不超過1024字節,而post除了可以提交文本還有二進制文件。

所以說想上傳文件的話,那我們就需要使用post請求方式

(4)servlet在處理請求的時候分別對應使用doGet和doPost方式進行處理請求

3、JSP與Servlet有什麼區別

Servlet是服務器端的程序,動態生成html頁面發送到客戶端,但是這樣程序裏會有很多out.println(),java與html語言混在一起

很亂,所以後來sun公司推出了JSP.其實JSP就是Servlet,每次運行的時候JSP都首先被編譯成servlet文件,然後再被編譯成

.class文件運行。有了jsp,在MVC項目中servlet不再負責動態生成頁面,轉而去負責控制程序邏輯的作用,控制jsp與javabean

之間的流轉。

4、doGet與doPost方法的兩個參數是什麼

HttpServletRequest:封裝了與請求相關的信息

HttpServletResponse:封裝了與響應相關的信息

5、request.getAttribute()和request.getParameter

(1)有setAttribute,沒有setParameter方法

(2)getParameter獲取到的值只能是字符串,不可以是對象,而getAttribute獲取到的值是Object類型的。

(3)通過form表單或者url來向另一個頁面或者servlet傳遞參數的時候需要用getParameter獲取值;getAttribute只能獲取setAttribute的值

(4)setAttribute是應用服務器把這個對象放到該頁面所對應的一塊內存當中,當你的頁面服務器重定向到另一個頁面的時候,應用服務器

會把這塊內存拷貝到另一個頁面對應的內存當中。通過getAttribute可以取得你存下的值,當然這種方法可以用來傳對象。

用session也是一樣的道理,這是說request和session的生命週期不一樣而已。

6、JSP有哪些內置對象,作用是什麼?

JSP內置對象
名稱 作用
request 包含用戶端請求的信息
response 包含服務器傳回客戶端的響應信息
session 與請求有關的會話期
pageContext 管理網頁屬性
application 服務器啓動時創建,服務器關閉時停止,爲多個應用程序保存信息
out 向客戶端輸出數據
config servlet的架構部件
page 指網頁本身
exception 針對錯誤頁面纔可使用

7、四種會話跟蹤技術作用域

(1)page:一個頁面

(2)request::一次請求

(3)session:一次會話

(4)application:服務器從啓動到停止。

7、JSP中動態INCLUDE和靜態INCLUDE有什麼區別

include指令用於把另一個頁面包含到當前頁面中,在什麼時候包含的?再轉換成servlet的時候包含進去的。

動態INCLUDE用jsp:include動作實現 <jsp:include page="included.jsp" flush="true" />它總是會檢查所含文件中的變化,適合用於包含動態頁面,

並且可以帶參數.

靜態INCLUDE用include僞碼實現,定不會檢查所含文件的變化,適用於包含靜態頁面<%@ include file="included.htm" %>

8、forward和redirect的區別

轉發與重定向

(1)從地址欄顯示來說 

forward是服務器請求資源,服務器直接訪問目標地址的URL,把那個URL的響應內容讀取過來,然後把這些內容再發給瀏覽器.瀏覽器根本不知道服務器發送

的內容從哪裏來的,所以它的地址欄還是原來的地址.redirect是服務端根據邏輯,發送一個狀態碼,告訴瀏覽器重新去請求那個地址.所以地址欄顯示的是

新的URL.

(2)從數據共享來說 

forward:轉發頁面和轉發到的頁面可以共享request裏面的數據.

redirect:不能共享數據.

(3)從運用地方來說 

forward:一般用於用戶登陸的時候,根據角色轉發到相應的模塊.

redirect:一般用於用戶註銷登陸時返回主頁面和跳轉到其它的網站等.

(4)從效率來說 

forward:高.

redirect:低.

 

session和cookie之間的區別

一、cookie機制和session機制的區別

具體來說cookie機制採用的是在客戶端保持狀態的方案,而session機制採用的是在服務器端保持狀態的方案。
同時我們也看到,由於才服務器端保持狀態的方案在客戶端也需要保存一個標識,所以session
機制可能需要藉助於cookie機制來達到保存標識的目的,但實際上還有其他選擇

二、會話cookie和持久cookie的區別
如果不設置過期時間,則表示這個cookie生命週期爲瀏覽器會話期間,只要關閉瀏覽器窗口,cookie就消失了。這種生命期爲瀏覽會話期的cookie被稱爲會話cookie。會話cookie一般不保存在硬盤上而是保存在內存裏。

如果設置了過期時間,瀏覽器就會把cookie保存到硬盤上,關閉後再次打開瀏覽器,這些cookie依然有效直到超過設定的過期時間。
存儲在硬盤上的cookie可以在不同的瀏覽器進程間共享,比如兩個IE窗口。而對於保存在內存的cookie,不同的瀏覽器有不同的處理方式。

三、如何利用實現自動登錄

當用戶在某個網站註冊後,就會收到一個惟一用戶ID的cookie。客戶後來重新連接時,這個
用戶ID會自動返回,服務器對它進行檢查,確定它是否爲註冊用戶且選擇了自動登錄,從而使用戶務需給出明確的用戶名和密碼,就可以訪問服務器上的資源。

四、如何根據用戶的愛好定製站點

網站可以使用cookie記錄用戶的意願。對於簡單的設置,網站可以直接將頁面的設置存儲在cookie中完成定製。然而對於更復雜的定製,網站只需僅將一個惟一的標識符發送給用戶,由服務器端的數據庫存儲每個標識符對應的頁面設置。

五、cookie的發送

1.創建Cookie對象
2.設置最大時效
3.將Cookie放入到HTTP響應報頭
如果你創建了一個cookie,並將他發送到瀏覽器,默認情況下它是一個會話級別的cookie:存儲在瀏覽器的內存中,用戶退出瀏覽器之後被刪除。如果你希望瀏覽器將該cookie存儲在磁盤上,則
需要使用maxAge,並給出一個以秒爲單位的時間。將最大時效設爲0則是命令瀏覽器刪除該cookie。
發送cookie需要使用HttpServletResponse的addCookie方法,將cookie插入到一個Set-Cookie HTTP請 求報頭中。由於這個方法並不修改任何之前指定的Set-Cookie報頭,而是創建新的報頭,因此我們將這個方法稱爲是addCookie,而非 setCookie。同樣要記住響應報頭必須在任何文檔內容發送到客戶端之前設置。

六、cookie的讀取

1.調用request.getCookie
要獲取有瀏覽器發送來的cookie,需要調用HttpServletRequest的getCookies方法,這個調用返回Cookie對象的數組,對應由HTTP請求中Cookie報頭輸入的值。
2.對數組進行循環,調用每個cookie的getName方法,直到找到感興趣的cookie爲止
cookie與你的主機(域)相關,而非你的servlet或JSP頁面。因而,儘管你的servlet可能只發送了單個cookie,你也可能會得到許多不相關的cookie。
例如:
String cookieName = “userID”;
    Cookie cookies[] = request.getCookies();
    if (cookies!=null){
        for(int i=0;i<cookies.length;i++){
    Cookie cookie = cookies[i];
    if (cookieName.equals(cookie.getName())){
        doSomethingWith(cookie.getValue());
}
}
}

七、如何使用cookie檢測初訪者

A.調用HttpServletRequest.getCookies()獲取Cookie數組
B.在循環中檢索指定名字的cookie是否存在以及對應的值是否正確
C.如果是則退出循環並設置區別標識
D.根據區別標識判斷用戶是否爲初訪者從而進行不同的操作

十二、session的機制

session機制是一種服務器端的機制,服務器使用一種類似於散列表的結構(也可能就是使用散列表)來保存信息。
但程序需要爲某個客戶端的請求創建一個session的時候,服務器首先檢查這個客戶端的請求裏是否包含了一個session標識-稱爲session id,如果已經包含一個session id則說明以前已經爲此客戶創建過session,服務器就按照session id把這個session檢索出來使用(如果檢索不到,可能會新建一個,這種情況可能出現在服務端已經刪除了該用戶對應的session對象,但用戶人爲 地在請求的URL後面附加上一個JSESSION的參數)。
如果客戶請求不包含session id,則爲此客戶創建一個session並且生成一個與此session相關聯的session id,這個session id將在本次響應中返回給客戶端保存。

十三、保存session id的幾種方式

A.保存session id的方式可以採用cookie,這樣在交互過程中瀏覽器可以自動的按照規則把這個標識發送給服務器。
B.由於cookie可以被人爲的禁止,必須有其它的機制以便在cookie被禁止時仍然能夠把session id傳遞迴服務器,經常採用的一種技術叫做URL重寫,就是把session id附加在URL路徑的後面,附加的方式也有兩種,一種是作爲URL路徑的附加信息,另一種是作爲查詢字符串附加在URL後面。網絡在整個交互過程中始終 保持狀態,就必須在每個客戶端可能請求的路徑後面都包含這個session id。
C.另一種技術叫做表單隱藏字段。就是服務器會自動修改表單,添加一個隱藏字段,以便在表單提交時能夠把session id傳遞迴服務器。

十五、session何時被刪除

session在下列情況下被刪除:
A.程序調用HttpSession.invalidate()
B.距離上一次收到客戶端發送的session id時間間隔超過了session的最大有效時間
C.服務器進程被停止

再次注意關閉瀏覽器只會使存儲在客戶端瀏覽器內存中的session cookie失效,不會使服務器端的session對象失效。

 

3,get和post的請求區別

 1,   get是從服務器上獲取數據,post是向服務器傳送數據。

 2,在客戶端,Get方式在通過URL提交數據,數據在URL中可以看到;POST方式,數據放置在HTML HEADER內提交。

3 對於get方式,服務器端用Request.QueryString獲取變量的值,對於post方式,服務器端用Request.Form獲取提交的數據。

(2)   GET方式提交的數據最多只能有1024字節,而POST則沒有此限制。

(3)   安全性問題。正如在(1)中提到,使用 Get 的時候,參數會顯示在地址欄上,而 Post 不會。所以,如果這些數據是中文數據而且是非敏感數據,那麼使用 get;如果用戶輸入的數據不是中文字符而且包含敏感數據,那麼還是使用 post爲好。

Servlet生命週期分爲三個階段:

  1,初始化階段  調用init()方法

  2,響應客戶請求階段  調用service()方法

  3,終止階段  調用destroy()方法

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章