鎖屏面試題百日百刷-tomcat有哪幾種connector運行模式
今日分面試題到了:
====Tomcat的缺省端口是多少,怎么修改?
缺省端口8080
1)找到Tomcat目錄下的conf文件夾
2)進入conf文件夾里面找到server.xml文件
3)打開server.xml文件
4)在server.xml文件里面找到下列信息
<Connector connectionTimeout="20000" port="8080" protocol="HTTP/1.1" redirectPort="8443" uriEncoding="utf-8"/> port="8080"改成你想要的端口
?
====tomcat有哪幾種Connector 運行模式(優(yōu)化)?
?
bio:傳統(tǒng)的Java I/O操作,同步且阻塞IO。 maxThreads="150"//Tomcat使用線程來處理接收的每個請求。這個值表示Tomcat可創(chuàng)建的最大的線程 數(shù)。默認值200??梢愿鶕?jù)機器的時期性能和內(nèi)存大小調(diào)整,一般可以在400-500。最大可以在800左右。 minSpareThreads="25"---Tomcat初始化時創(chuàng)建的線程數(shù)。默認值4。如果當前沒有空閑線程,且沒有超 過maxThreads,一次性創(chuàng)建的空閑線程數(shù)量。Tomcat初始化時創(chuàng)建的線程數(shù)量也由此值設置。 maxSpareThreads="75"--一旦創(chuàng)建的線程超過這個值,Tomcat就會關(guān)閉不再需要的socket線程。默認 值50。一旦創(chuàng)建的線程超過此數(shù)值,Tomcat會關(guān)閉不再需要的線程。線程數(shù)可以大致上用 “同時在線人數(shù)* 每秒用戶操作次數(shù)*系統(tǒng)平均操作時間” 來計算。 acceptCount="100"----指定當所有可以使用的處理請求的線程數(shù)都被使用時,可以放到處理隊列中的請 求數(shù),超過這個數(shù)的請求將不予處理。默認值10。如果當前可用線程數(shù)為0,則將請求放入處理隊列中。這個 值限定了請求隊列的大小,超過這個數(shù)值的請求將不予處理。 connectionTimeout="20000" --網(wǎng)絡連接超時,默認值20000,單位:毫秒。設置為0表示永不超時, 這樣設置有隱患的。通??稍O置為30000毫秒。
?
nio:JDK1.4開始支持,同步阻塞或同步非阻塞IO。指定使用NIO模型來接受HTTP請求 protocol="org.apache.coyote.http11.Http11NioProtocol" 指定使用NIO模型來接受HTTP請 求。默認是BlockingIO,配置為protocol="HTTP/1.1" acceptorThreadCount="2" 使用NIO模型時接收線程的數(shù)目
aio(nio.2):JDK7開始支持,異步非阻塞IO。 apr:Tomcat將以JNI的形式調(diào)用Apache HTTP服務器的核心動態(tài)鏈接庫來處理文件讀取或網(wǎng)絡傳輸操作, 從而大大地 提高Tomcat對靜態(tài)文件的處理性能。
<!--
<Connector connectionTimeout="20000" port="8000" protocol="HTTP/1.1"
redirectPort="8443" uriEncoding="utf-8"/>
-->
<!-- protocol 啟用 nio模式,(tomcat8默認使用的是nio)(apr模式利用系統(tǒng)級異步io) -->
<!-- minProcessors最小空閑連接線程數(shù)-->
<!-- maxProcessors最大連接線程數(shù)-->
<!-- acceptCount允許的最大連接數(shù),應大于等于maxProcessors-->
<!-- enableLookups 如果為true,requst.getRemoteHost會執(zhí)行DNS查找,反向解析ip對應域
名或主機名-->
<Connector port="8080" protocol="org.apache.coyote.http11.Http11NioProtocol"
connectionTimeout="20000"
redirectPort="8443
maxThreads=“500”
minSpareThreads=“100”
maxSpareThreads=“200”
acceptCount="200"
enableLookups="false"
/>
?
其他配置:
maxHttpHeaderSize="8192" http請求頭信息的最大程度,超過此長度的部分不予處理。一般8K。
URIEncoding="UTF-8" 指定Tomcat容器的URL編碼格式。
disableUploadTimeout="true" 上傳時是否使用超時機制
enableLookups="false"--是否反查域名,默認值為true。為了提高處理能力,應設置為false
compression="on" 打開壓縮功能
compressionMinSize="10240" 啟用壓縮的輸出內(nèi)容大小,默認為2KB
noCompressionUserAgents="gozilla, traviata" 對于以下的瀏覽器,不啟用壓縮
compressableMimeType="text/html,text/xml,text/javascript,text/css,text/plain" 哪
些資源類型需要壓縮
?
====Tomcat有幾種部署方式?
第一種:直接將 web 項目文件(一般是復制生成的war包)復制到tomcat的webapps目錄中。
第二種:在本地tomcat的conf目錄中,新建Catalina/localhost目錄(這里要注意文件名的大小寫),然后在該目錄下新建一個xml文件,名字不可以隨意取,要和path后 的名字一致,我這里就應該是test.xml文件,它的具體內(nèi)容為:
<Context docBase="D:\work\test\web" path="/test" reloadable="true"/>
第三種:在tomcat中的conf目錄下的server.xml文件中,在<Host/>節(jié)點中添加一個context,具體為:
<Context Path="/test"?Docbase="C:\work\test\WebContent" ?Debug="0" Privileged="True" Reloadable="True"></Context>
?
====tomcat容器是如何創(chuàng)建servlet類實例?用到了什么原理?
當容器啟動時,會讀取在webapps目錄下所有的web應用中的web.xml文件,然后對xml文件進行解析,并讀取servlet注冊信息。然后,將每個應用中注冊的servlet類都進行加載,并通過反射的方式實例化。(有時候也是在第一次請求時實例化)在servlet注冊時加上loadOnStartup參數(shù),如果為正數(shù),則在一開始就實例化,web容器啟動的時候做實例化處理,順序是由小到大,正整數(shù)小的先被實例化,如果不寫或為負數(shù),則第一次請求實例化。
更多面試題或?qū)W習資源可查看我主頁或評論獲取