Tomcat5啟動(dòng)流程與配置詳解
雖然版本已經(jīng)更新蠻多的了,但是了解以前的還是有很大幫助的。
1.Tomcat5.0 目錄結(jié)構(gòu)
Tomcat下有9個(gè)目錄,分別是bin,common,conf,logs,server,shared,temp,webapps,work 目錄,現(xiàn)在對(duì)每一目錄做介紹。Tomcat根目錄在tomcat中叫<CATALINA_HOME>。
-<CATALINA_HOME>/bin-
存放各種平臺(tái)下啟動(dòng)和關(guān)閉Tomcat的腳本文件。startup.bat是windows下啟動(dòng)tomcat的文件,shutdown.bat是關(guān)閉tomcat的文件。
-<CATALINA_HOME>/common-
在common目錄下的lib目錄,存放Tomcat服務(wù)器和所有web應(yīng)用都能訪問(wèn)的JAR。
-<CATALINA_HOME>/shared-
在shared目錄下的lib目錄,存放所有web應(yīng)用能訪問(wèn)的,但Tomcat不能訪問(wèn)的JAR。
-<CATALINA_HOME>/server-
在server/webapps目錄中,存放Tomcat自帶的兩個(gè)APP-admin和manager應(yīng)用,使用來(lái)管理Tomcat-web服務(wù)用的。在server/lib目錄中,存放tomcat服務(wù)器所需要的各web應(yīng)用不能訪問(wèn)種jar。
-<CATALINA_HOME>/work –
Tomcat把各種由jsp生成的servlet文件放在這個(gè)目錄下。
-<CATALINA_HOME>/temp –
臨時(shí)活頁(yè)夾,Tomcat運(yùn)行時(shí)候存放臨時(shí)文件用的。
-<CATALINA_HOME>/logs –
存放Tomcat的日志文件。
-<CATALINA_HOME>/conf –
Tomcat的各種配置文件,最重要的是 server.xml。(下文將詳細(xì)介紹此文件)
-<CATALINA_HOME>/webapps-
web應(yīng)用的發(fā)布目錄,把 java開(kāi)發(fā)的web站點(diǎn)或war文件放入這個(gè)目錄下就可以通過(guò)tomcat服務(wù)器訪問(wèn)了。
2.Tomcat的啟動(dòng)
Tomcat的啟動(dòng)是從解析bat文件開(kāi)始,bat文件最終調(diào)用org.apache.catalina.startup.Bootstrap開(kāi)始類(lèi)的加載。
2.1 TOMCAT自己的類(lèi)載入器(ClassLoader)加載流程如下:
+---------------------------+
| Bootstrap |
| | |
| System |
| | |
| Common |
| / \ |
| Catalina Shared |
+---------------------------+
其中:
-Bootstrap –
載入JVM自帶的類(lèi)和$JAVA_HOME/jre/lib/ext/*.jar。
- System -
①載入$CATALINA_HOME/bin/bootstrap.jar 初始化Tomcat,執(zhí)行Main方法。
②$JAVA_HOME/lib/tools.jar Sun的工具類(lèi),包括編譯Jsp為Servlet的工具類(lèi)。
- Common -
這個(gè)目錄下的類(lèi)雖然對(duì)TOMCAT和所有的WEB APP都可見(jiàn)。但是Web App的類(lèi)不應(yīng)該放在這個(gè)目錄下,所有未打包的Class都在$CATALINA_HOME/common/classes下,所有打包的jar都在$CATALINA_HOME/commons/endorsed和$CATALINA_HOME/common/lib下,默認(rèn)情況會(huì)包含以下幾個(gè)包:
①jndi.jar JNDI API接口,這個(gè)包僅在Java1.2時(shí)候裝入,1.3以后的版本JDK已自動(dòng)裝入。
②naming-common.jar JNDI接口實(shí)現(xiàn)類(lèi),Tomcat用這些類(lèi)在內(nèi)存中使用Context。
③naming-resources.jar JNDI實(shí)現(xiàn),Tomcat用它們定位Web App的靜態(tài)資源。
④servlet.jar Servlet,Jsp API。
⑤xerces.jar XML解析器,特定的Web App可以在自己的/WEB-INF/lib 中覆蓋。
- Catalina -
裝入Tomcat實(shí)現(xiàn)所有接口的類(lèi),這些類(lèi)對(duì)Web App是完全不可見(jiàn)的,所有未打包的類(lèi)在$CATALINA_HOME/server/classes,所有jar包在$CATALINA_HOME/server/lib下。一般情況該ClassLoader將Load下面幾個(gè)包:
①catalina.jar Servlet容器的Tomcat實(shí)現(xiàn)包。
②jakarta-regexp-X.Y.jar 正則表達(dá)式,請(qǐng)求過(guò)濾時(shí)使用。
③servlets-xxxxx.jar Servlet支持包。
④tomcat-coyote.jar Tomcat的Coyote連接實(shí)現(xiàn)包。
⑤tomcat-jk.jar Web Server綁定包,允許Tomcat綁定Apache等作為Web Server。
⑥tomcat-jk2.jar 功能同上。
⑦tomcat-util.jar Tomcat工具類(lèi),可能被一些Connector用到。
⑧tomcat-warp.jar 用于Apache Server包。
- Shared -
載入所有WEB APP都可見(jiàn)的類(lèi),對(duì)TOMCAT不可見(jiàn)。 所有未打包的類(lèi)在$CATALINA_HOME/shared/classes,所有jar包在$CATALINA_HOME /lib下。默認(rèn)情況包含下面幾個(gè)包:
①jasper-compiler.jar Jsp編譯器,編譯Jsp為Servlet。
②jasper-runtime.jar Jsp(已編譯成Servlet)運(yùn)行支持包。
③naming-factory.jar 支持Web App使用JNDI的封裝包。
-WebAppX -
Web App ClassLoader,Web App被部署是在該ClassLoader被創(chuàng)建的時(shí)候。所有class都在WEB-INF/classes下,所有jar在WEB-INF/lib下。特別注意WEB APP自己的ClassLoader的實(shí)現(xiàn)與眾不同:
它先試圖從WEB APP自己的目錄里載入,如果失敗則請(qǐng)求父ClassLoader的代理。這樣可以讓不同的WEB APP之間的類(lèi)載入互不干擾.另,Tomcat Server使用的是Catalina ClassLoader,一般的Web App使用的是WebApp ClassLoader。
2.2 下面總結(jié)Tomcat類(lèi)加載過(guò)程
Bootstrap($JAVA_HOME/jre/lib/ext/*.jar)
System($CLASSPATH/*.class和指定的jar)
Common($CATALINA_HOME/common 下的classes,lib,endores三個(gè)子目錄)
Catalina ($CATALINA_HOME/server/下的classes和lib目錄僅對(duì)Tomcat可見(jiàn))
Shared($CATALINA_HOME/shared/下的classes和lib目錄以及$CATALINA_HOME/lib目錄)
僅對(duì)Web應(yīng)用程序可見(jiàn),對(duì)Tomcat不可見(jiàn)WebApp($WEBAPP/Web-INF/*僅對(duì)該WEB應(yīng)用可見(jiàn)classes/*.class lib/*.jar)
2.3加載類(lèi)和資源的順序?yàn)椋?br />
1、/Web-INF/classes
2、/Web-INF/lib/*.jar
3、Bootstrap
4、System
5、$CATALINA_HOME/common/classes
6、$CATALINA_HOME/common/endores/*.jar
7、$CATALINA_HOME/common/lib/*.jar
8、$CATALINA_HOME/shared/classes
9、$CATALINA_HOME/shared/lib/*.jar
3.server.xml
3.1配置tomcat組件的XML文件server.xml:
①頂層類(lèi)元素[Top Level Elements]: 位于整個(gè)配置文件的頂層, 包括<Server>和<Service>。
②連接器類(lèi)元素[Connectors ]: 客戶(hù)和服務(wù)(容器類(lèi)元素)間的通訊接口。接受客戶(hù)請(qǐng)求,返回響應(yīng)結(jié)果<Connector>。
③容器類(lèi)元素[Containers]: 處理客戶(hù)請(qǐng)求并且生成響應(yīng)結(jié)果,包含3個(gè):<Engine> <Host> <Context>。
④嵌套類(lèi)元素[Nested Components]: 可以加入到容器中的元素,包括:<logger> <Valve><Realm>等。
3.2下表為server.xml配置簡(jiǎn)介:
元素名
屬性
解釋
server
port
指定一個(gè)端口,這個(gè)端口負(fù)責(zé)監(jiān)聽(tīng)關(guān)閉tomcat的請(qǐng)求
shutdown
指定向端口發(fā)送的命令字符串
service
name
指定service的名字
Connector
(表示客戶(hù)端和service之間的連接)
port
指定服務(wù)器端要?jiǎng)?chuàng)建的端口號(hào),并在這個(gè)端口監(jiān)聽(tīng)來(lái)自客戶(hù)端的請(qǐng)求
minProcessors
服務(wù)器啟動(dòng)時(shí)創(chuàng)建的處理請(qǐng)求的線程數(shù)
maxProcessors
最大可以創(chuàng)建的處理請(qǐng)求的線程數(shù)
enableLookups
如果為true,則可以通過(guò)調(diào)用request.getRemoteHost()進(jìn)行DNS查詢(xún)來(lái)得到遠(yuǎn)程客戶(hù)端的實(shí)際主機(jī)名,若為false則不進(jìn)行DNS查詢(xún),而是返回其ip地址
redirectPort
指定服務(wù)器正在處理http請(qǐng)求時(shí)收到了一個(gè)SSL傳輸請(qǐng)求后重定向的端口號(hào)
acceptCount
指定當(dāng)所有可以使用的處理請(qǐng)求的線程數(shù)都被使用時(shí),可以放到處理隊(duì)列中的請(qǐng)求數(shù),超過(guò)這個(gè)數(shù)的請(qǐng)求將不予處理
connectionTimeout
指定超時(shí)的時(shí)間數(shù)(以毫秒為單位)
Engine
(表示指定service中的請(qǐng)求處理機(jī),接收和處理來(lái)自Connector的請(qǐng)求)
defaultHost
指定缺省的處理請(qǐng)求的主機(jī)名,它至少與其中的一個(gè)host元素的name屬性值是一樣的
Context
(表示一個(gè)web應(yīng)用程序,通常為WAR文件,關(guān)于WAR的具體信息見(jiàn)servlet規(guī)范)
docBase
應(yīng)用程序的路徑或者是WAR文件存放的路徑
path
表示此web應(yīng)用程序的url的前綴,這樣請(qǐng)求的url為http://localhost:8080/path/****
reloadable
這個(gè)屬性非常重要,如果為true,則tomcat會(huì)自動(dòng)檢測(cè)應(yīng)用程序的/WEB-INF/lib 和/WEB-INF/classes目錄的變化,自動(dòng)裝載新的應(yīng)用程序,我們可以在不重起tomcat的情況下改變應(yīng)用程序
host
(表示一個(gè)虛擬主機(jī))
name
指定主機(jī)名
appBase
應(yīng)用程序基本目錄,即存放應(yīng)用程序的目錄
unpackWARs
如果為true,則tomcat會(huì)自動(dòng)將WAR文件解壓,否則不解壓,直接從WAR文件中運(yùn)行應(yīng)用程序
Logger
(表示日志,調(diào)試和錯(cuò)誤信息)
className
指定logger使用的類(lèi)名,此類(lèi)必須實(shí)現(xiàn)org.apache.catalina.Logger 接口
prefix
指定log文件的前綴
suffix
指定log文件的后綴
timestamp
如果為true,則log文件名中要加入時(shí)間,如下例:localhost_log.2007-03-04.txt
Realm
(表示存放用戶(hù)名,密碼及role的數(shù)據(jù)庫(kù))
className
指定Realm使用的類(lèi)名,此類(lèi)必須實(shí)現(xiàn)org.apache.catalina.Realm接口
Valve
(功能與Logger差不多,其prefix和suffix屬性解釋和Logger 中的一樣)
className
指定Valve使用的類(lèi)名,如用org.apache.catalina.valves.AccessLogValve類(lèi)可以記錄應(yīng)用程序的訪問(wèn)信息
directory
指定log文件存放的位置
pattern
有兩個(gè)值,common方式記錄遠(yuǎn)程主機(jī)名或ip地址,用戶(hù)名,日期,第一行請(qǐng)求的字符串,HTTP響應(yīng)代碼,發(fā)送的字節(jié)數(shù)。combined方式比common方式記錄的值更多
一個(gè)<Server>包含一個(gè)或多個(gè)<Service>,一個(gè)<Service>包含唯一一個(gè)<Engine>和一個(gè)或多個(gè)<Connector>,多個(gè) <Connector>共享一個(gè)<Engine>;一個(gè)<Engine>包含多個(gè)<Host>,每個(gè)<Host>定義一個(gè)虛擬主機(jī),包含一個(gè)或多個(gè)web應(yīng)用<Context>; <Context>元素是代表一個(gè)在虛擬主機(jī)上運(yùn)行的Web應(yīng)用。<Context>標(biāo)簽的描述(Apache官方文檔):
Please note that for tomcat 5.x, unlike tomcat 4.x, it is NOT recommended to place <Context> elements directly in the server.xml file. Instead, put them in the META-INF/context.xml directory of your WAR file or the conf directory as described above.
3.3分析server.xml
-Server-
server元素是JVM的入口點(diǎn),整個(gè)配置文件只有一個(gè),因?yàn)閟erver不是容器(container),因此不能嵌套子組件。server在某一指定的端口監(jiān)聽(tīng)shutdown命令。server可以包含一個(gè)或多個(gè)service實(shí)。
-Service-
service有共享同一個(gè)Container的一個(gè)或多個(gè)Connectors組成,一般Service就是一個(gè)Engine,但沒(méi)有明確規(guī)范要求如此。因?yàn)镾ervice不是一個(gè)Container,因此不能在里面嵌套子組件(比如Loggers/Valves)。
-Connector-
connector就是一個(gè)Tomcat與客戶(hù)端的連接,Tomcat有兩種典型的Connector:http,JK2.http connector監(jiān)聽(tīng)來(lái)自Browser的連接(通常在我們熟悉的8080端口),JK2.來(lái)自其他WebServer的請(qǐng)求(默認(rèn)在8009端口監(jiān)聽(tīng))。Connector會(huì)把獲得的請(qǐng)求交給Engine處理。
-Engine-
Engine下可以配置多個(gè)虛擬主機(jī)Virtual Host,每個(gè)虛擬主機(jī)都有一個(gè)域名。當(dāng)Engine獲得一個(gè)請(qǐng)求時(shí),它把該請(qǐng)求匹配到某個(gè)Host上,然后把該請(qǐng)求交給該Host來(lái)處理。Engine有一個(gè)默認(rèn)虛擬主機(jī),當(dāng)請(qǐng)求無(wú)法匹配到任何一個(gè)Host上的時(shí)候,將交給該默認(rèn)Host來(lái)處理。
-Host-
host代表一個(gè)虛擬主機(jī),默認(rèn)是localhost,host下可以部署多個(gè)web application,在我們實(shí)際應(yīng)用中一般要考慮問(wèn)題的對(duì)象就是host。
4.Tomcat主要組件類(lèi)介紹
4.1 org.apache.catalina.Lifecycle
通用的組件聲明周期接口,一般Tomcat的組件都要實(shí)現(xiàn)這個(gè)接口(但不是必須的),這個(gè)接口是為所有組件提供相同的start和stop。
4.2 org.apache.catalina. LifecycleListener
該接口用于監(jiān)聽(tīng)一些重要事件(包括實(shí)現(xiàn)了Lifecycle接口組件產(chǎn)生的start,stop事件)。
4.3 org.apache.catalina.Container
容器是用于從客戶(hù)端取得請(qǐng)求(request)并且處理請(qǐng)求并回復(fù)給客戶(hù)端(response)的對(duì)象。容器可以支持(可選)pipeline,以便能在運(yùn)行時(shí)按配置的順序處理請(qǐng)求。
在Tomcat里面,容器在概念上存在以下幾層:
-Engine-請(qǐng)求處理入口點(diǎn),可以包含多個(gè)Host和Context。
-Host-代表一個(gè)虛擬主機(jī)。
-Context-代表單個(gè)ServletContext,可以包含多個(gè)Wrappers。
-Wrapper-代表單個(gè)Servlet,如果Servlet實(shí)現(xiàn)了SingleThreadModel,可以代表單個(gè)Servlet的多個(gè)實(shí)例。
容器為了實(shí)現(xiàn)自己的功能經(jīng)常要綁定一些其他組件,這些組件的功能可能被共享,也可以被單獨(dú)定制,下面是被使用的組件:
-Loader-ClassLoader,裝載Java Classes。
-Logger-實(shí)現(xiàn)了ServletContext的log方法,用于記錄日志。
-Manage-管理與容器綁定的session池。
-Realm-用戶(hù)安全管理。
-Resources-JNDI資源訪問(wèn)
4.4 org.apache.catalina. ContainerListener
容器事件監(jiān)聽(tīng)器,注意的是start,stop是正常的生命周期事件(LiftcycleEvent)不是容器事件。
4.5 org.apache.catalina. Pipeline
Pipleline是Valve的集合,當(dāng)invoke方法被調(diào)用時(shí),它會(huì)按指定的順序調(diào)用Valve,它總是要求有一個(gè)Valve必須處理傳遞的request(一般是最后一個(gè))并產(chǎn)生response,否則就把request傳遞到下一個(gè)Valve。
一般一個(gè)容器僅綁定一個(gè)Pipleline實(shí)例,一般說(shuō)來(lái)容器會(huì)把處理request的功能封裝到一個(gè)容器綁定的Valve里(這個(gè)Valve應(yīng)該在Pipleline最后被執(zhí)行)。為了完成這個(gè)功能,Pipleline提供了setBasic()方法以保證Valve被最后執(zhí)行,而其他Valve按順序被調(diào)用。
4.6 org.apache.catalina.Valve
Valve是被綁定在一個(gè)Container上的請(qǐng)求處理組件,一組Valve被按順序綁定在一個(gè)Pipleline上。
一個(gè)Valve可能按照一定的順序執(zhí)行下面的動(dòng)作:
*1.檢查并且(或者)修改指定的Request和Response屬性。
*2.檢查Request屬性,生成相應(yīng)的Response并返回控制權(quán)到調(diào)用者。
*3.檢查Request和Reponse屬性,包裝這些對(duì)象并增強(qiáng)它們的功能,然后把它們傳到下一個(gè)組件。
*4.如果相應(yīng)的Response沒(méi)有被產(chǎn)生(并且控制權(quán)也沒(méi)有被返回)調(diào)用Pipleline上的下一個(gè)Valve(如果有)通過(guò)方法context.invokeNext()。
*5.檢查(但不修改)Response屬性(調(diào)用后面的Valve或Container產(chǎn)生的)。
Valve一定不能作下面的事情:
*1.改變Request的一些屬性(Change request properties that have already been used to direct the flow of processing control for this request)。
*2.創(chuàng)建一個(gè)已經(jīng)被創(chuàng)建并且已經(jīng)被傳遞的Response。
*3.在調(diào)用invokeNext()方法并返回后修改包含Response的HTTP Header信息。
*4.在invokeNext()調(diào)用返回后在綁定Response上的輸出流上作任何調(diào)用。
*@param request 將被處理的Request
*@param response 將被創(chuàng)建的Response
*@param context 被用來(lái)調(diào)用下一個(gè)Valve的Valve Context
4.7 org.apache.catalina.ValveContext
一個(gè)ValveContext是這樣一種機(jī)制:一個(gè)Valve可以觸發(fā)下一個(gè)Valve的調(diào)用,而不必知道機(jī)制的內(nèi)在實(shí)現(xiàn)。
4.8 org.apache.catalina.Engine
Engine是一個(gè)容器,是Cataline的Servlet的入口點(diǎn)。當(dāng)發(fā)布一個(gè)連接到Web Server的Cataline時(shí)可能不使用Engine,因?yàn)镃onnectior將使用Web Server的資源決定使用哪個(gè)Context處理Request。附屬于Engine的子容器根據(jù)Engine實(shí)現(xiàn)的不同可能是Host或Context(單個(gè)Servlet Context)。如果使用了Engine,在Cataline的層次中它就是頂層容器,因此setParent()應(yīng)改拋出IllegalArgumentException異常。
4.9 org.apache.catalina. Host
Host是一個(gè)容器,它代表一個(gè)虛擬主機(jī)。當(dāng)發(fā)布一個(gè)連接到Web Server的Cataline時(shí)可能不使用Host,因?yàn)镃onnectior將使用Web Server的資源決定使用哪個(gè)Context處理Request。Host所附屬的父容器通常是Engine,附屬于Host的子容器通常是Context(單個(gè)Servlet Context)。Host接口里面的方法多數(shù)都是關(guān)于修改Host屬性及設(shè)定默認(rèn)的Context。這里我們不再一一列舉。
4.10 org.apache.catalin. Context
Context是一個(gè)容器,它代表一個(gè)ServletContext,一個(gè)Cataline Engline中的單個(gè)的Web Application。Context所附屬的父容器是Host,附屬于Context的子容器是Wrapper(代表單個(gè)Servlet)。Context接口里面多數(shù)是關(guān)于Web Application的設(shè)置的方法,我們可以參考Web.xml文件研究里面的方法,里面多數(shù)方法都是如何讀取Web.xml文件里的資源。
4.11 org.apache.catalina.Wrapper
Wrapper是一個(gè)容器,它代表單個(gè)Servlet。Wrapper管理Servlet的生命周期,包括調(diào)用init()和destory()方法。Wrapper所附屬的父容器是Context,沒(méi)有附屬于Wrapper的子容器,方法addChild()應(yīng)該拋出IllegalArgumentException異常。Wrapper接口里面的方法都是關(guān)于讀取Servlet的屬性,可以參考Web.xml文件里面關(guān)于<servlet>標(biāo)簽的定義。
4.12 org.apache.catalina.Server
Server是整個(gè)Catalina容器的入口點(diǎn),可以包含多個(gè)Service和頂層資源元素。一般說(shuō)來(lái)實(shí)現(xiàn)Server接口的類(lèi)也應(yīng)該同時(shí)實(shí)現(xiàn)Lifecycle接口,當(dāng)start()和stop()方法被調(diào)用的時(shí)候調(diào)用Service相應(yīng)的方法。
Server負(fù)責(zé)在指定的端口監(jiān)聽(tīng)連接,當(dāng)有連接被接受的時(shí)候,Server會(huì)分析請(qǐng)求的第一行信息,如果是SHUTDOWN則stop服務(wù)。可以參考Server.xml文件關(guān)于Server的定義。
4.13 org.apache.catalina. Service
Service是一個(gè)或多個(gè)共享同以Container的Connectiors的集合。
JVM可以包含一個(gè)或多個(gè)Service實(shí)例,但它們相互之間是完全獨(dú)立的,它們僅共享JVM的資源。
4.14 org.apache.catalina. Connector
Connector是一個(gè)從客戶(hù)端接受請(qǐng)求(request)并生成回應(yīng)(reponse)的組件。一個(gè)Connection通常執(zhí)行下面的邏輯:
1)從客戶(hù)端程序接受請(qǐng)求。
2)創(chuàng)建Request和Response,并把下面這些屬性設(shè)置到這些對(duì)象。
對(duì)所有的Request,connector,protocol,protocol,response,scheme,secure,serverName,serverPort,serverPort屬性必須被設(shè)置。contentLength,contentType通常也被設(shè)置。
對(duì)所有的HttpRequests,method,queryString,requestedSessionCookie,requestedSessionId,requestedSessionURL,requestURI,secure屬性必須被設(shè)置。另外所有addXxx方法也必須被調(diào)用以記錄cookies,headers和locales信息。
對(duì)所有的Responses屬性connector,request,stream屬性必須被設(shè)置。對(duì)HttpResponses來(lái)說(shuō),connector不會(huì)為它設(shè)置額外headers信息。
5.WEB應(yīng)用程序的目錄結(jié)構(gòu)
在WEB上發(fā)布的J2EE應(yīng)用程序都有自己特定的目錄結(jié)構(gòu)。假設(shè)創(chuàng)建一名為HELLOAPP的WEB項(xiàng)目。
-HELLOAPP-WEB應(yīng)用根目錄,所有JSP\HTML等文件均存放于此。
-HELLOAPP/WEB-INF-存放WEb應(yīng)用的發(fā)布描述文件web.xml。
-HELLOAPP/WEB-INF/classes-存放各種class文件,servlet類(lèi)文件也存放于此。
-HELLOAPP/WEB-INF/lib-存放WEb應(yīng)用所需的各種JAR文件。
6.tomcat 虛擬主機(jī)配置
第一步
<Host name="
<Context path="" docBase="." debug="0"/>
</Host>
<Host name="
<Context path="" docBase="." debug="0"/>
</Host>
第二步對(duì)于windows XP:
\WINDOWS\system32\drivers\etc\hosts,此文件沒(méi)有擴(kuò)展名,可以手工創(chuàng)建。
127.0.0.1 localhost
127.0.0.1 www.dykj.com
127.0.0.1 www.zhip.com
7.tomcat做web服務(wù)器的中文參數(shù)傳遞問(wèn)題
tomcat做web服務(wù)器時(shí),通過(guò)地址欄傳中文參數(shù)時(shí),為防止瀏覽器上的為亂碼,需在服務(wù)器server.xml中配置對(duì)應(yīng)的端口中配置編碼方式即可。例如:
<Connector port="8080" maxThreads="150" minSpareThreads="25"
maxSpareThreads="75" enableLookups="false" redirectPort="8443"
acceptCount="100" debug="0" connectionTimeout="20000"
disableUploadTimeout="true" useBodyEncodingForURI="true"
URIEncoding="UTF-8"/>
中加入useBodyEncodingForURI="true" URIEncoding="UTF-8"就可以了。