tomcat使用方法大全


一、安裝tomcat之后

tomcat壓縮包解壓之后,進入webapps目錄,可以看到如下webapp:

  • docs文檔:這是一個靜態頁面集,不用啟動tomcat也可以閱讀
  • examples樣例
  • hostmanager主機管理器
  • manager應用管理器
  • ROOT根目錄:這個app可以訪問以上四個app,這個app是默認的app,這個app十分簡單,只有一些資源文件和一個jsp頁面。

安裝完tomcat之后,在bin目錄下啟動startup.bat。在瀏覽器地址欄輸入localhost:8080,仔細閱讀首頁,此頁面包羅萬象,可以進入到文檔,可以進入到配置,是十分重要的資源索引。
有了文檔,不需要百度,不需要從官網上下載文檔doc-full.zip,仔細閱讀之,一切問題在這里都能找到答案。

二、tomcat端口映射

眾所周知,在unix下,非root用戶不能監聽1~1024的端口號,原因是這些端口號都有特殊用途,是許多默認協議的默認端口號。tomcat默認端口號是8080,最好不要更改tomcat的端口號,通過端口映射的方式可以把80端口的請求轉發到8080。

方法一:配置iptables,把80端口轉到8080

在root賬戶下面運行一下命令:
iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 8080
注意:網上朋友的命令dport 前面都是 一個 -,通常都會報錯。另外如果防火牆重新啟動,該命令就會失效。
可以使用下面的命令把該規則保存到iptables里面 :
service iptables save

方法二:使用Nginx

這種方式是最為正規完善的方式,詳見此文

三、tomcat修改端口號

強烈建議不要修改端口號,而是通過端口映射的方式:將80端口的請求轉發到8080端口。
tomcat默認端口號為8080,http服務的默認端口號為80。在瀏覽器地址欄輸入ip或者域名之后,如果不輸入端口號,默認就是80端口。
修改tomcat目錄下的conf/server.xml文件,service標簽下的Connector可以有多個,再添加一個80端口的連接就可以了

<Connector port="8080" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443" />
  
<Connector port="80" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443" />

四、設置默認應用

修改tomcat目錄下的conf/server.xml文件,添加Context標簽並設置docBase,需要注意在java中路徑分隔符一律按照'/'來總是正確的。

<Host name="localhost"  appBase="webapps"  
           unpackWARs="true" autoDeploy="true">  
       <!-- SingleSignOn valve, share authentication between web applications  
            Documentation at: /docs/config/valve.html -->  
       <!-- 
       <Valve className="org.apache.catalina.authenticator.SingleSignOn" /> 
       -->  
       <!-- Access log processes all example.  
            Documentation at: /docs/config/valve.html  
            Note: The pattern used is equivalent to using pattern="common" -->  
       <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"  
              prefix="localhost_access_log." suffix=".txt"  
              pattern="%h %l %u %t "%r" %s %b" />  
    <Context path="" docBase="D:\apache\apache-tomcat-7.0.26\webapps\OnlineExam">  
            <WatchedResource>WEB-INF/web.xml</WatchedResource>  
    </Context>  
</Host> 

實際上,上面介紹的這種方法乃是下策,上策是把webapp的名稱直接改為ROOT,tomcat默認ROOT目錄是默認webapp

五、tomcat遠程部署

Tomcat安裝成功后,在ip地址:8080上就可以看見熟悉的首頁,在這個首頁中,上方有一個manage app按鈕,點擊就可以進行應用管理了.這樣就不需要使用ftp把war包傳上去了.

要想遠程部署,需要更改兩個地方,第一個地方比較容易發現,只要點擊按鈕,就會跳到一頁,這頁內容指導我們更改TOMCAT_HOME/conf/tomcat-users.xml目錄,照着來就可以了.

仍舊發現無法訪問manage app,這是因為tomcat 8.5以后的版本,默認manage app這個應用不許遠程訪問,需要更改這個應用的配置文件,即:TOMCAT_HOME/webapps/manager/META-INF/context.xml,把這個文件中的ip地址限制那句話注釋掉就可以了.

<Context antiResourceLocking="false" privileged="true" >
  <!--Valve className="org.apache.catalina.valves.RemoteAddrValve"
         allow="127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1" /-->
</Context>

六、Tomcat解決中文亂碼問題

Tomcat默認使用的編碼時ISO88591。
URLEncode是一種將byte數組轉化為ASCII碼字符串的方式,而byte數組轉化為真正的字符串是需要編碼的。
URLEncode+GBK、URLEncode+UTF8結果是不一樣的。
保守點的方法:把亂碼用ISO88591轉換回byte數組,將byte數組用utf8進行解碼。

String city = new String(request.getParameter("city").getBytes("ISO-8859-1"),"utf-8");  

徹底一點的方法:把tomcat的默認URL編碼設置為UTF8。
在TOMCAT中的conf/server.xml中的Connector中添加兩個設置

useBodyEncodingForURI="true" //設置POST和GET使用相同編碼
URIEncoding="UTF-8" //對URI使用utf-8編碼處理。

七、tomcat啟動太慢解決方案

解決方法

方法一:只在Tomcat環境中解決

可以通過配置JRE使用非阻塞的Entropy Source。
在catalina.sh中加入這么一行:-Djava.security.egd=file:/dev/./urandom 即可。
加入后再啟動Tomcat,整個啟動耗時下降到Server startup in 2912 ms。

方法二:在JVM環境中解決

在/dev目錄下,ls | grep random可以找到random和urandom,查看random文件內容head random很慢,會卡住一段時間,head urandom卻很快,我們需要做的就是更改隨機源。

打開$JAVA_PATH/jre/lib/security/java.security這個文件,找到下面的內容:

securerandom.source=file:/dev/random

替換成

securerandom.source=file:///dev/urandom

問題原因

原因
Tomcat 7/8都使用org.apache.catalina.util.SessionIdGeneratorBase.createSecureRandom類產生安全隨機類SecureRandom的實例作為會話ID,這里花去了342秒,也即接近6分鍾。

SHA1PRNG算法是基於SHA-1算法實現且保密性較強的偽隨機數生成器。

在SHA1PRNG中,有一個種子產生器,它根據配置執行各種操作。

1)如果java.security.egd屬性或securerandom.source屬性指定的是file:/dev/randomfile:/dev/urandom,那么JVM會使用本地種子產生器NativeSeedGenerator,它會調用super()方法,即調用SeedGenerator.URLSeedGenerator(/dev/random)方法進行初始化。

2)如果java.security.egd屬性或securerandom.source屬性指定的是其它已存在的URL,那么會調用SeedGenerator.URLSeedGenerator(url)方法進行初始化。

這就是為什么我們設置值為file:///dev/urandom或者值為file:/./dev/random都會起作用的原因。

在這個實現中,產生器會評估熵池(entropy pool)中的噪聲數量。隨機數是從熵池中進行創建的。當讀操作時,/dev/random設備會只返回熵池中噪聲的隨機字節。/dev/random非常適合那些需要非常高質量隨機性的場景,比如一次性的支付或生成密鑰的場景。

當熵池為空時,來自/dev/random的讀操作將被阻塞,直到熵池收集到足夠的環境噪聲數據。這么做的目的是成為一個密碼安全的偽隨機數發生器,熵池要有盡可能大的輸出。對於生成高質量的加密密鑰或者是需要長期保護的場景,一定要這么做。

那么什么是環境噪聲?

隨機數產生器會手機來自設備驅動器和其它源的環境噪聲數據,並放入熵池中。產生器會評估熵池中的噪聲數據的數量。當熵池為空時,這個噪聲數據的收集是比較花時間的。這就意味着,Tomcat在生產環境中使用熵池時,會被阻塞較長的時間。
參考資料


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM