tomcat配置文件详解
Tomcat基礎配置詳解
組件原理圖如下:
任何tomcat實例就是一個server,而一個server內部要想能夠解析jsp頁面轉義編譯serlet程序,要靠其引擎來實現
而引擎才是真正意義上執行jsp代碼的容器,都是tomcat用類來描述這些組件的
同時,為了接受用戶的請求,需要基于connector組件,所謂監聽的套接字的程序,能夠接手用戶的請求,被稱為連接器
一個server內部可以完全運行N個引擎,無非就是運行多個虛擬機而已
?
war包的概念
????放在網頁目錄可以直接訪問,而部署的時候可以自動將其展開裝載,而這是部署本身所完成的工作
在實現web站點的時候,在出程序之下有目錄比如/web/htdoc,而在其目錄下有一子目錄/web/htdoc/bbs 而在其下有個論壇程序
這個目錄程序跟其他程序可能不在同一組,而新加的子目錄則需要重新部署,因為其屬于獨立的應用程序,因為每個獨立程序都需要獨立部署
對于tomcat來講每一個host內部還有一子組件,叫做conntest,其作用是為了實現程序的獨立部署
?
對于tomcat來講要想記錄日志的話,因此這些都需要使用特殊接口來實現,所以,任何一個需要操作硬件資源的進程,資源都有一個類在實現我們的需求,tomcat也一樣。
?
常見組件
1.服務器(server)
????實例,通常一個jvm只能包含一個實例,一般情況下,一個物理服務器可以啟動多個jvm,從而啟動多個實例,但一般不這么做
2.服務(service)
????一個服務組件通常包含一個引擎和此引擎相關聯的一個或多個鏈接服務器
3.連接器(connectors)
????一個引擎能配置多個連接器 但是每個連接器的端口不能沖突
????同時,tomcat也支持AJP JSERV和JK2連接器,實現讓apache反向代理到后端服務器的非常高效的傳輸協議
容器類組件
4.引擎
????可以自己接收用戶的http請求,并構建響應報文,而且可以在內部處理java程序的整個套間?
5.主機
6.上下文
?
被嵌套類組件
7.閥門
????能夠過濾也可以做訪問控制
8.日志記錄器
9.領域(Realm)
????用來實現用戶的認證和授權
?
對tomcat來講,每種模型上的實現必須開發一種程序,才能完成相應組件的功能,而java中任何程序都是一個類
?
JAVA常用類型文件
EJB程序通常以.jar結尾
web程序通常打包為.war
資源適配器通常為.rar
企業級應用長須為.ear
web服務通常會打包為.ear或.war
?
tomcat配置文件詳解
tomcat的配置文件位于/path/to/tomcat/conf/目錄下
[root@node1 conf]#cd?/usr/local/tomcat/conf
[root@node1 conf]#cpserver.xml server.xml.bak
查看文件:
[root@node1 conf]#cat server.xml
Listener?為偵聽器,通常實現tomcat內部進行通信的,可在各組件之間完成通信
<Serverport="8005" shutdown="SHUTDOWN">
? <Listener?className="org.apache.catalina.core.AprLifecycleListener"SSLEngine="on" />
? <Listener?className="org.apache.catalina.core.JasperListener"/>
? <Listener?className="org.apache.catalina.core.JreMemoryLeakPreventionListener"/>
? <Listener?className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener"/>
? <Listener?className="org.apache.catalina.core.ThreadLocalLeakPreventionListener"/>
全局命名資源,方便全局引用,所以為其起完名稱后可以隨便調用的
? <GlobalNamingResources>
??? <Resource name="UserDatabase"auth="Container"
?????????????type="org.apache.catalina.UserDatabase"
????????????? description="User databasethat can be updated and saved"
?????????????factory="org.apache.catalina.users.MemoryUserDatabaseFactory"
????????????? pathname="conf/tomcat-users.xml"?/>??????????? #其調用tomcat-user.xml配置文件進行用戶認證
? </GlobalNamingResources>
服務類組件配置信息,將連接器關聯至引擎上
? <Servicename="Catalina">
? ?<Connector port="8080" protocol="HTTP/1.1" ? ?? ?????????????#所在監聽端口,以及協議版本號
??????????????connectionTimeout="20000" ? ? ? ? ?????? ???????? #連接超時時間,單位毫秒
??????????????redirectPort="8443" />????????????????????????????#必要的時候可以做重定向,定義在8443
???
??? <Connector port="8443"protocol="HTTP/1.1" SSLEnabled="true" ? ? ???#端口監聽在8443,協議http1.1
??????????????maxThreads="150" scheme="https" secure="true"?? ???? ????#最大線程,協議版本,安全的
??????????????clientAuth="false" sslProtocol="TLS" /> ? ??? ???? ???? ?#不驗證客戶端 ssl協議用的是tls
?
? ?<Connector port="8009" protocol="AJP/1.3"redirectPort="8443" /> ??
?
? ?<Engine name="Catalina" defaultHost="localhost">? ? ? ? ? ? ????? ???? #引擎,名為catalina
? ?? <RealmclassName="org.apache.catalina.realm.LockOutRealm"> ? ?? ?
? ?? ? <RealmclassName="org.apache.catalina.realm.UserDatabaseRealm"
??????????????resourceName="UserDatabase"/>
????? </Realm>
? ??<Host name="localhost"? appBase="webapps"? ? ? ? ? ? ? ? ? ???? #應用程序存放的位置,相對路徑
???????????unpackWARs="true" autoDeploy="true"> ? ? ? ? ? ? ? ? ? ? #如果是war文件格式,是否解壓,是否自動部署
?
? ?? ? ? #定義閥門,java中類的記錄方式,當前所處域名反過來寫的記錄方式
? ? ? ? <ValveclassName="org.apache.catalina.valves.AccessLogValve"directory="logs"
??????????????prefix="localhost_access_log." suffix=".txt" ? ? ? ? #日志的命名 suffix表示時間戳
??????????????pattern="%h %l %u %t "%r" %s %b" /> ? ? ? ?#訪問日志的格式
????? </Host>
??? </Engine>
? </Service>
</Server>
?
tomcat的運行方式
tomcat可以自我獨立運行,因此可以直接監聽在某個端口,從而接收用戶的http請求,并構建響應報文
另外也可以做為容器,不接受用戶的http請求只接受用戶的對于某個jsp文件的請求
當用戶第一次去請求tomcat的時候,會自動部署好一個程序的
來查看配置文件:
明確說明了主機名默認為localhost,而unpackWARs的值為真,意為是可以自動部署的
?<Hostname="localhost"? appBase="webapps"
??unpackWARs="true" autoDeploy="true">
?
配置Tomcat
·定義管理頁面用戶名及密碼
用戶名及密碼是通過tomcat-users.xml配置文件進行調用的,所以我們只需要配置tomcat-users.xml即可
[root@node1 conf]#vim tomcat-users.xml
加入以下參數信息
? <rolerolename="manager-gui"/> ? ? ? ? ? ? ? ?#定義manager組
? <role rolename="admin-gui"/>???????????????? #定義admin組
? <user username="tomcat"password="tomcat" roles="manager-gui,admin-gui"/> ? ? #定義用戶名及密碼都為tomcat,并將tomcat用戶加入至manager、admin組中
保存退出并重啟服務
[root@node1 conf]#/etc/init.d/tomcat stop
[root@node1 conf]#/etc/init.d/tomcat start
查看監聽端口是否正常
[root@node1 conf]#netstat -lntup | grep java
tcp??????? 0?????0 :::8080????????????????????:::*??????????????????????? LISTEN????? 2359/java??????????
tcp??????? 0?????0 ::ffff:127.0.0.1:8005??????:::*??????????????????????? LISTEN????? 2359/java??????????
tcp??????? 0?????0 :::8009????????????????????:::* ? ? ? ? ? ? ? ? ? ? ? ?LISTEN????? 2359/java
訪問測試:
輸入用戶名和密碼,選擇登陸
如下所示,已經成功登陸至后臺信息頁面
?
Type ? ? ? ? ????? #所屬類型類型
Initial ? ? ? ? ?? #初始化空間多大
Total ? ? ? ? ??
Maximum???????????? #最大空間有多大
Used????????????????#已經使用了多少
?
Max threads: 200 ? ? ? ? ? ? ? ? ? ??默認最大并發連接數200
Current thread count: 0 ? ? ? ? ? ? ?當前連接數
Current thread busy: 0 ? ? ? ? ? ? ??繁忙連接數
?
對其做壓力測試并觀察其連接狀態,并再次刷新頁面
狀態說明:
R: 已經準備好
S: 正在提供服務
k:??持久連接
?
登陸后臺管理頁面
由于我們剛才定義tomcat-user.xml的時候已經將用戶tomcat加入到admin-gui組中,所以我們直接登陸就可以了
打開主頁面,選擇Host Manager
Host Manager?表示有多少個虛擬主機
如果想部署新的虛擬主機可以在下面的圖形界面進行部署,如下所示
tomcat應用程序目錄結構
/WEB-INF/web.xml:包含當前webapp的deploy描述符,如所有的servlet和JSP等動態文件的詳細信息,會話超時時間和數據源等;因此,其也通常用于定義當前webapp特有的資源;
/WEB-INF/classes:?包含所有服務器端類及當前應用程序相關的其它第三方類等;
/WEB-INF/lib: 包含JSP所用到的JAR文件;
/META-INF/? :也是用來存放資源信息的,只不過一般用的不是特別多,就算有的話里面程序也未必有文件;
webapps/manager/META-INF/context.xml :上下文配置文件,有些配置信息可以放在META配置當中;
?
使用自定義位置
如果我們自己要發布一個資源,使用其他特定的目錄來發布應用程序的話,也是按照這種格式:
[root@node1tomcat]# mkdir /tomcat/app1/WEB-INF/{classess,lib}?-p
進入目錄
[root@node1 app1]#pwd
/tomcat/app1
創建index.jsp,內容如下:
[root@node1 app1]#cat index.jsp
<%@ pagelanguage="java" %>
<html>
?<head><title>TomcatA</title></head>
? <body>
??? <h1><fontcolor="red">TomcatA </font></h1>
??? <tableborder="1">
????? <tr>
??????? <td>Session ID</td>
??? <%session.setAttribute("abc","abc"); %>
??????? <td><%= session.getId()%></td>
????? </tr>
????? <tr>
??????? <td>Created on</td>
??????? <td><%=session.getCreationTime() %></td>
???? </tr>
??? </table>
? </body>
</html>
?
定義虛擬主機
編輯server.xml
[root@node1 conf]#vim server.xml
加入如下內容
????? <Host name="www.test.com"?appBase="webapps"
??????????? unpackWARs="true"autoDeploy="true">
???????? <ValveclassName="org.apache.catalina.valves.AccessLogValve"directory="logs"
?????????????? prefix="www_access_log."suffix=".txt"
?????????????? pattern="%h %l %u %t"%r" %s %b" />
?????????<Contextpath="/" docBase="/tomcat/app1" />????????????????? #定義訪問的路徑當于整個路徑的根,docBase表示訪問的路徑的位置
????? </Host>
這里沒有主機名所以將默認主機設置為www.test.com
? ?<Engine name="Catalina" defaultHost="www.test.com">
啟動服務
[root@node1 conf]#/etc/init.d/tomcat start
或者
[root@node1 conf]#catalina.sh start
查看監聽端口是否正常
[root@node1 conf]#netstat -lntup | grep java
tcp??????? 0?????0 :::8080 ? ? ? ? ? ? ? ? ? ? :::*??????????????????????? LISTEN????? 2079/java??????????
tcp??????? 0?????0 ::ffff:127.0.0.1:8005 ? ? ? :::*??????????????????????? LISTEN????? 2079/java??????????
tcp??????? 0?????0 :::8009?????????? ??????????:::* ? ? ? ? ? ? ? ? ? ? ? ?LISTEN????? 2079/java?
訪問測試:
http://10.0.10.61:8080/
第一次訪問時,頁面會很慢,是因為第一次訪問jsp的時候都需要對其進行編譯;
?
編譯jsp頁面的執行次序
jsp頁面通過jasper進行編譯 再由編譯器 javac編譯為 class文件因此每一次都需要編譯的,如果不改文件刷新速度是非常快
如果是更改了文件的話,第一次訪問可能會等待半天,所以任何時候更改完源程序都需要重新編譯文件的
?
一旦頁面被編譯后會有什么樣的結果:
[root@node1 conf]#cd Catalina/
[root@node1Catalina]# ll
total 8
drwxr-xr-x. 2 rootroot 4096 Jun 26 10:48 localhost
drwxr-xr-x. 2root root 4096 Jul? 1 10:45?www.test.com?????? ????????#每一個host都有一個獨立的目錄
[root@node1 Catalina]# pwd ??
/usr/local/tomcat/work/Catalina?
[root@node1Catalina]# ll www.test.com/_/org/apache/jsp/index_jsp.
index_jsp.class? index_jsp.java
#此處已驗證了,首先由jasper翻譯成serverlet,再由其編譯成class文件
?
實例:部署論壇程序
論壇程序包:JavaCenter_Home_2.0_GBK.zip?
下載源碼包可以去jsprun官方進行下載
解壓源碼包并拷貝至相關目錄
?[root@node1 ~]# unzip JspRun\!_6.0.0_UTF8.zip
[root@node1 ~]# cdJspRun\!_6.0.0_UTF8/
[root@node1upload]# cp -fra * /tomcat/app1
啟動tomcat
[root@node1 app1]#catalina.sh start
啟動mysql
[root@node1 app1]#/etc/init.d/mysqld start
將mysql賦予授權
mysql> grantall on jchome.* to 'jcuser'@'localhost' identified by 'jdpass';
Query OK, 0 rows affected (0.00 sec)
mysql> flushprivileges;
創建數據庫
mysql> createdatabase jchome;
修改論壇程序的config.properties配置文件
[root@node1 app1]#pwd
/tomcat/app1
[root@node1 app1]#vim config.properties
修改為:
dbhost = localhost
dbport=3306
dbuser = jcuser
dbpw = jdpass
dbname = jchome
pconnect = 0
訪問?http://10.0.10.61:8080/upload/install.jsp?進行安裝
安裝過程略,最后迎接我們的則是嶄新的論壇界面,如下所示:
?
END,感謝各位。
轉載于:https://blog.51cto.com/blief/1754284
總結
以上是生活随笔為你收集整理的tomcat配置文件详解的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【轉】JAVA中isEmpty和null
- 下一篇: CDH集群调优:内存、Vcores和DR