tomcat安装启动配置
服務器:
服務器的概念非常的廣泛,它可以指代一臺特殊的計算機(相比普通計算機運行更快、負載更高、價格更貴),也可以指代用于部署網站的應用。我們這里說的服務器,其實是web服務器,或者應用服務器。它本質就是一個軟件,一個應用,通過軟硬件的結合從而達到發布應用(工程)的作用,讓用戶可以通過瀏覽器訪問我們的應用。
常見的應用服務器,請看下表:
- 重量級:重量級服務器實現了所有的JavaEE規范
- 輕量級:輕量級服務器實現了部分JavaEE規范
| weblogic | 實現了javaEE規范,重量級服務器,又稱為javaEE容器 |
| websphereAS | 實現了javaEE規范,重量級服務器。 |
| JBOSSAS | 實現了JavaEE規范,重量級服務器。免費的。 |
| Tomcat | 實現了jsp/servlet規范,是一個輕量級服務器,開源免費。 |
Tomcat:
Tomcat是Apache軟件基金會的一個核心項目,由Apache、Sun和其它公司共同開發而成的。由于有了Sun公司的參與支持,最新的Servlet、JSP規范總是能在Tomcat中得到體提現,因為Tomcat技術先進、性能穩定,而且免費,所以深受Java愛好者并得到了部分軟件開發商的認可,已成為目前開發企業JavaWeb應用的最佳Servlet容器選擇之一。
Tomcat各版本的技術支持:
| 6.0 | 3.1 | 5.0 | TBD | TBD | 10.1.x | 10.1.0-M6 (alpha) | 11 and later |
| 5.0 | 3.0 | 4.0 | 2.0 | 2.0 | 10.0.x | 10.0.12 | 8 and later |
| 4.0 | 2.3 | 3.0 | 1.1 | 1.1 | 9.0.x | 9.0.54 | 8 and later |
| 3.1 | 2.3 | 3.0 | 1.1 | 1.1 | 8.5.x | 8.5.72 | 7 and later |
| 3.1 | 2.3 | 3.0 | 1.1 | N/A | 8.0.x (superseded) | 8.0.53 (superseded) | 7 and later |
| 3.0 | 2.2 | 2.2 | 1.1 | N/A | 7.0.x (archived) | 7.0.109 (archived) | 6 and later(7 and later for WebSocket) |
| 2.5 | 2.1 | 2.1 | N/A | N/A | 6.0.x (archived) | 6.0.53 (archived) | 5 and later |
| 2.4 | 2.0 | N/A | N/A | N/A | 5.5.x (archived) | 5.5.36 (archived) | 1.4 and later |
| 2.3 | 1.2 | N/A | N/A | N/A | 4.1.x (archived) | 4.1.40 (archived) | 1.3 and later |
| 2.2 | 1.1 | N/A | N/A | N/A | 3.3.x (archived) | 3.3.2 (archived) | 1.1 and later |
Mac版本下載:
下載地址:http://tomcat.apache.org/
啟動Tomcat:
- 下載好了解壓到指定路徑,并進到bin目錄下
- 打開終端,把bin目錄拖到cd后面
啟動:
- Windows啟動:startup.bat Windows
- Linux/Mac啟動:./startup.sh
停止:
- Windows停止:shutdown.bat Windows
- Linux/Mac停止:./shutdown.sh
訪問http://localhost:8080/可以看到這樣的就說明啟動了
自己部署項目的話就放在在webapps目錄下瀏覽器訪問對應的路徑就可以了
為什么需要寫8080才可以訪問
- 正常情況下訪問一個網站都是只要輸入域名就可以了,但是Tomcat提供的是http服務,而http的端口默認是80,所以為了和http的端口貼近,就默認是8080了,而且在Linux里不是root用戶的話是不能使用1024以內的端口號的
Linux版本下載與安裝:
- 下載Tomcat,和Mac版一樣,用tar.gz的上傳到Linux
- 在crt上 使用 alt+p,將windows上的軟件拖進去即可(root目錄)
Tomcat目錄結構:
Tomcat異常:
啟動問題:
- 原因:沒有配置環境變量。
- 解決辦法:配置上JAVA_HOME環境變量
- 原因:端口被占用
- 解決辦法:修改conf文件下的server.xml配置文件修改端口號,(修改69行的port=”8080″)修改完再啟動
- 原因:Tomcat中部署著很多項目,每次啟動這些項目都會啟動。而這些項目中有啟動報異常的。
解決辦法: - 找到報異常的項目,就把它從發布目錄中移除。
- 不能確定報異常的項目,就重新解壓一個新的Tomcat。
- 原因:可能和你的控制臺的字符集不匹配
解決辦法: - 打開conf下的logging.properties的配置文件,47行的UTF-8改成GBK,或者GBK改成UTF-8
IDEA集成Tomcat:
新建項目就可以使用Tomcat了
創建完是這樣的
URL:自己隨便寫,把下面兩個改為更新和資源便于后續更新時不需要重啟服務器
都配置完畢,就可以啟動Tomcat了
Tomcat報錯:java.lang.NoClassDefFoundError: javax/servlet/http/HttpServlet
報錯內容如下,
解決:
1、更換Tomcat版本,我是10版本換成了9就沒問題了,不知道為什么。
2、網上說要加依賴,這個沒試,
Tomcat部署項目找不到war包:
在我們啟動項目時發現tomcat配置里找不到war包,這個時候啟動就會有問題。把下面的操作跟著做一遍即可。
1、首先找到項目結構
2、找到工件,點擊添加
3、在工件中添加web應用程序,選擇基于模塊
然后會彈出彈框,點擊確定
4、這個時候的配置如圖所示,點擊確定即可
5、回到Tomat配置文件中,點擊添加工件就會出現war包了
點擊確定,到這里就配置好了
JavaWeb應用目錄結構詳解
Tomcat創建好以后會自動創建幾個目錄
- src:存放源代碼的
- web:存在項目相關資源的(html、css、js、jsp、圖片等)
- WEB-INF:存放相關配置的(web.xml等),如果有web.xml或者.class文件時,該目錄必須存在,且嚴格區分大小寫。該目錄下的資源,客戶端是無法直接訪問的。目錄中內容如下:
- classes:web應用的class文件(加載順序:我們的class,lib目錄中的jar包,tomcat的lib目錄中的jar包。優先級依次降低)
- lib:web應用所需的jar包(tomcat的lib目錄下jar為所有應用共享)
- web.xml:web應用的主配置文件
Tomcat啟動報錯:java.net.BindException
報錯內容:沒復制完,當時還有別的內容,反正一般起不來基本都是端口沖突的問題,改端口或者kill就行了。有時候是因為剛安裝Tomcat然后啟動訪問8080測試,當時忘記關閉,然后又去IDEA集成Tomcat,就會遇到沖突的問題。
org.apache.catalina.LifecycleException: 協議處理程序初始化失敗 at org.apache.catalina.connector.Connector.initInternal(Connector.java:1059) at org.apache.catalina.util.LifecycleBase.init(LifecycleBase.java:136) at org.apache.catalina.core.StandardService.initInternal(StandardService.java:556) at org.apache.catalina.util.LifecycleBase.init(LifecycleBase.java:136) at org.apache.catalina.core.StandardServer.initInternal(StandardServer.java:1012) at org.apache.catalina.util.LifecycleBase.init(LifecycleBase.java:136) at org.apache.catalina.startup.Catalina.load(Catalina.java:747) at org.apache.catalina.startup.Catalina.load(Catalina.java:769) at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.base/java.lang.reflect.Method.invoke(Method.java:566) at org.apache.catalina.startup.Bootstrap.load(Bootstrap.java:305) at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:475)Tomcat更改端口號:
Tomcat服務器主配置文件中配置著訪問端口,它在配置文件中寫的值是:8080。但是它不是Tomcat的默認端口。我們此處說的默認端口是,當使用默認值的時候,端口號可以省略。Tomcat的默認端口是80。
通過在主配置文件中添加標簽實現,在conf的目錄下有一個server.xml的配置文件,如果想改端口號就找到這個
<!-- 改成80端口號的話就不需要輸入localhost:8080了,只需要輸入localhost就可以發布正式項目的時候都是需要改為80端口號的 --><Connector port="8080" protocol="HTTP/1.1"connectionTimeout="20000"redirectPort="8443" />Tomcat配置虛擬目錄:
作用:可以發布任意目錄下的項目
在server.xml的元素中加一個元素。
? path:訪問資源虛擬目錄名稱 。URL名稱可以隨便起,但是必須在前面加上一個/
? docBase:項目真實存在的路徑。
寫一個獨立的xml文件,該文件名可以隨便起。在文件內寫一個元素。該文件要放在Tomcat目錄中的conf\Catalina\localhost\目錄下。需要注意的是,在使用了獨立的配置文件之后,訪問資源URI就變成了/+文件的名稱。而Context的path屬性就失效了
Tomcat編輯虛擬主機:
編輯server.xml配置文件,找到在<Engine>元素在元素中添加一個
<!-- 會在localhost訪問的時候,會到webapps下找到webdemo這個項目 --><Host name="localhost" appBase="webapps"unpackWARs="true" autoDeploy="true"Context path ="" docBase="webdemo"></Host>其中:
- name:指定主機的名稱
- appBase:當前主機的應用發布目錄
- unparkWARs:true啟動時是否自動解壓war包
- autoDeploy:是否自動發布
- docBase:項目的名稱
改完server.xml后還要修改電腦的hosts文件,加上host中name的值,如果是配置域名的話就把name的值改為域名地址,然后下面綁定域名就可以了
127.0.0.1 localhostTomcat Server處理一個http請求的過程:
假設來自客戶的請求為:http://localhost:8080/wsota/wsota_index.jsp
請求被發送到本機端口8080,被在那里偵聽的Coyote HTTP/1.1 Connector獲得
Connector把該請求交給它所在的Service的Engine來處理,并等待來自Engine的回應
Engine獲得請求localhost/wsota/wsota_index.jsp,匹配它所擁有的所有虛擬主機Host
Engine匹配到名為localhost的Host(即使匹配不到也把請求交給該Host處理,因為該Host被定義為該Engine的默認主機)
localhost Host獲得請求/wsota/wsota_index.jsp,匹配它所擁有的所有Context
Host匹配到路徑為/wsota的Context(如果匹配不到就把該請求交給路徑名為""的Context去處理)
path="/wsota"的Context獲得請求/wsota_index.jsp,在它的mapping table中尋找對應的servlet
Context匹配到URL PATTERN為*.jsp的servlet,對應于JspServlet類
構造HttpServletRequest對象和HttpServletResponse對象,作為參數調用JspServlet的doGet或doPost方法
Context把執行完了之后的HttpServletResponse對象返回給Host
Host把HttpServletResponse對象返回給Engine
Engine把HttpServletResponse對象返回給Connector
Connector把HttpServletResponse對象返回給客戶browser
startup.bat詳解:
if "%OS%" == "Windows_NT" setlocal //判斷當前系統是否是window系統rem --------------------------------------------------------------------------- //rem 是注釋(下同)rem Start script for the CATALINA Serverremrem $Id: startup.bat 302918 2004-05-27 18:25:11Z yoavs $rem ---------------------------------------------------------------------------rem Guess CATALINA_HOME if not definedset CURRENT_DIR=%cd% //設置當前目錄if not "%CATALINA_HOME%" == "" gotogotHome //如果設置了CATALINA_HOME環境變量 ,就直接到下面的gotHome處set CATALINA_HOME=%CURRENT_DIR% //如果沒有設置CATALINA_HOME,就設置CATALINA_HOME為當前目錄(其實這里她假設你進入tomcat的安裝目錄)if exist "%CATALINA_HOME%\bin\catalina.bat" gotookHome//判斷一下catalina.bat是否找到了,找到了就直接到下面的gotHome處cd .. //這里他是假設你開始已經進入到了tomcat的bin目錄,所以就退到上一級目錄set CATALINA_HOME=%cd%//現在再設置CATALINA_HOME為tomcat的安裝目錄cd %CURRENT_DIR% //這里是進入dos的當前目錄:gotHomeif exist "%CATALINA_HOME%\bin\catalina.bat" gotookHome //再次判斷catalina.bat是否找到了,找到了就直接到下面的okHome處,沒有的話,就只能提示你啦!echo The CATALINA_HOME environment variable is not defined correctlyecho This environment variable is needed to run this programgoto end:okHomeset EXECUTABLE=%CATALINA_HOME%\bin\catalina.bat //設置要執行的文件rem Check that target executable existsif exist "%EXECUTABLE%" gotookExec //再次判斷catalina.bat是否找到了,找到了就直接到下面的okExec處,沒有的話,就提示。echo Cannot find %EXECUTABLE%echo This file is needed to run this programgoto end:okExecrem Get remaining unshifted command line arguments and save them in theset CMD_LINE_ARGS= //這里是設置參數:setArgsif ""%1""=="""" gotodoneSetArgs //判斷參數是否加入完成set CMD_LINE_ARGS=%CMD_LINE_ARGS% %1 //將參數組成一行,接在后面shiftgotosetArgs:doneSetArgscall "%EXECUTABLE%" start %CMD_LINE_ARGS% //執行catalina.bat,最好將這行改為:echo "%EXECUTABLE%" start %CMD_LINE_ARGS% 以便閱讀、理解本文件的作用:end//這個批處理文件,主要是正確的找到catalina.bat,并且執行。當把tomcat解壓到一個地方時,通常是設置一個CATALINA_HOME的環境變量,執行這個文件時,就很容易找到 catalina.bat 如果沒有設置CATALINA_HOME的環境變量,那么你需要在dos中進入tomcat的安裝目錄,或者bin...子目錄,再執行這個文件,如果在其他目錄,將會出現提示找不到文件。修改startup.bat,使其不依賴JAVA_HOM和CATALINA_HOME變量的方法:SET JAVA_HOME=JDK目錄 SET CATALINA_HOME=解壓后Tomcat的目錄例如:set JAVA_HOME=D:\Program Files\java\jdk1.6.0_21set CATALINA_HOME=D:\Program Files\apache-tomcat-6.0.29web.xml詳解:
<web-app> <display-name></display-name>定義了WEB應用的名字 <description></description> 聲明WEB應用的描述信息 <context-param></context-param> context-param元素聲明應用范圍內的初始化參數。 <filter></filter> 過濾器元素將一個名字與一個實現javax.servlet.Filter接口的類相關聯。 <filter-mapping></filter-mapping> 一旦命名了一個過濾器,就要利用filter-mapping元素把它與一個或多個servlet或JSP頁面相關聯。 <listener></listener>servlet API的版本2.3增加了對事件監聽程序的支持,事件監聽程序在建立、修改和刪除會話或servlet環境時得到通知.Listener元素指出事件監聽程序類。 <servlet></servlet> 在向servlet或JSP頁面制定初始化參數或定制URL時,必須首先命名servlet或JSP頁面。Servlet元素就是用來完成此項任務的。 <servlet-mapping></servlet-mapping> 服務器一般為servlet提供一個缺省的URL:http://host/webAppPrefix/servlet/ServletName。 但是,常常會更改這個URL,以便servlet可以訪問初始化參數或更容易地處理相對URL。在更改缺省URL時,使用servlet-mapping元素。 <session-config></session-config> 如果某個會話在一定時間內未被訪問,服務器可以拋棄它以節省內存。 可通過使用HttpSession的setMaxInactiveInterval方法明確設置單個會話對象的超時值,或者可利用session-config元素制定缺省超時值。 <mime-mapping></mime-mapping>如果Web應用具有想到特殊的文件,希望能保證給他們分配特定的MIME類型,則mime-mapping元素提供這種保證。<welcome-file-list></welcome-file-list> 指示服務器在收到引用一個目錄名而不是文件名的URL時,使用哪個文件。 <error-page></error-page> 在返回特定HTTP狀態代碼時,或者特定類型的異常被拋出時,能夠制定將要顯示的頁面。 <taglib></taglib> 對標記庫描述符文件(Tag Libraryu Descriptor file)指定別名。此功能使你能夠更改TLD文件的位置,而不用編輯使用這些文件的JSP頁面。 <resource-env-ref></resource-env-ref>聲明與資源相關的一個管理對象。 <resource-ref></resource-ref> 聲明一個資源工廠使用的外部資源。<security-constraint></security-constraint> 制定應該保護的URL。它與login-config元素聯合使用 <login-config></login-config> 指定服務器應該怎樣給試圖訪問受保護頁面的用戶授權。它與sercurity-constraint元素聯合使用。 <security-role></security-role>給出安全角色的一個列表,這些角色將出現在servlet元素內的security-role-ref元素的role-name子元素中。分別地聲明角色可使高級IDE處理安全信息更為容易。 <env-entry></env-entry>聲明Web應用的環境項。 <ejb-ref></ejb-ref>聲明一個EJB的主目錄的引用。 < ejb-local-ref></ ejb-local-ref>聲明一個EJB的本地主目錄的應用。 </web-app>總結
以上是生活随笔為你收集整理的tomcat安装启动配置的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 并发编程概念、程序线程进程、线程同步、互
- 下一篇: Golang——HTTP编程请求和响应实