tomcat簡介
Tomcat
是一個開源、免費、輕量級的web服務器,只支持部分JavaEE規范(Servlet、JSP),適合部署中小型、並發訪問量不大的web項目,是部署中小型Java Web項目的首選。
Tomcat
和Nginx
、Apache
等Web
服務器一樣,具有處理靜態資源的能力,但Tomcat
處理靜態HTML
的能力不如Nginx、Apache。
一般使用
Nginx+Tomcat
,Nginx
處理靜態資源,Tomcat
處理動態資源。
Tomcat就是Servlet容器。
tomcat的目錄結構
下載tomcat的zip壓縮包,
- bin 存放啟動和關閉tomcat的腳本
- conf 存放tomcat配置相關的文件,主要包括server.xml(tomcat服務器的主要配置文件)、web.xml(為部署的web應用設置默認值的文件)
- lib 存放Tomcat運行需要的jar包
- logs 存放Tomcat的日志文件
- temp 存放臨時文件
- webapps web app的根目錄,主要用於部署web項目。里面有幾個tomcat自帶的web項目,root是根項目——tomcat的控制台,127.0.0.1:8080顯示的那個。
- work 存放Tomcat運行時的臨時文件(主要是JSP編譯出的Servlet的.java和.class文件),如在Tomcat運行時刪除此目錄,JSP頁面將不能運行
環境變量的配置
- CATALINA_HOME 值是tomcat的主目錄
注意是主目錄,不是主目錄下的bin目錄。
tomcat依賴jdk,需要設置jdk的環境變量。
設置之后就可以雙擊startup.bat啟動tomcat了。
如果要在命令行下操作tomcat,有2種方式:
- 在PATH環境變量中添加tomcat的bin目錄。此種方式在命令提示符的任意路徑下都可啟動、關閉tomcat。
- 先把當前路徑切換到tomcat的bin目錄(程序所在目錄),再執行啟動、關閉命令。
在命令提示符下,執行java、javac也是同樣的道理。
tomcat的2種啟動、關閉方式
-
雙擊bin下的startup.bat啟動,雙擊shutdown.bat關閉
-
命令行下startup啟動,shutdown關閉
啟動tomcat后,在瀏覽器地址欄輸入localhost:8080,或者127.0.0.1:8080,可轉到tomcat服務器的控制台。
startup.bat只是tomcat的啟動入口,和編程中的主類、主函數差不多,只是程序入口,調用其它模塊就行了。
startup.bat實際是調用catalina.bat來完成啟動的,catalina.bat負責啟動,startup.bat只負責調用catalina.bat。
tomcat啟動不了的常見原因
- 環境變量未配好,參考上面環境變量的配置
- 其它程序占用了8080端口
比如已經有一個啟動的tomcat了、IDEA中正在使用tomcat進行調試,或者8080端口被其它程序占用。
apache使用的端口號默認是80,tomcat使用的端口號默認是8080。
如果url中未指定端口號,瀏覽器默認使用80端口。服務器使用的不是80端口時,我們需要手動在域名|IP地址后面指定端口號。
一個程序可以使用多個端口,但一個端口不能同時被多個程序使用。
命令提示符 netstat -ano 查看正在使用的端口
也可以使用netstat -ano | findstr 8080 直接查看8080端口:
8080引不引都行
如果端口號被占用,有2種解決方式:
- 關閉使用8080端口的其它程序:打開任務管理器,結束PID對應的進程。
- 修改tomcat的端口號:conf -> server.xml
<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" />
將8080改為其它未使用的端口號。
訪問時,瀏覽器地址中的端口號也要換為對應的。
解決tomcat窗口中文亂碼
中文亂碼原因:
windows的控制台(黑框框)默認使用gbk,tomcat的日志默認使用utf-8(tomcat會把日志輸出到黑框框、log文件夾下的日志文件中)。
tomcat用utf-8編碼日志,把日志輸出給windows的黑框框,windows使用gbk來解碼,顯式日志信息,
utf-8用3個字節表示一個中文字符,gbk用2個字節表示一個中文字符,對不上,解析不了,亂碼。
英文都是1個字節,都是ASCII碼,能解析,正常顯示。
解決方式:
conf -> logging.properties -> 搜索console:
java.util.logging.ConsoleHandler.level = FINE
java.util.logging.ConsoleHandler.formatter = org.apache.juli.OneLineFormatter
java.util.logging.ConsoleHandler.encoding = GBK
tomcat使用的是jdk自帶的日志處理器。
一看到console,就知道是輸出到控制台的日志,將UTF-8改為GBK,重啟tomcat即可。