摘要:當被實例化后,會調用方法初始化這個對象處理服務。方式可以在請求的實體內容中向服務器發送數據,傳送的數據量無限制。不存在敏感信息泄露問題。并且依賴于名為的,該默認的屬性為。
下面是我整理下來的Servlet知識點:
?
圖上的知識點都可以在我其他的文章內找到相應內容。
Tomcat常見面試題 Tomcat的缺省端口是多少,怎么修改Tomcat的缺省端口是多少,怎么修改
找到Tomcat目錄下的conf文件夾
進入conf文件夾里面找到server.xml文件
打開server.xml文件
在server.xml文件里面找到下列信息
把port=”8080″改成port=”8888″,并且保存
啟動Tomcat,并且在IE瀏覽器里面的地址欄輸入http://127.0.0.1:8888/
到tomcat主目錄下的conf/server.xml文件中修改,把8080端口改成是8088或者是其他的
tomcat 有哪幾種Connector 運行模式(優化)?
bio(blocking I/O)
nio(non-blocking I/O)
apr(Apache Portable Runtime/Apache可移植運行庫)
相關解釋:
bio: 傳統的Java I/O操作,同步且阻塞IO。
nio: JDK1.4開始支持,同步阻塞或同步非阻塞IO
aio(nio.2): JDK7開始支持,異步非阻塞IO
apr: Tomcat將以JNI的形式調用Apache HTTP服務器的核心動態鏈接庫來處理文件讀取或網絡傳輸操作,從而大大地 提高Tomcat對靜態文件的處理性能
下面是配置Tomcat運行模式改成是NIO模式,并配置連接池相關參數來進行優化:
apr模式啟動起來是比較復雜的,詳情可參考:http://blog.csdn.net/wanglei_storage/article/details/50225779
對于bio,nio,nio.2的理解可參考:http://blog.csdn.net/itismelzp/article/details/50886009
Tomcat有幾種部署方式直接把Web項目放在webapps下,Tomcat會自動將其部署
在server.xml文件上配置
通過Catalina來進行配置:進入到confCatalinalocalhost文件下,創建一個xml文件,該文件的名字就是站點的名字。編寫XML的方式來進行設置。
部署方式第二點:在其他盤符下創建一個web站點目錄,并創建WEB-INF目錄和一個html文件。
找到Tomcat目錄下/conf/server.xml文件
在server.xml中的
訪問配置好的web站點
進入到confCatalinalocalhost文件下,創建一個xml文件,該文件的名字就是站點的名字。
xml文件的代碼如下,docBase是你web站點的絕對路徑
訪問web站點下的html資源
Servlet面試題 Servlet生命周期Servlet生命周期?
第一次訪問Servlet,我們發現init()和service()都被調用了
第二次訪問Servlet,service()被調用了
第三次訪問Servlet,還是service()被調用了
當我們關閉Tomcat服務器的時候,destroy()被調用了!
Servlet生命周期可分為5個步驟
加載Servlet。當Tomcat第一次訪問Servlet的時候,Tomcat會負責創建Servlet的實例
初始化。當Servlet被實例化后,Tomcat會調用init()方法初始化這個對象
處理服務。當瀏覽器訪問Servlet的時候,Servlet 會調用service()方法處理請求
銷毀。當Tomcat關閉時或者檢測到Servlet要從Tomcat刪除的時候會自動調用destroy()方法,讓該實例釋放掉所占的資源。一個Servlet如果長時間不被使用的話,也會被Tomcat自動銷毀
卸載。當Servlet調用完destroy()方法后,等待垃圾回收。如果有需要再次使用這個Servlet,會重新調用init()方法進行初始化操作。
簡單總結:只要訪問Servlet,service()就會被調用。init()只有第一次訪問Servlet的時候才會被調用。destroy()只有在Tomcat關閉的時候才會被調用。
get方式和post方式有何區別2018年9月14日12:15:12更新:下面的區別主要在HTML/瀏覽器的環境下討論(因為HTTP協議的使用不單單只有瀏覽器能用)
參考資料:
http://www.nowamagic.net/libr...
http://www.cnblogs.com/hyffffd/...
get方式和post方式有何區別
數據攜帶上:
GET方式:在URL地址后附帶的參數是有限制的,其數據容量通常不能超過1K。
POST方式:可以在請求的實體內容中向服務器發送數據,傳送的數據量無限制。
請求參數的位置上:
GET方式:請求參數放在URL地址后面,以?的方式來進行拼接
POST方式:請求參數放在HTTP請求包中
用途上:
GET方式一般用來獲取數據
POST方式一般用來提交數據
原因:
首先是因為GET方式攜帶的數據量比較小,無法帶過去很大的數量
POST方式提交的參數后臺更加容易解析(使用POST方式提交的中文數據,后臺也更加容易解決)
GET方式比POST方式要快
GET方式比POST方式要快,詳情可看:https://www.cnblogs.com/strayling/p/3580048.html
Servlet相關 APIdoGet與doPost方法的兩個參數是什么
HttpServletRequest:封裝了與請求相關的信息
HttpServletResponse:封裝了與響應相關的信息
獲取頁面的元素的值有幾種方式,分別說一下
request.getParameter() 返回客戶端的請求參數的值
request.getParameterNames() 返回所有可用屬性名的枚舉
request.getParameterValues() 返回包含參數的所有值的數組
request.getAttribute()和request.getParameter()區別
用途上:
request.getAttribute(), 一般用于獲取request域對象的數據(在跳轉之前把數據使用setAttribute來放到request對象上)
request.getParameter(), 一般用于獲取客戶端提交的參數
存儲數據上:
request.getAttribute()可以獲取Objcet對象
request.getParameter()只能獲取字符串(這也是為什么它一般用于獲取客戶端提交的參數)
forward和redirect的區別forward和redirect的區別
實際發生位置不同,地址欄不同
轉發是發生在服務器的
轉發是由服務器進行跳轉的,細心的朋友會發現,在轉發的時候,瀏覽器的地址欄是沒有發生變化的,在我訪問Servlet111的時候,即使跳轉到了Servlet222的頁面,瀏覽器的地址還是Servlet111的。也就是說瀏覽器是不知道該跳轉的動作,轉發是對瀏覽器透明的。通過上面的轉發時序圖我們也可以發現,實現轉發只是一次的http請求,一次轉發中request和response對象都是同一個。這也解釋了,為什么可以使用request作為域對象進行Servlet之間的通訊。
重定向是發生在瀏覽器的
- **重定向是由瀏覽器進行跳轉的**,進行重定向跳轉的時候,**瀏覽器的地址會發生變化的**。曾經介紹過:實現重定向的原理是由response的狀態碼和Location頭組合而實現的。**這是由瀏覽器進行的頁面跳轉**實現重定向**會發出兩個http請求**,**request域對象是無效的,因為它不是同一個request對象**
用法不同:
很多人都搞不清楚轉發和重定向的時候,資源地址究竟怎么寫。有的時候要把應用名寫上,有的時候不用把應用名寫上。很容易把人搞暈。記住一個原則: 給服務器用的直接從資源名開始寫,給瀏覽器用的要把應用名寫上
request.getRequestDispatcher("/資源名 URI").forward(request,response)
轉發時"/"代表的是本應用程序的根目錄【zhongfucheng】
response.send("/web應用/資源名 URI");
重定向時"/"代表的是webapps目錄
能夠去往的URL的范圍不一樣:
轉發是服務器跳轉只能去往當前web應用的資源
重定向是服務器跳轉,可以去往任何的資源
傳遞數據的類型不同
轉發的request對象可以傳遞各種類型的數據,包括對象
重定向只能傳遞字符串
跳轉的時間不同
轉發時:執行到跳轉語句時就會立刻跳轉
重定向:整個頁面執行完之后才執行跳轉
那么轉發(forward)和重定向(redirect)使用哪一個?
根據上面說明了轉發和重定向的區別也可以很容易概括出來。轉發是帶著轉發前的請求的參數的。重定向是新的請求。
典型的應用場景:
轉發: 訪問 Servlet 處理業務邏輯,然后 forward 到 jsp 顯示處理結果,瀏覽器里 URL 不變
重定向: 提交表單,處理成功后 redirect 到另一個 jsp,防止表單重復提交,瀏覽器里 URL 變了
tomcat容器是如何創建servlet類實例?用到了什么原理?tomcat容器是如何創建servlet類實例?用到了什么原理
當容器啟動時,會讀取在webapps目錄下所有的web應用中的web.xml文件,然后對 xml文件進行解析,并讀取servlet注冊信息。然后,將每個應用中注冊的servlet類都進行加載,并通過 反射的方式實例化。(有時候也是在第一次請求時實例化)
在servlet注冊時加上
什么是cookie?
Cookie是由W3C組織提出,最早由netscape社區發展的一種機制
網頁之間的交互是通過HTTP協議傳輸數據的,而Http協議是無狀態的協議。無狀態的協議是什么意思呢?一旦數據提交完后,瀏覽器和服務器的連接就會關閉,再次交互的時候需要重新建立新的連接。
服務器無法確認用戶的信息,于是乎,W3C就提出了:給每一個用戶都發一個通行證,無論誰訪問的時候都需要攜帶通行證,這樣服務器就可以從通行證上確認用戶的信息。通行證就是Cookie
Session和cookie有什么區別?
從存儲方式上比較
Cookie只能存儲字符串,如果要存儲非ASCII字符串還要對其編碼。
Session可以存儲任何類型的數據,可以把Session看成是一個容器
從隱私安全上比較
Cookie存儲在瀏覽器中,對客戶端是可見的。信息容易泄露出去。如果使用Cookie,最好將Cookie加密
Session存儲在服務器上,對客戶端是透明的。不存在敏感信息泄露問題。
從有效期上比較
Cookie保存在硬盤中,只需要設置maxAge屬性為比較大的正整數,即使關閉瀏覽器,Cookie還是存在的
Session的保存在服務器中,設置maxInactiveInterval屬性值來確定Session的有效期。并且Session依賴于名為JSESSIONID的Cookie,該Cookie默認的maxAge屬性為-1。如果關閉了瀏覽器,該Session雖然沒有從服務器中消亡,但也就失效了。
從對服務器的負擔比較
Session是保存在服務器的,每個用戶都會產生一個Session,如果是并發訪問的用戶非常多,是不能使用Session的,Session會消耗大量的內存。
Cookie是保存在客戶端的。不占用服務器的資源。像baidu、Sina這樣的大型網站,一般都是使用Cookie來進行會話跟蹤。
從瀏覽器的支持上比較
如果瀏覽器禁用了Cookie,那么Cookie是無用的了!
如果瀏覽器禁用了Cookie,Session可以通過URL地址重寫來進行會話跟蹤。
從跨域名上比較
Cookie可以設置domain屬性來實現跨域名
Session只在當前的域名內有效,不可夸域名
Servlet安全性問題由于Servlet是單例的,當多個用戶訪問Servlet的時候,服務器會為每個用戶創建一個線程。當多個用戶并發訪問Servlet共享資源的時候就會出現線程安全問題。
原則:
如果一個變量需要多個用戶共享,則應當在訪問該變量的時候,加同步機制synchronized (對象){}
如果一個變量不需要共享,則直接在 doGet() 或者 doPost()定義.這樣不會存在線程安全問題
如果文章有錯的地方歡迎指正,大家互相交流。習慣在微信看技術文章的同學,可以關注微信公眾號:Java3y
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/35895.html
摘要:當被實例化后,會調用方法初始化這個對象處理服務。方式可以在請求的實體內容中向服務器發送數據,傳送的數據量無限制。不存在敏感信息泄露問題。并且依賴于名為的,該默認的屬性為。 下面是我整理下來的Servlet知識點: showImg(https://segmentfault.com/img/bV3c9e);? 圖上的知識點都可以在我其他的文章內找到相應內容。 Tomcat常見面試題 Tom...
摘要:我在面試前針對基礎也花了不少的時間,期間也將自己寫過的博文粗略地刷了一遍,同時也在網上找了不少比較好的資料部分是沒看完的??疵嬖囶}也是校驗自己是否真正理解了這個知識點,也很有可能會有新的收獲。 一、前言 只有光頭才能變強 回顧前面: 廣州三本找Java實習經歷 上一篇寫了自己面試的經歷和一些在面試的時候遇到的題目(筆試題和面試題)。 我在面試前針對Java基礎也花了不少的時間,期間也將...
摘要:中的異步處理指的是什么中的異步處理指的是什么答在中引入了一項新的技術可以讓異步處理請求。開啟異步處理代碼開啟異步支持啟動異步處理的上下文在此處添加異步處理的代碼如果文章有錯的地方歡迎指正,大家互相交流。 以下我是歸納的過濾器監聽器知識點圖: showImg(https://segmentfault.com/img/remote/1460000013263166?w=3974&h=187...
閱讀 1481·2019-08-30 15:44
閱讀 1945·2019-08-30 14:07
閱讀 2871·2019-08-30 13:56
閱讀 2336·2019-08-29 17:06
閱讀 1323·2019-08-29 14:13
閱讀 2078·2019-08-29 11:28
閱讀 3223·2019-08-26 13:56
閱讀 1940·2019-08-26 12:11