1. 程式人生 > >servlet題2

servlet題2

內存 webapps 新建 隱私安全 如果 sync get 一次 資源

1、servlet安全問題:由於servlet是單例的,當多個用戶訪問servlet的時候,服務器會為每個用戶創建一個線程,當多個用戶並發訪問servlet共享資源的時候就會出現線程安全問題。

原則:如果一個變量需要多個用戶共享,則應該在訪問變量的時候加同步機制synchronize(對象){};如果一個變量不需要共享,則直接在doGet\doPost定義,這樣不會存在線程安全問題。

2、sessioncookie有什麽區別?

從存儲方式上比較:cookie只能存儲字符串,如果要存儲非ASC||字符串還要進行編碼;session可以存儲任何類型的數據,可以把session看成一個容器。

從隱私安全上比較:

cookie存儲在瀏覽器中,對客戶端是可見的,信息容易泄露出去,如果使用cookie,最好將cookie加密;session存儲在服務器上,對客戶端是透明的,不存在敏感信息泄露問題。

從有效期上比較:cookie保存在硬盤上,只需要設置maxAge屬性為較大正整數,即使關閉瀏覽器cookie還是存在的;session保存在服務器中,設置maxinactiveinterval屬性值來確定session的有效期,並且session依賴名為jsessionidcookie,該cookie默認的maxage屬性為-1,如果關閉了瀏覽器,該session雖然沒有從服務器中消亡,但也失效了。

從對服務器的負擔比較:

session是保存在服務器上的,每個用戶都會產生一個session,如果並發訪問的用戶非常多,是不能使用session的,session會消耗大量的內存;cookie是保存在客戶端的,不占用服務器的資源,一些大型網站都是使用cookie來進行會話追蹤的。

從瀏覽器的支持上比較:如果瀏覽器禁用了cookie,那麽cookie是無用的;如果瀏覽器禁用了cookiesession可以通過URL重寫進行會話跟蹤。

從跨域名上比較:cookie可以設置domain屬性來實現跨域名;session只在當前域名內有效,不可跨域名。

3、什麽是cookie

Cookie是由W3C組織提出的,最早由netscape

社區發展的一種機制

網頁之間的交互是通過HTTP協議傳輸數據的,而HTTP協議是無狀態的協議。無狀態的協議是指一旦數據提交完後,瀏覽器和服務器的連接就會關閉,再次交互的時候需要重新建立新的連接。

服務器無法確認用戶的信息,所以W3C提出給每一個用戶都發一個通行證,無論誰訪問都需要攜帶通行證,這樣服務器就可以從通行證上確認用戶信息。通行證就是cookie

4、Tomcat容器是如何創建servlet類實例?用到了什麽原理?

當容器啟動時,會讀取在webapps目錄下所有web應用中的web.xml文件,然後對xml文件進行解析,並讀取servlet註冊信息。然後,將每個應用中註冊的servlet類都進行加載,並通過反射的方式實例化。

servlet註冊時加上如果為正數,則在一開始就實例化,,如果不寫或為負數,則第一次請求實例化。

servlet題2