Tomcat詳解
1、tomcat安裝
tomcat的組件:<Server> <Service> <connector/> <connector/> <Engine> <Host /> <Host> <Context/> ... </Host> </Engine> </Service></Server>每個組件,均有java類來實現;此些組件可分為如下幾類: 頂級組件:Server 服務類:Service 連接器:http, https, ajp(apache jserv protocol) 容器類:Engine, Host, Context 被嵌套的組件:valve, logger, realm, loader, manager 集群類組件:listener, ...
OS版本CentOS 7
(1)系統自帶的openjdk+tomcat
- 查看yum倉庫中jdk版本: yum list all *jdk* 倉庫中現有的openjdk版本為 java-1.6.0-openjdk java-1.7.0-openjdk java-1.8.0-openjdk - 本次測試使用java-1.7.0-openjdk: yum install java-1.7.0-openjdk java-1.7.0-openjdk-devel -y - 設定java的環境變量($JAVA_HOME): 查看java目錄 [root@localhost ~]# which java /usr/bin/java [root@localhost ~]# ls -l /usr/bin/java lrwxrwxrwx 1 root root 22 4月 26 09:46 /usr/bin/java -> /etc/alternatives/java [root@localhost ~]# ls -l /etc/alternatives/java lrwxrwxrwx 1 root root 75 4月 26 09:46 /etc/alternatives/java -> /usr/lib/jvm/java-1.7.0-openjdk-1.7.0.13 1-2.6.9.0.el7_3.x86_64/jre/bin/java ~]# java -version 查看bin目錄環境變量是否正常 java version "1.7.0_131" OpenJDK Runtime Environment (rhel-2.6.9.0.el7_3-x86_64 u131-b00) OpenJDK 64-Bit Server VM (build 24.131-b00, mixed mode) 添加$JAVA_HOME ~]# vim /etc/profile.d/java.sh export JAVA_HOME=/usr/bin ~]# . /etc/profile.d/java.sh ~]# echo $JAVA_HOME /usr/bin -tomcat安裝 ~]# yum install tomcat tomcat-lib tomcat-admin-webapps tomcat-webapps tomcat的配置文件查看 ~]# rpm -ql tomcat /etc/logrotate.d/tomcat /etc/sysconfig/tomcat /etc/tomcat /etc/tomcat/Catalina /etc/tomcat/Catalina/localhost /etc/tomcat/catalina.policy /etc/tomcat/catalina.properties /etc/tomcat/conf.d /etc/tomcat/conf.d/README /etc/tomcat/context.xml /etc/tomcat/log4j.properties /etc/tomcat/logging.properties /etc/tomcat/server.xml /etc/tomcat/tomcat-users.xml /etc/tomcat/tomcat.conf /etc/tomcat/web.xml /usr/bin/tomcat-digest /usr/bin/tomcat-tool-wrapper /usr/lib/systemd/system/tomcat.service /usr/lib/systemd/system/tomcat@.service /usr/libexec/tomcat /usr/libexec/tomcat/functions /usr/libexec/tomcat/preamble /usr/libexec/tomcat/server /usr/sbin/tomcat /usr/share/doc/tomcat-7.0.69 /usr/share/doc/tomcat-7.0.69/LICENSE /usr/share/doc/tomcat-7.0.69/NOTICE /usr/share/doc/tomcat-7.0.69/RELEASE-NOTES /usr/share/tomcat /usr/share/tomcat/bin/bootstrap.jar /usr/share/tomcat/bin/catalina-tasks.xml /usr/share/tomcat/conf /usr/share/tomcat/lib /usr/share/tomcat/logs /usr/share/tomcat/temp /usr/share/tomcat/webapps /usr/share/tomcat/work /var/cache/tomcat /var/cache/tomcat/temp /var/cache/tomcat/work /var/lib/tomcat /var/lib/tomcat/webapps /var/lib/tomcats /var/log/tomcat /var/log/tomcat/catalina.out - tomcat開啟:8080和8009端口均正常開啟 默認連接器: http, 8080 ajp, 8009 ~]# systemctl start tomcat.service ~]# ss -tnlp State Recv-Q Send-Q Local Address:Port Peer Address:Port LISTEN 0 128 *:22 *:* users:(("sshd",pid=1078,fd=3))LISTEN 0 100 127.0.0.1:25 *:* users:(("master",pid=1423,fd=13))LISTEN 0 100 :::8009 :::* users:(("java",pid=2942,fd=47))LISTEN 0 100 :::8080 :::* users:(("java",pid=2942,fd=46))LISTEN 0 128 :::22 :::* users:(("sshd",pid=1078,fd=4))LISTEN 0 100 ::1:25 :::* users:(("master",pid=1423,fd=14))
(2)使用Oracle JDK和tomcat提供的編譯完成的程序包
- Oracle JKD安裝 ~]# rpm -ivh jdk-7u79-linux-x64.rpm 準備中... ################################# [100%] 正在升級/安裝... 1:jdk-2000:1.7.0_79-fcs ################################# [100%] Unpacking JAR files... rt.jar... jsse.jar... charsets.jar... tools.jar... localedata.jar... jfxrt.jar... - java環境變量設置 查看java目錄 ~]# ls -l /usr/java/ 總用量 4 lrwxrwxrwx 1 root root 16 4月 26 10:23 default -> /usr/java/latest drwxr-xr-x 8 root root 4096 4月 26 10:23 jdk1.7.0_79 lrwxrwxrwx 1 root root 21 4月 26 10:23 latest -> /usr/java/jdk1.7.0_79 java的bin目錄 ~]# cd /usr/java/jdk1.7.0_79/ jdk1.7.0_79]# ls bin include LICENSE release THIRDPARTYLICENSEREADME.txt COPYRIGHT jre man src.zip db lib README.html THIRDPARTYLICENSEREADME-JAVAFX.txt jdk1.7.0_79]# ls bin appletviewer jarsigner javap jdb jps jvisualvm rmic tnameserv apt java java-rmi.cgi jhat jrunscript keytool rmid unpack200 ControlPanel javac javaws jinfo jsadebugd native2ascii rmiregistry wsgen extcheck javadoc jcmd jmap jstack orbd schemagen wsimport idlj javafxpackager jconsole jmc jstat pack200 serialver xjc jar javah jcontrol jmc.ini jstatd policytool servertool 設定環境變量,添加JAVA_HOME和PATH ~]# vim /etc/profile.d/java.sh JAVA_HOME=/usr/java/latest PATH=$JAVA_HOME/bin:$PATH export JAVA_HOME PATH ~]# . /etc/profile.d/java.sh ~]# echo $JAVA_HOME /usr/java/latest ~]# echo $PATH /usr/java/latest/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin ~]# java -version java version "1.7.0_79" Java(TM) SE Runtime Environment (build 1.7.0_79-b15) Java HotSpot(TM) 64-Bit Server VM (build 24.79-b02, mixed mode) - 安裝tomcat ~]# tar -xf apache-tomcat-7.0.55.tar.gz -C /usr/local/ ~]# cd /usr/local/ local]# ll 總用量 0 drwxr-xr-x 9 root root 149 4月 26 10:34 apache-tomcat-7.0.55 drwxr-xr-x. 2 root root 6 8月 12 2015 bin drwxr-xr-x. 2 root root 6 8月 12 2015 etc drwxr-xr-x. 2 root root 6 8月 12 2015 games drwxr-xr-x. 2 root root 6 8月 12 2015 include drwxr-xr-x. 2 root root 6 8月 12 2015 lib drwxr-xr-x. 2 root root 6 8月 12 2015 lib64 drwxr-xr-x. 2 root root 6 8月 12 2015 libexec drwxr-xr-x. 2 root root 6 8月 12 2015 sbin drwxr-xr-x. 5 root root 46 11月 7 16:32 share drwxr-xr-x. 2 root root 6 8月 12 2015 src local]# ln -s apache-tomcat-7.0.55 tomcat ocal]# cd tomcat/ tomcat]# ls 目錄結構 bin conf lib LICENSE logs NOTICE RELEASE-NOTES RUNNING.txt temp webapps work tomcat]# ls conf/ catalina.policy context.xml server.xml web.xml catalina.properties logging.properties tomcat-users.xml tomcat]# ls webapps/ docs examples host-manager manager ROOT tomcat]# ls bin/ bootstrap.jar commons-daemon-native.tar.gz digest.sh startup.bat tool-wrapper.sh catalina.bat configtest.bat setclasspath.bat startup.sh version.bat catalina.sh configtest.sh setclasspath.sh tomcat-juli.jar version.sh catalina-tasks.xml daemon.sh shutdown.bat tomcat-native.tar.gz commons-daemon.jar digest.bat shutdown.sh tool-wrapper.bat - 設定tomcat環境變量 ~]# vim /etc/profile.d/tomcat.sh CATALINA_BASE=/usr/local/tomcat PATH=$CATALINA_BASE/bin:$PATH export CATALINA_BASE PATH ~]# . /etc/profile.d/tomcat.sh ~]# catalina.sh --help Using CATALINA_BASE: /usr/local/tomcat Using CATALINA_HOME: /usr/local/tomcat Using CATALINA_TMPDIR: /usr/local/tomcat/temp Using JRE_HOME: /usr/java/latest Using CLASSPATH: /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar Usage: catalina.sh ( commands ... ) commands: debug Start Catalina in a debugger debug -security Debug Catalina with a security manager jpda start Start Catalina under JPDA debugger run Start Catalina in the current window run -security Start in the current window with security manager start Start Catalina in a separate window start -security Start in a separate window with security manager stop Stop Catalina, waiting up to 5 seconds for the process to end stop n Stop Catalina, waiting up to n seconds for the process to end stop -force Stop Catalina, wait up to 5 seconds and then use kill -KILL if still running stop n -force Stop Catalina, wait up to n seconds and then use kill -KILL if still running configtest Run a basic syntax check on server.xml - check exit code for result version What version of tomcat are you running? Note: Waiting for the process to end and use of the -force option require that $CATALINA_PID is defined -開啟tomcat ~]# catalina.sh configtest 檢測配置文件是否正常 Using CATALINA_BASE: /usr/local/tomcat Using CATALINA_HOME: /usr/local/tomcat Using CATALINA_TMPDIR: /usr/local/tomcat/temp Using JRE_HOME: /usr/java/latest Using CLASSPATH: /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar 四月 26, 2017 10:40:10 上午 org.apache.catalina.core.AprLifecycleListener init 信息: The APR based Apache Tomcat Native library which allows optimal performance in production environmen ts was not found on the java.library.path: /usr/java/packages/lib/amd64:/usr/lib64:/lib64:/lib:/usr/lib四月 26, 2017 10:40:11 上午 org.apache.coyote.AbstractProtocol init 信息: Initializing ProtocolHandler ["http-bio-8080"] 四月 26, 2017 10:40:11 上午 org.apache.coyote.AbstractProtocol init 信息: Initializing ProtocolHandler ["ajp-bio-8009"] 四月 26, 2017 10:40:11 上午 org.apache.catalina.startup.Catalina load 信息: Initialization processed in 1328 ms ~]# catalina.sh start 開啟tomcat Using CATALINA_BASE: /usr/local/tomcat Using CATALINA_HOME: /usr/local/tomcat Using CATALINA_TMPDIR: /usr/local/tomcat/temp Using JRE_HOME: /usr/java/latest Using CLASSPATH: /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar Tomcat started. ~]# ss -tnlp State Recv-Q Send-Q Local Address:Port Peer Address:Port LISTEN 0 128 *:22 *:* users:(("sshd",pid=1071,fd=3))LISTEN 0 100 127.0.0.1:25 *:* users:(("master",pid=1429,fd=13))LISTEN 0 100 :::8009 :::* users:(("java",pid=16417,fd=43))LISTEN 0 100 :::8080 :::* users:(("java",pid=16417,fd=42))LISTEN 0 128 :::22 :::* users:(("sshd",pid=1071,fd=4))LISTEN 0 100 ::1:25 :::* users:(("master",pid=1429,fd=14))
目錄文件查看:
~]# cd /usr/local/tomcat/tomcat]# lsbin conf lib LICENSE logs NOTICE RELEASE-NOTES RUNNING.txt temp webapps work tomcat]# cd webapps/ [root@localhost webapps]# ls docs examples host-manager manager ROOT webapps]# tree manager/ manager/ ├── images │ ├── add.gif │ ├── asf-logo.gif │ ├── code.gif │ ├── design.gif │ ├── docs.gif │ ├── fix.gif │ ├── tomcat.gif │ ├── update.gif │ └── void.gif ├── index.jsp ├── META-INF │ └── context.xml ├── status.xsd ├── WEB-INF │ ├── jsp │ │ ├── 401.jsp │ │ ├── 403.jsp │ │ ├── 404.jsp │ │ ├── sessionDetail.jsp │ │ └── sessionsList.jsp │ └── web.xml └── xform.xsl 4 directories, 19 files webapps]# tree ROOT/ ROOT/ ├── asf-logo.png ├── asf-logo-wide.gif ├── bg-button.png ├── bg-middle.png ├── bg-nav-item.png ├── bg-nav.png ├── bg-upper.png ├── build.xml ├── favicon.ico ├── index.jsp ├── RELEASE-NOTES.txt ├── tomcat.css ├── tomcat.gif ├── tomcat.png ├── tomcat-power.gif ├── tomcat.svg └── WEB-INF └── web.xml 1 directory, 17 files webapps]# tree host-manager/ host-manager/ ├── images │ ├── add.gif │ ├── asf-logo.gif │ ├── code.gif │ ├── design.gif │ ├── docs.gif │ ├── fix.gif │ ├── tomcat.gif │ ├── update.gif │ └── void.gif ├── index.jsp ├── manager.xml ├── META-INF │ └── context.xml └── WEB-INF ├── jsp │ ├── 401.jsp │ ├── 403.jsp │ └── 404.jsp └── web.xmltomcat的配置文件:
server.xml:主配置文件; context.xml:每個webapp都可以有專用的配置文件,這些配置文件通常位于webapp程序目錄下的WEB-INF目錄中,用于定義會話管理順、JDBC等 ;conf/context.xml是為各webapp提供默認配置; web.xml:每個webapp只有在“部署”之后才能夠被訪問;此文件則用于為各webapps定義默認的部署操作方式; tomcat-users.xml:用戶認證的賬號和密碼配置文件; catalina.policy:當使用-security選項來啟動tomcat實例時會讀取此配置文件來實現基于安全策略的運行方式; catalina.properties:Java屬性的定義文件,用于設定類加載器路徑等 ,以及一些與JVM性能相關的調優參數; logging.properties:日志系統相關的配置;Java Webapp的組織結構:
有特定的組織形式、層次型的目錄結構;主要包含了servlet代碼文件、JSP頁面文件、類文件、部署描述符文件等 ; /:webapps的根目錄 index.jsp:jsp的主頁面文件 WEB-INF/:當前webapp的私有資源目錄,通常存放當前webapp自用的web.xml; META-INF/:當前webapp的私有資源目錄,通常存儲當前webapp自用的context.xml; classes/: 當前webapp的私有類; lib/:當前webapp的私有類,被打包成jar格式; webapp歸檔格式: .war:webapp .jar:EJB的類; .rar:資源適配器; .ear:企業級應用程序;2、tomcat應用程序部署
部署(deploy)webapp的相關操作: deploy:將webapp的源文件放置于目標目錄、配置tomcat服務器能夠基于context.xml文件中定義的路徑來訪問此webapp;將其特有的類通過class loader裝載至tomcat: 有兩種方式: 自動部署:auto deploy 手動部署: (1) 冷部署:把webapp復制到指定位置,而后才啟動tomcat; (2) 熱部署:在不停止tomcat的前提下進行的部署: 部署工具:manager app、ant腳本、tcd(Tomcat Client Deployer)等; undeploy:反部署,停止webapp,并從tomcat實例上拆除其部署文件和部署名; stop:停止,不再向用戶提供服務; start:啟動處于“停止”狀態的webapp; redeploy:重新部署; tomcat自帶的應用程序: manager app: webapp管理工具; host manager: VHosts管理工具;(1)手動創建一個測試應用程序
~]# cd /usr/local/tomcat/webapps/ webapps]# ls docs examples host-manager manager ROOT webapps]# mkdir myapp webapps]# cd myapp/ myapp]# mkdir class lib WEB-INF META-INF [root@localhost myapp]# ls class lib META-INF WEB-INF myapp]# vim index.jsp myapp]# cat index.jsp <%@ page language="java" %> <%@ page import="java.util.*" %> <html> <head> <title>JSP Test Page</title> </head> <body> <% out.println("hello world"); %> </body> </html>
此時由于tomcat默認為熱部署,所以網頁已經可以正常訪問 tomcat會默認把jsp網頁編譯成java語言 ~]# cd /usr/local/tomcat/work/Catalina/localhost/myapp/org/apache/jsp/ jsp]# ls index_jsp.class index_jsp.java(2)tomcat自帶的應用程序
![]()
提示用戶在conf/tomcat-users.xml下進行配置 ~]# cd /usr/local/tomcat/conf/ conf]# vim tomcat-users.xml 在<tomcat-users>下面添加 <role rolename="manager-gui"/> <user username="tomcat" password="tomcat" roles="manager-gui"/> 重啟tomcat服務 conf]# catalina.sh stop Using CATALINA_BASE: /usr/local/tomcat Using CATALINA_HOME: /usr/local/tomcat Using CATALINA_TMPDIR: /usr/local/tomcat/temp Using JRE_HOME: /usr/java/latest Using CLASSPATH: /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar conf]# catalina.sh configtest Using CATALINA_BASE: /usr/local/tomcat Using CATALINA_HOME: /usr/local/tomcat Using CATALINA_TMPDIR: /usr/local/tomcat/temp Using JRE_HOME: /usr/java/latest Using CLASSPATH: /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar 四月 26, 2017 12:18:23 下午 org.apache.catalina.core.AprLifecycleListener init 信息: The APR based Apache Tomcat Native library which allows optimal performance in production environmen ts was not found on the java.library.path: /usr/java/packages/lib/amd64:/usr/lib64:/lib64:/lib:/usr/lib四月 26, 2017 12:18:24 下午 org.apache.coyote.AbstractProtocol init 信息: Initializing ProtocolHandler ["http-bio-8080"] 四月 26, 2017 12:18:24 下午 org.apache.coyote.AbstractProtocol init 信息: Initializing ProtocolHandler ["ajp-bio-8009"] 四月 26, 2017 12:18:24 下午 org.apache.catalina.startup.Catalina load 信息: Initialization processed in 1348 ms conf]# catalina.sh start Using CATALINA_BASE: /usr/local/tomcat Using CATALINA_HOME: /usr/local/tomcat Using CATALINA_TMPDIR: /usr/local/tomcat/temp Using JRE_HOME: /usr/java/latest Using CLASSPATH: /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar Tomcat started. conf]# ss -tnlp State Recv-Q Send-Q Local Address:Port Peer Address:Port LISTEN 0 128 *:22 *:* users:(("sshd",pid=1071,fd=3))LISTEN 0 100 127.0.0.1:25 *:* users:(("master",pid=1429,fd=13))LISTEN 0 100 :::8009 :::* users:(("java",pid=16600,fd=43))LISTEN 0 100 :::8080 :::* users:(("java",pid=16600,fd=42))LISTEN 0 128 :::22 :::* users:(("sshd",pid=1071,fd=4))LISTEN 0 100 ::1:25 :::* users:(("master",pid=1429,fd=14))
![]()
管理頁面可以對web app進行部署,卸載,開啟,關閉,reload,update(3)部署一個商城app進行測試
商城app解壓 ~]# unzip shopxx-a5-Beta.zip ~]# ls all.sql apache-tomcat-7.0.55.tar.gz shopxx-a5-Beta.zip 說明.htm anaconda-ks.cfg jdk-7u79-linux-x64.rpm shopxx-v3.0-Beta 將文件mv至部署目錄 ~]# cd shopxx-v3.0-Beta/shopxx-3.0Beta/ shopxx-3.0Beta]# ls admin favicon.ico install META-INF robots.txt upload changelog.txt index.jsp license.html resources shopxx.txt WEB-INF hopxx-3.0Beta]# ls install/ check_encoding.jsp css index.html install_demo.jsp js check.jsp data index.jsp install_init.jsp sample common.jsp images install_config.jsp install.jsp setting.jsp shopxx-3.0Beta]# cd .. shopxx-v3.0-Beta]# ls shopxx-3.0Beta shopxx-v3.0-Beta]# mv shopxx-3.0Beta/ /usr/local/tomcat/webapps/shopxx此時網站已經可以正常訪問
配置后臺數據庫 ~]# yum -y install mariadb-server ~]# systemctl start mariadb.service ~]# mysql Welcome to the MariaDB monitor. Commands end with ; or \g. Your MariaDB connection id is 2 Server version: 5.5.52-MariaDB MariaDB Server Copyright (c) 2000, 2016, Oracle, MariaDB Corporation Ab and others. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. MariaDB [(none)]> GRANT ALL ON shopxx.* to shopxx@'localhost' IDENTIFIED BY 'shopxx'; Query OK, 0 rows affected (0.00 sec) MariaDB [(none)]> GRANT ALL ON shopxx.* to shopxx@'127.0.0.1' IDENTIFIED BY 'shopxx'; Query OK, 0 rows affected (0.00 sec) MariaDB [(none)]> FLUSH PRIVILEGES; Query OK, 0 rows affected (0.00 sec) MariaDB [(none)]> exit Bye
![]()
安裝提示刪除install目錄,并重啟
~]# cd /usr/local/tomcat/ tomcat]# ls bin conf lib LICENSE logs NOTICE RELEASE-NOTES RUNNING.txt temp webapps work tomcat]# cd webapps/ webapps]# ls docs examples host-manager manager myapp ROOT shopxx webapps]# cd shopxx/ shopxx]# ls admin changelog.txt index.html license.html product robots.txt sitemap WEB-INF article favicon.ico install META-INF resources shopxx.txt upload shopxx]# mv install/ install.bak此時我的tomcat管理界面上已經有shopxx應用,進行reload操作,或者使用catalina.sh進行stop再start
![]()
此時網站部署完成
![]()
3、tomcat常用組件
每個組件幾乎都是通過特有的類來實現,而且有的組件還不止一種實現方式
Server:tomcat實例,即運行的一個jvm進程;監聽于8005端口接收“SHUTDOWN”。各server監聽的端口不能相同,因此,一個物理主機上啟動多個server實例應該使用不同的端口;
service:用于實現將一個或多個connector關聯至一個engine;
connector組件:
進入tomcat的請求可分為兩類: tomcat做為獨立的應用程序服務器:standalone,此時,請求將來自于瀏覽器; http, https tomcat做為應用程序服務器:請求將來自于前面反代主機; httpd: http, https, ajp nginx: http, https 屬性: address:監聽的IP地址; maxThreads:最大并發連接數,默認為150; port:監聽的端口; protocol:連接器使用的協議,一般為HTTP/1.1或AJP/1.3; redirecPort: connectionTimeout:連接的超時時長,單位為毫秒,默認為60000; enableLookups: acceptCount:定義等待隊列的長度; scheme: debug: secure: clinetAuth: sslProtocol: Engine:Servlet的一個實例,即servlet引擎,其內部可以有一個或多個Host組件來定義站點;通常需要通過defaultHost的屬性定義默認虛擬主機; 屬性: name= defaultHost= jvmRoute=Host組件:
位于Engine容器中用于接收請求并進行相應處理的主機或虛擬主機
常用屬性說明: 1) appBase:此Host的webapps目錄,即存放非歸檔的web應用程序的目錄或歸檔后的WAR文件的目錄路徑;可以使用基于$CATALINA_HOME的相對路徑; 2) autoDeploy:在Tomcat處于運行狀態時放置于appBase目錄中的應用程序文件是否自動進行deploy;默認為true; 3) unpackWars:在啟用此webapps時是否對WAR格式的歸檔文件先進行展開;默認為true;
示例: - 服務器端 修改server.xml,添加Host主機 ~]# cd /usr/local/tomcat/conf/ conf]# vim server.xml <Host name="node2" appBase="/data/webapps" unpackWARs="true" autoDeploy="true"> </Host> conf]# mkdir -pv /data/webapps/ROOT mkdir: 已創建目錄 "/data" mkdir: 已創建目錄 "/data/webapps" mkdir: 已創建目錄 "/data/webapps/ROOT" conf]# cp ../webapps/myapp/index.jsp /data/webapps/ROOT/ conf]# mkdir /data/webapps/ROOT/{classes,lib,WEB-INF,META-INF} 修改index.jsp內容,方便后續辨認是哪個主機 conf]# vim /data/webapps/ROOT/index.jsp <%@ page language="java" %> <%@ page import="java.util.*" %> <html> <head> <title>JSP Test Page</title> </head> <body> <% out.println("hello world from /data/webapps"); %> </body> </html> catalina重啟 catalina.sh stop catalina.sh configtest catalina.sh start -客戶端 首先要保證客戶端可以解析node這個主機 ~]# ping node2 PING node2 (192.168.150.138) 56(84) bytes of data. 64 bytes from node2 (192.168.150.138): icmp_seq=1 ttl=64 time=1.69 ms 訪問測試: ~]# curl http://node2:8080 此時訪問的是node2的目錄 <html> <head> <title>JSP Test Page</title> </head> <body> hello world from /data/webapps </body> </html> [root@localhost ~]# curl http://192.168.150.138:8080 訪問ip時還是訪問原目錄 <!DOCTYPE html> <html lang="en"> <head> <title>Apache Tomcat/7.0.55</title> <link href="favicon.ico" rel="icon" type="image/x-icon" /> <link href="favicon.ico" rel="shortcut icon" type="image/x-icon" /> <link href="tomcat.css" rel="stylesheet" type="text/css" /> </head>tomcat自帶Host Manager配置
配置方法和Manager App相同,我只要在剛才manager app配置中添加Host Manager屬性即可,點擊按鈕也會出現提示畫面
修改內容為: conf]# vim tomcat-users.xml <tomcat-users> <role rolename="manager-gui"/> <role rolename="admin-gui"/> <user username="tomcat" password="tomcat" roles="manager-gui,admin-gui"/> 修改后重啟catalina catalina.sh stop catalina.sh configtest catalina.sh start
![]()
此時在Host Manager界面可以看到我剛才添加的HOST主機
Context組件:
示例: - 服務器端 conf]# vim server.xml 在原Host內容中添加Context內容 <Host name="node2" appBase="/data/webapps" unpackWARs="true" autoDeploy="true"> <Context path="/test" docBase="testapp" reloadable="true"> </Context> </Host> 創建testapp測試頁面 conf]# cp /data/webapps/ROOT/ /data/webapps/testapp -r conf]# vim /data/webapps/testapp/index.jsp <%@ page language="java" %> <%@ page import="java.util.*" %> <html> <head> <title>JSP Test Page for Context</title> </head> <body> <% out.println("hello world from /data/webapps/testapp"); %> </body> </html> catalina重啟 catalina.sh stop catalina.sh configtest catalina.sh start -客戶端訪問測試: 訪問node2 [root@localhost conf]# curl http://node2:8080 <html> <head> <title>JSP Test Page</title> </head> <body> hello world from /data/webapps </body> </html> 訪問Conext目錄 [root@localhost conf]# curl http://node2:8080/test/ <html> <head> <title>JSP Test Page for Context</title> </head> <body> hello world from /data/webapps/testapp </body> </html>Value組件:
示例: 繼續在剛才的測試示例中添加Value組件: - 服務器端 制定日志格式,設定testapp的訪問控制(192.168.150.139為客戶端主機) conf]# vim server.xml <Host name="node2" appBase="/data/webapps" unpackWARs="true" autoDeploy="true"> <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" prefix="node2_access_log." suffix=".log" pattern="%h %l %u %t "%r" %s %b" /> <Context path="/test" docBase="testapp" reloadable="true"> <Valve className="org.apache.catalina.valves.RemoteAddrValve" deny="192\.168\.150\.139" /> </Context> </Host> 重啟catalina - 客戶端訪問 conf]# curl http://node2:8080 訪問node2是正常的 <html> <head> <title>JSP Test Page</title> </head> <body> hello world from /data/webapps </body> </html> conf]# curl http://node2:8080/test/ 訪問test被forbidden <html><head><title>Apache Tomcat/7.0.55 - Error report</title><style><!--H1 {font-family:Tahoma,Arial,sans -serif;color:white;background-color:#525D76;font-size:22px;} H2 {font-family:Tahoma,Arial,sans-serif;color:white;background-color:#525D76;font-size:16px;} H3 {font-family:Tahoma,Arial,sans-serif;color:white;background-color:#525D76;font-size:14px;} BODY {font-family:Tahoma,Arial,sans-serif;color:black;background-color:white;} B {font-family:Tahoma,Arial,sans-serif;color:white;background-color:#525D76;} P {font-family:Tahoma,Arial,sans-serif;background:white;color:black;font-size:12px;}A {color : black;}A.name {color : black;}HR {color : #525D76;}--></style> </head><body><h1>HTTP Status 403 - </h1><HR size="1" noshade="noshade"><p><b>type</b> Status report</p><p><b>message</b> <u></u></p><p><b>description</b> <u>Access to the specified resource has been forbidden.</u></p><HR size="1" noshade="noshade"><h3>Apache Tomcat/7.0.55</h3></body></html> - 服務器端日志 [root@localhost logs]# pwd /usr/local/tomcat/logs [root@localhost logs]# ls catalina.2017-04-26.log localhost.2017-04-26.log node2_access_log.2017-04-26.log catalina.out localhost_access_log.2017-04-26.txt host-manager.2017-04-26.log manager.2017-04-26.log logs]# cat node2_access_log.2017-04-26.log 192.168.150.139 - - [26/Apr/2017:15:03:37 +0800] "GET / HTTP/1.1" 200 116 192.168.150.139 - - [26/Apr/2017:15:03:50 +0800] "GET /test/ HTTP/1.1" 403 9614、LNMT/LAMT
LNMT:
- nginx安裝: ~]# yum -y install nginx - 修改nginx配置文件 ~]# cd /etc/nginx/ nginx]# vim nginx.conf server { listen 80 default_server; listen [::]:80 default_server; server_name localhost; root /usr/share/nginx/html; # Load configuration files for the default server block. include /etc/nginx/default.d/*.conf; #修改location /進行反代,由于我測試時nginx和tomcat是在同一臺server上,所以使用localhost location / { proxy_pass http://localhost:8080/; } - 驗證配置文件并啟動nginx nginx]# nginx -t nginx: the configuration file /etc/nginx/nginx.conf syntax is ok nginx: configuration file /etc/nginx/nginx.conf test is successful nginx]# systemctl start nginx.service nginx]# ss -tnl State Recv-Q Send-Q Local Address:Port Peer Address:Port LISTEN 0 50 *:3306 *:* LISTEN 0 128 *:80 *:* LISTEN 0 128 *:22 *:* LISTEN 0 100 127.0.0.1:25 *:* LISTEN 0 100 :::8009 :::* LISTEN 0 128 :::80 :::* LISTEN 0 100 :::8080 :::* LISTEN 0 128 :::22 :::* LISTEN 0 100 ::1:25 :::* LISTEN 0 1 ::ffff:127.0.0.1:8005 :::*此時進行訪問測試,我訪問http時已經不需要指定8080端口,使用默認端口即可訪問我后端的tomcat
對HOST主機進行反代 - 服務器端 服務器端本地做好node的解析 ~]# cat /etc/hosts 127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6 192.168.150.138 node2 ~]# vim /etc/nginx/nginx.conf location / { proxy_pass http://node2:8080/; } 修改完配置文件后驗證并reload nginx服務 ~]# nginx -t nginx: the configuration file /etc/nginx/nginx.conf syntax is ok nginx: configuration file /etc/nginx/nginx.conf test is successful ~]# systemctl reload nginx.service - 客戶端訪問測試,無需在添加8080端口號 ~]# curl http://192.168.150.138 <html> <head> <title>JSP Test Page</title> </head> <body> hello world from /data/webapps </body> </html> 動靜分離測試: - 服務器端: ~]# vim /etc/nginx/nginx.conf 修改nginx配置文件中的location location / { } #如果用戶訪問jsp資源再進行反代,靜態資源nginx自己解析 location ~* \.(jsp|do)$ { proxy_pass http://node2:8080; } nginx]# nginx -t nginx: the configuration file /etc/nginx/nginx.conf syntax is ok nginx: configuration file /etc/nginx/nginx.conf test is successful nginx]# systemctl reload nginx.service 提供一個靜態資源給nginx ~]# mv 18.png /usr/share/nginx/html/訪問靜態資源,會自動去nginx資源目錄:
![]()
訪問動態jsp資源,會自動去訪問tomcat資源目錄:
![]()
LAMT:
使用httpd的reverse_proxy_module模塊反代至tomcat 1、proxy_module, proxy_http_module - httpd的安裝 yum -y install httpd - 修改httpd配置文檔 注釋掉主配置文檔中的DocumentRoot ~]# vim /etc/httpd/conf/httpd.conf #DocumentRoot "/var/www/html" 創建http_tomcat.conf的子配置文檔 ~]# vim /etc/httpd/conf.d/http_tomcat.conf <VirtualHost *:80> ServerName tc1.com ProxyRequests Off ProxyVia On ProxyPreserveHost On <Proxy *> Require all granted </Proxy> ProxyPass / http://localhost:8080/ ProxyPassReverse / http://localhost:8080/ <Location /> Require all granted </Location> </VirtualHost> - 驗證配置并啟動httpd ~]# httpd -t Syntax OK ~]# systemctl start httpd.service訪問此服務所有的網頁均反代至tomcat 8080
2、proxy_module, proxy_ajp_module httpd反代至tomcat的ajp 8009端口 ~]# cd /etc/httpd/conf.d/ conf.d]# ls autoindex.conf http_tomcat.conf README userdir.conf welcome.conf conf.d]# cp http_tomcat.conf ajp_tomcat.conf conf.d]# mv http_tomcat.conf http_tomcat.conf.bak conf.d]# vim ajp_tomcat.conf <VirtualHost *:80> ServerName tc1.com ProxyRequests Off ProxyVia On ProxyPreserveHost On <Proxy *> Require all granted </Proxy> ProxyPass / ajp://localhost:8009/ ProxyPassReverse / ajp://localhost:8009/ <Location /> Require all granted </Location> </VirtualHost> - 驗證配置并啟動httpd ~]# httpd -t Syntax OK ~]# systemctl restart httpd.service訪問此服務所有的網頁均反代至tomcat 8009
![]()
5、tomcat以普通用戶執行&服務腳本定制
出于安全考慮,tomcat一般均在普通用戶下執行,下面進行在普通用戶下執行tomcat測試
-tomcat用戶創建,并授予權限 catalina.sh stop 修改前先關閉tomcat Using CATALINA_BASE: /usr/local/tomcat Using CATALINA_HOME: /usr/local/tomcat Using CATALINA_TMPDIR: /usr/local/tomcat/temp Using JRE_HOME: /usr/java/latest Using CLASSPATH: /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar ~]# cd /usr/local/tomcat/ tomcat]# ll 總用量 104 drwxr-xr-x 2 root root 4096 4月 26 10:34 bin drwxr-xr-x 3 root root 4096 4月 26 16:15 conf drwxr-xr-x 2 root root 4096 4月 26 10:34 lib -rw-r--r-- 1 root root 56812 7月 18 2014 LICENSE drwxr-xr-x 2 root root 4096 4月 27 10:28 logs -rw-r--r-- 1 root root 1192 7月 18 2014 NOTICE -rw-r--r-- 1 root root 8963 7月 18 2014 RELEASE-NOTES -rw-r--r-- 1 root root 16204 7月 18 2014 RUNNING.txt drwxr-xr-x 3 root root 58 4月 26 13:21 temp drwxr-xr-x 9 root root 101 4月 26 13:10 webapps drwxr-xr-x 3 root root 21 4月 26 10:40 work tomcat]# useradd tomcat tomcat]# chown -R tomcat.tomcat ./* tomcat]# ll 總用量 104 drwxr-xr-x 2 tomcat tomcat 4096 4月 26 10:34 bin drwxr-xr-x 3 tomcat tomcat 4096 4月 26 16:15 conf drwxr-xr-x 2 tomcat tomcat 4096 4月 26 10:34 lib -rw-r--r-- 1 tomcat tomcat 56812 7月 18 2014 LICENSE drwxr-xr-x 2 tomcat tomcat 4096 4月 27 10:28 logs -rw-r--r-- 1 tomcat tomcat 1192 7月 18 2014 NOTICE -rw-r--r-- 1 tomcat tomcat 8963 7月 18 2014 RELEASE-NOTES -rw-r--r-- 1 tomcat tomcat 16204 7月 18 2014 RUNNING.txt drwxr-xr-x 3 tomcat tomcat 58 4月 26 13:21 temp drwxr-xr-x 9 tomcat tomcat 101 4月 26 13:10 webapps drwxr-xr-x 3 tomcat tomcat 21 4月 26 10:40 work - 切換至tomcat用戶進行環境變量查看 [root@localhost tomcat]# su - tomcat [tomcat@localhost ~]$ echo $JAVA_HOME /usr/java/latest [tomcat@localhost ~]$ echo $CATALINA_BASE /usr/local/tomcat - 開啟tomcat [tomcat@localhost ~]$ catalina.sh start Using CATALINA_BASE: /usr/local/tomcat Using CATALINA_HOME: /usr/local/tomcat Using CATALINA_TMPDIR: /usr/local/tomcat/temp Using JRE_HOME: /usr/java/latest Using CLASSPATH: /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar Tomcat started. 進程均由tomcat用戶在執行 [tomcat@localhost ~]$ ps aux | grep java tomcat 19643 12.2 5.8 1081152 59028 pts/2 Sl 13:45 0:04 /usr/java/latest/bin/java -Djava.util.logging.config.file=/usr/local/tomcat/conf/logging.properties -Djava.util.logging.manager=org.apa che.juli.ClassLoaderLogManager -Djava.endorsed.dirs=/usr/local/tomcat/endorsed -classpath /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar -Dcatalina.base=/usr/local/tomcat -Dcatalina.home=/usr/local/tomcat -Djava.io.tmpdir=/usr/local/tomcat/temp org.apache.catalina.startup.Bootstrap starttomcat 19660 0.0 0.0 112660 960 pts/2 R+ 13:46 0:00 grep --color=auto java - catalina服務腳本制定 [root@localhost tomcat]# vim /etc/rc.d/init.d/tomcat #!/bin/sh # Tomcat init script for Linux. # # chkconfig:2345 96 14 # description:The Apache Tomcat servlet/JSP continer. # JAVA_OPTS='-Xms64m -Xmx128m' JAVA_HOME=/usr/java/latest CATALINA_HOME=/usr/local/tomcat export JAVA_HOME CATALINA_HOME case $1 in start) exec $CATALINA_HOME/bin/catalina.sh start ;; stop) exec $CATALINA_HOME/bin/catalina.sh stop;; restart) $CATALINA_HOME/bin/catalina.sh stop sleep 2 exec $CATALINA_HOME/bin/catalina.sh start ;; *) echo "Usage: `basename $0` {start|stop|restart}" exit 1 ;; esac 添加腳本執行權限并將腳本添加至chkconfig [root@localhost tomcat]# vim /etc/rc.d/init.d/tomcat [root@localhost tomcat]# chmod +x /etc/init.d/tomcat [root@localhost tomcat]# chkconfig --add tomcat原創文章,作者:N23-蘇州-void,如若轉載,請注明出處:http://www.www58058.com/74334
非常非常詳細的一篇關于tomcat的系統文檔,相信一定會幫到很多人。