servlet題2
1、servlet安全問題:由於servlet是單例的,當多個用戶訪問servlet的時候,服務器會為每個用戶創建一個線程,當多個用戶並發訪問servlet共享資源的時候就會出現線程安全問題。
原則:如果一個變量需要多個用戶共享,則應該在訪問變量的時候加同步機制synchronize(對象){};如果一個變量不需要共享,則直接在doGet\doPost定義,這樣不會存在線程安全問題。
2、session和cookie有什麽區別?
從存儲方式上比較:cookie只能存儲字符串,如果要存儲非ASC||字符串還要進行編碼;session可以存儲任何類型的數據,可以把session看成一個容器。
從隱私安全上比較:
從有效期上比較:cookie保存在硬盤上,只需要設置maxAge屬性為較大正整數,即使關閉瀏覽器cookie還是存在的;session保存在服務器中,設置maxinactiveinterval屬性值來確定session的有效期,並且session依賴名為jsessionid的cookie,該cookie默認的maxage屬性為-1,如果關閉了瀏覽器,該session雖然沒有從服務器中消亡,但也失效了。
從對服務器的負擔比較:
從瀏覽器的支持上比較:如果瀏覽器禁用了cookie,那麽cookie是無用的;如果瀏覽器禁用了cookie,session可以通過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