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