0929
閱讀提示:
帶有*爲重點內容. 續上次0828servlet面試題01,鏈接如下
https://blog.csdn.net/qq_40703552/article/details/100129334
更正:06)get和post的區別
之前沒有錯,我還是感覺可以從凝練一下:
*1.從攜帶數據量上
*2.從請求參數的位置
*3.從用途上
4.安全性
5.從傳遞數據速度上.總結1.post帶有更多請求頭信息2.post需要確認.3post不會緩存4.post不能管道化傳輸(參考鏈接來自博客園 迷途小哈https://www.cnblogs.com/strayling/p/3580048.html)
思考get與post如何解決亂碼?
拓展:07)servlet的兩個重要的API
HttpServletRequest(與請求有關)與HttpServletResponse(與響應有關)
如何從頁面獲取參數,有幾種方式
1.獲取指定參數的單個值:getParamater(String name)
2.獲取指定參數的多個值 getParamaterValues(String name)
3.獲取整個參數列表 getParamaterMap()
09)tomcat容器是如何創建servlet類實例?用到了什麼原理
簡單說一下,具體的話.自己搜一下嗎,別太懶哦.
當容器啓動時,tomcat會讀取webapps下的web.xml文件.對其進行解析,讀取器servlet的信息,並將其加載實例化.
是否一開始實例化取決於 數字越小,啓動越早
10)servlet的安全性問題
由於servlet是單例的,多個用戶訪問servlet的時候,servlet會爲每一個用戶創建一個線程.當多個用戶訪問同一個資源時,就可能出現安全問題.
原則
1.如果該資源被共享的話,需要加同步機制sychronized(this){}
2.否則的話,直接定義在doGet,doPost即可
注:多線程的併發的讀寫servlet類屬性會導致數據不同步.但是如果只是併發的讀取屬性而不寫入,則不存在數據不同步的問題.因此servlet的只讀屬性最好定義爲final類型的.
11)Request對象的主要方法包括哪些?(借鑑了一下)
如果面試真的問你這個問題的話.可以從從三個角度來談.我只說重要的,其他的直接你看看api就行拉.你要相信真有奇葩的面試題.哈哈.
1.request操作請求行的方法
String getMethod() 判斷請求方式
String getContextPath() 該方法用於獲取請求URL中屬於WEB應用程序的路徑,這個路徑以“/”開頭,表示相對於整個WEB站點的根目錄,路徑結尾不含“/”。如果請求URL屬於WEB站點的根目錄,那麼返回結果爲空字符串("")動態獲取項目名稱。例如:/day12
String getRemoteAddr() 該方法用於獲取請求客戶端的IP地址
2.request操作請求頭的方法
方法聲明 | 功能描述 |
---|---|
String getHeader(String name) | 該方法用於獲取一個指定頭字段的值,如果請求消息中沒有包含指定的頭字段,getHeader()方法返回null;如果請求消息中包含有多個指定名稱的頭字段,getHeader()方法返回其中第一個頭字段的值 |
Enumeration getHeaders(String name) | 該方法返回一個Enumeration集合對象,該集合對象由請求消息中出現的某個指定名稱的所有頭字段值組成。在多數情況下,一個頭字段名在請求消息中只出現一次,但有時候可能會出現多次 |
Enumeration getHeaderNames() | 該方法用於獲取一個包含所有請求頭字段的Enumeration對象 |
int getIntHeader(String name) | 該方法用於獲取指定名稱的頭字段,並且將其值轉爲int類型。需要注意的是,如果指定名稱的頭字段不存在,返回值爲-1;如果獲取到的頭字段的值不能轉爲int類型,將發生NumberFormatException異常 |
Long getDateHeader(String name) | 該方法用於獲取指定頭字段的值,並將其按GMT時間格式轉換成一個代表日期/時間的長整數,這個長整數是自1970年1月1日0點0分0秒算起的以毫秒爲單位的時間值 |
3.request操作請求頭的方法
存數據:setAttribute(name,value)
取數據:getAttribute(name)
刪除數據:removeAttribute(name)
12)servlet的查詢結果用如何保存(保存在什麼作用域?)
使用ServletContext作用域
存在問題:所有的Servelt都共享這一個域,就會造成數據衝突的問題
解決:縮小作用範圍 域對象 request 作用域
13)request的作用:
1、request可以封裝請求行、頭、體的信息
2、也可以當成域對象
而作爲域對象的三個方法:
存數據:setAttribute(name,value)
取數據:getAttribute(name)
刪除數據:removeAttribute(name)
作用範圍:
一次請求有效
延伸:
看完這兩天的內容.下面幾個問題看看能不能回想起來?
1、說一說Servlet的生命週期?
2、JAVA SERVLET API中forward() 與redirect()的區別
3.什麼情況下調用doGet()和doPost()?
4.Servlet執行時一般實現哪幾個方法?
這下面5個問題比上有點難度.當然還是基礎.試着自己去整理思考一下.不會的小夥伴私信我哦.最好能獨立完成.當然有哪位小夥伴留言也行.
1.Servlet的基本架構代碼片斷是什麼?
2.如何現實servlet的單線程模式?
3.頁面間對象傳遞的方法是什麼?
4.四種會話跟蹤技術包括哪幾項?
5.我們在web應用開發過程中經常遇到輸出某種編碼的字符,如iso8859-1等,如何輸出一個某種編碼的字符串?
考考之前你所學的哦
1.說出數據連接池的工作機制是什麼?
2.Class.forName的作用?