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