16.1 Tomcat 介紹
Tomcat 是 Apache 軟件基金會(Apache Software Foundation)的 Jakarta 項目中的一個核心項目,由 Apache 、Sun 和其他一些公司及個人共同開發而成
java 程序寫的網站用 tomcat + jdk 來運行
tomcat 是一箇中間件,真正起作用的,解析 java 腳本的是 jdk
jdk(java development kit)是整個 java 的核心,它包含了 java 運行環境和一堆 java 相關的工具以及java基礎庫
最主流的 jdk 爲 sun 公司發佈的 jdk ,除此之外,其實 IBM 公司也有發佈 JDK ,CentOS 上也可以用 yum 安裝 openjdk
16.2 安裝 jdk
jdk 版本 1.6、1.7、1.8
1、進到官網,下載對應版本到 windows 本地
https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html
2、使用 XFTP 上傳到虛擬機中
[root@arslinux-01 ~]# cd /usr/local/src/ [root@arslinux-01 src]# ls apr-1.6.5 apr-util-1.6.1.tar.gz jdk-8u211-linux-x64.tar.gz nginx-1.14.2.tar.gz apr-1.6.5.tar.gz httpd-2.4.38 mysql-5.6.43-linux-glibc2.12-x86_64.tar.gz php-5.6.39 apr-util-1.6.1 httpd-2.4.38.tar.gz nginx-1.14.2
3、解壓
[root@arslinux-01 src]# tar xvf jdk-8u211-linux-x64.tar.gz [root@arslinux-01 src]# du -sh jdk1.8.0_211/ 392Mjdk1.8.0_211/
4、將目錄挪到 /usr/local/ 下,並改名爲 jdk1.8
[root@arslinux-01 src]# mv jdk1.8.0_211/ /usr/local/jdk1.8
5、在 環境變量 /etc/profile 中增加幾行,並使之生效
[root@arslinux-01 src]# vi /etc/profile
JAVA_HOME=/usr/local/jdk1.8/ JAVA_BIN=/usr/local/jdk1.8/bin JRE_HOME=/usr/local/jdk1.8/jre PATH=$PATH:/usr/local/jdk1.8/bin:/usr/local/jdk1.8/jre/bin CLASSPATH=/usr/local/jdk1.8/jre/lib:/usr/local/jdk1.8/lib:/usr/local/jdk1.8/jre/lib/charsets.jar
[root@arslinux-01 src]# source /etc/profile
6、檢驗 jdk 是否安裝成功
[root@arslinux-01 src]# java -version java version "1.8.0_211" Java(TM) SE Runtime Environment (build 1.8.0_211-b12) Java HotSpot(TM) 64-Bit Server VM (build 25.211-b12, mixed mode)
如果版本號和安裝的不符,則 rpm -qa |grep openjdk,看是否安裝了 openjdk,卸載
如果是生產環境,yum list |grep openjdk 把 openjdk 對應版本的包全部安裝
16.3 安裝Tomcat
1、下載二進制安裝包到 /usr/local/src 下
[root@arslinux-01 src]# wget https://mirrors.tuna.tsinghua.edu.cn/apache/tomcat/tomcat-8/v8.5.37/bin/apache-tomcat-8.5.37.tar.gz [root@arslinux-01 src]# ls apache-tomcat-8.5.37.tar.gz httpd-2.4.38 nginx-1.14.2.tar.gz apr-1.6.5 httpd-2.4.38.tar.gz php-5.6.39 apr-1.6.5.tar.gz jdk-8u211-linux-x64.tar.gz php-5.6.39.tar.bz2 apr-util-1.6.1 mysql-5.6.43-linux-glibc2.12-x86_64.tar.gz apr-util-1.6.1.tar.gz nginx-1.14.2
2、解壓
[root@arslinux-01 src]# tar xvf apache-tomcat-8.5.37.tar.gz
3、挪到 /usr/local/ 下,並改名爲 tomcat
[root@arslinux-01 src]# tar xvf apache-tomcat-8.5.37.tar.gz
4、啓動 tomcat
[root@arslinux-01 tomcat]# /usr/local/tomcat/bin/startup.sh Using CATALINA_BASE: /usr/local/tomcat Using CATALINA_HOME: /usr/local/tomcat Using CATALINA_TMPDIR: /usr/local/tomcat/temp Using JRE_HOME: /usr/local/jdk1.8 Using CLASSPATH: /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar Tomcat started.
[root@arslinux-01 tomcat]# ps aux|grep tomcat root 8255 31.3 8.3 2292052 82676 pts/0 Sl 21:59 0:05 /usr/local/jdk1.8/bin/java -Djava.util.logging.config.file=/usr/local/tomcat/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djdk.tls.ephemeralDHKeySize=2048 -Djava.protocol.handler.pkgs=org.apache.catalina.webresources -Dorg.apache.catalina.security.SecurityListener.UMASK=0027 -Dignore.endorsed.dirs= -classpath /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomca/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 start root 8304 0.0 0.0 112724 988 pts/0 R+ 22:00 0:00 grep --color=auto tomcat [root@arslinux-01 tomcat]# netstat -lntp| grep java tcp6 0 0 :::8009 :::* LISTEN 8255/java tcp6 0 0 :::8080 :::* LISTEN 8255/java tcp6 0 0 127.0.0.1:8005 :::* LISTEN 8255/java
5、重啓 tomcat (不支持 restart )
[root@arslinux-01 tomcat]# /usr/local/tomcat/bin/shutdown.sh Using CATALINA_BASE: /usr/local/tomcat Using CATALINA_HOME: /usr/local/tomcat Using CATALINA_TMPDIR: /usr/local/tomcat/temp Using JRE_HOME: /usr/local/jdk1.8 Using CLASSPATH: /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar [root@arslinux-01 tomcat]# ps aux|grep java root 8353 0.0 0.0 112724 988 pts/0 R+ 22:03 0:00 grep --color=auto java
[root@arslinux-01 tomcat]# /usr/local/tomcat/bin/startup.sh Using CATALINA_BASE: /usr/local/tomcat Using CATALINA_HOME: /usr/local/tomcat Using CATALINA_TMPDIR: /usr/local/tomcat/temp Using JRE_HOME: /usr/local/jdk1.8 Using CLASSPATH: /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar Tomcat started. [root@arslinux-01 tomcat]# ps aux|grep java root 8370 93.5 5.7 2255884 57576 pts/0 Sl 22:03 0:01 /usr/local/jdk1.8/bin/java -Djava.util.logging.config.file=/usr/local/tomcat/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djdk.tls.ephemeralDHKeySize=2048 -Djava.protocol.handler.pkgs=org.apache.catalina.webresources -Dorg.apache.catalina.security.SecurityListener.UMASK=0027 -Dignore.endorsed.dirs= -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 start root 8383 0.0 0.0 112724 988 pts/0 R+ 22:03 0:00 grep --color=auto java
tomcat不支持restart,如果需要重啓,/usr/local/tomcat/bin/shutdown.sh 後,在執行 startup.sh
6、tomcat 監聽三個端口
[root@arslinux-01 tomcat]# netstat -lntp | grep java tcp6 0 0 :::8009 :::* LISTEN 8370/java tcp6 0 0 :::8080 :::* LISTEN 8370/java tcp6 0 0 127.0.0.1:8005 :::* LISTEN 8370/java
三個端口:
8080 爲提供web服務的端口
8005 爲管理端口
8009 端口爲第三方服務調用的端口,比如httpd和Tomcat結合時會用到
7、瀏覽器訪問 192,168.194.130:8080
16.4 配置 Tomcat 監聽80端口
默認web服務訪問的是80端口,此時再訪問 http://192.168.194.130/ 就不用寫端口號了
1、編輯 /usr/local/tomcat/conf/server.xml
將 Connector port="8080" protocol="HTTP/1.1" 修改爲 Connector port="80" protocol="HTTP/1.1" 後
[root@arslinux-01 ~]# vim /usr/local/tomcat/conf/server.xml
2、重啓 tomcat
[root@arslinux-01 ~]# /usr/local/tomcat/bin/shutdown.sh Using CATALINA_BASE: /usr/local/tomcat Using CATALINA_HOME: /usr/local/tomcat Using CATALINA_TMPDIR: /usr/local/tomcat/temp Using JRE_HOME: /usr/local/jdk1.8 Using CLASSPATH: /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
[root@arslinux-01 ~]# /usr/local/tomcat/bin/startup.sh Using CATALINA_BASE: /usr/local/tomcat Using CATALINA_HOME: /usr/local/tomcat Using CATALINA_TMPDIR: /usr/local/tomcat/temp Using JRE_HOME: /usr/local/jdk1.8 Using CLASSPATH: /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar Tomcat started.
[root@arslinux-01 ~]# netstat -lntp|grep java tcp6 0 0 :::8009 :::* LISTEN 8601/java tcp6 0 0 127.0.0.1:8005 :::* LISTEN 8601/java
80 端口沒有被 tomcat 監聽
3、查看 80 端口,已經被 nginx 佔用了
[root@arslinux-01 ~]# netstat -lntp | grep 80 tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 7530/nginx: master tcp6 0 0 :::8009 :::* LISTEN 8601/java tcp6 0 0 :::3306 :::* LISTEN 7808/mysqld tcp6 0 0 127.0.0.1:8005 :::* LISTEN 8601/java
80 端口被 nginx 佔用,關閉 nginx
4、關閉 nginx
[root@arslinux-01 ~]# /etc/init.d/nginx stop Stopping nginx (via systemctl): [ 確定 ]
5、重啓 tomcat ,再查看 80 端口
[root@arslinux-01 ~]# /usr/local/tomcat/bin/shutdown.sh Using CATALINA_BASE: /usr/local/tomcat Using CATALINA_HOME: /usr/local/tomcat Using CATALINA_TMPDIR: /usr/local/tomcat/temp Using JRE_HOME: /usr/local/jdk1.8 Using CLASSPATH: /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
[root@arslinux-01 ~]# /usr/local/tomcat/bin/startup.sh Using CATALINA_BASE: /usr/local/tomcat Using CATALINA_HOME: /usr/local/tomcat Using CATALINA_TMPDIR: /usr/local/tomcat/temp Using JRE_HOME: /usr/local/jdk1.8 Using CLASSPATH: /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar Tomcat started.
[root@arslinux-01 ~]# netstat -lntp|grep java tcp6 0 0 :::8009 :::* LISTEN 8702/java tcp6 0 0 :::80 :::* LISTEN 8702/java tcp6 0 0 127.0.0.1:8005 :::* LISTEN 8702/java
6、訪問 192.168.194.130,成功訪問,不用跟端口號
16.5/16.6/16.7 配置Tomcat虛擬主機
配置虛擬主機
[root@arslinux-01 ~]# vim /usr/local/tomcat/conf/server.xml
<Host> 和 </Host> 之間的配置爲虛擬主機配置部分
name 域名
appBase=" " 定義應用的目錄,Java 的應用通常是一個 war 的壓縮包
unpackWARs="true" 是否自動解壓 WAR 包,拷貝 WAR 包到 webapps 目錄中會自動解壓
autoDeploy="true"
增加虛擬主機,在 server.xml 的 </Host> 下面增加如下內容
<Host name="www.123.cn" appBase="" unpackWARs= "true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false"> <Context path="" docBase="/data/wwwroot/123.cn/" debug="0" reloadable="true" crossContext="true"/> </Host>
docBase 和 appBase 類似,appBase 是把 jsp 文件放在 WAR 包中,而如果不想 WAR 包的存在,不定義 appBase ,那麼可以定義一個目錄,目錄裏面放網站的程序,其實就相當於 WAR 包解壓完的文件放到裏面,而用 docBase 來定義目錄位置
注意:appBase 和 docBase 只能選擇一個,另一個留空即可
-- docBase,這個參數用來定義網站的文件存放路徑,如果不定義,默認是在 appBase/ROOT 下面,定義了 docBase 就以該目錄爲主了,其中 appBase 和 docBase 可以一樣。在這一步操作過程中很多人遇到過訪問 404 的問題,其實就是 docBase 沒有定義對。
-- appBase 爲應用存放目錄,通常是需要把 wa r包直接放到該目錄下面,它會自動解壓成一個程序目錄
-- 下面我們通過部署一個 java 的應用來體會 appBase 和 docBase 目錄的作用
1、下載 zrlog
[root@arslinux-01 ~]# cd /usr/local/src/ [root@arslinux-01 src]# wget http://dl.zrlog.com/release/zrlog-1.7.1-baaecb9-release.war [root@arslinux-01 src]# du -sh zrlog-1.7.1-baaecb9-release.war 6.8Mzrlog-1.7.1-baaecb9-release.war
2、拷貝 .war 文件到 /usr/local/tomcat/webapps/ 下,.war 文件會自動解壓
[root@arslinux-01 src]# cp zrlog-1.7.1-baaecb9-release.war /usr/local/tomcat/webapps/ [root@arslinux-01 src]# ls /usr/local/tomcat/webapps/ docs examples host-manager manager ROOT zrlog-1.7.1-baaecb9-release.war [root@arslinux-01 src]# ls /usr/local/tomcat/webapps/ docs examples host-manager manager ROOT zrlog-1.7.1-baaecb9-release zrlog-1.7.1-baaecb9-release.war
拷貝完後過一會纔會顯示出目錄
3、先將zrlog-1.7.1-baaecb9-release 改名爲 zrlog ,再刪除 .war 包
[root@arslinux-01 ~]# cd /usr/local/tomcat/webapps/ [root@arslinux-01 webapps]# ls docs examples host-manager logs manager ROOT zrlog-1.7.1-baaecb9-release zrlog-1.7.1-baaecb9-release.war [root@arslinux-01 webapps]# mv zrlog-1.7.1-baaecb9-release zrlog [root@arslinux-01 webapps]# rm -rf /usr/local/tomcat/webapps/zrlog-1.7.1-baaecb9-release.war
4、網頁登錄 192.168.194.130/zrlog,出現安裝嚮導
5、檢查 mysql 是否啓動
[root@arslinux-01 webapps]# ps aux|grep mysqld root 7487 0.0 0.1 115436 1712 ? S 22:34 0:00 /bin/sh /usr/local/mysql/bin/mysqld_safe --datadir=/data/mysql --pid-file=/data/mysql/arslinux-01.pid mysql 7743 0.4 46.0 1302752 458468 ? Sl 22:34 0:05 /usr/local/mysql/bin/mysqld --basedir=/usr/local/mysql --datadir=/data/mysql --plugin-dir=/usr/local/mysql/lib/plugin --user=mysql --log-error=arslinux-01.err --pid-file=/data/mysql/arslinux-01.pid --socket=/tmp/mysql.sock root 8277 0.0 0.0 112728 984 pts/0 R+ 22:53 0:00 grep --color=auto mysqld
6、進到 mysql 中,創建數據庫 zrlog,創建用戶 zrlog
[root@arslinux-01 webapps]# mysql -uroot -parslinux Warning: Using a password on the command line interface can be insecure. Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 1 Server version: 5.6.43 MySQL Community Server (GPL) Copyright (c) 2000, 2019, Oracle and/or its affiliates. All rights reserved. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. mysql> create database zrlog; Query OK, 1 row affected (0.00 sec) mysql> grant all on zrlog.* to 'zrlog'@127.0.0.1 identified by 'arslinux'; Query OK, 0 rows affected (0.01 sec) mysql> quit Bye [root@arslinux-01 webapps]#
7、用 zrlog 登錄數據庫
[root@arslinux-01 webapps]# mysql -uzrlog -h127.0.0.1 -parslinux Warning: Using a password on the command line interface can be insecure. Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 2 Server version: 5.6.43 MySQL Community Server (GPL) Copyright (c) 2000, 2019, Oracle and/or its affiliates. All rights reserved. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. mysql> show databases; +--------------------+ | Database | +--------------------+ | information_schema | | test | | zrlog | +--------------------+ 3 rows in set (0.01 sec) mysql> quit Bye
8、回到瀏覽器裏 192.168.194.130/zrlog 填寫信息
完成安裝
可以進到後臺寫文章進行管理
順序總結:
1.部署環境 jdk + tomcat
2.下載 zrlog 的 war 包
3.把 war 包放到 server.xml 中定義的 appbase 的目錄下,unpackWARs需要定義爲 true 會自動解壓 war 包
4.創建對應的數據庫、用戶和密碼
之前訪問zrlog博客是在192,168,65,128/zrlog,zrlog目錄下訪問,如果不想域名後有目錄,可以按照以下步驟做
之前在 server.xml 編輯新增的虛擬主機
-- 沒有定義 appBase
-- 而定義了 docBase="/data/wwwroot/123.cn/"
-- 因此將 war 包解壓出來的目錄拷貝到 docBase 定義的目錄下就可以通過 123.cn 來訪問 zrlog 內容
創建目錄 /data/wwwroot/123.cn/,並移動 zrlog 到目錄中
[root@arslinux-01 webapps]# mkdir /data/wwwroot/123.cn/ [root@arslinux-01 webapps]# mv /usr/local/tomcat/webapps/zrlog/* /data/wwwroot/123.cn/ [root@arslinux-01 webapps]# ls !$ ls /data/wwwroot/123.cn/ zrlog
在 windows 的 hosts 中重定向
訪問 www.123.cn,不用再進入目錄才能看到博客內容
appBase 和 docBase 的區別:
appBase 是放 war 包的,docBase 是直接放網站程序測
訪問 tomcat 默認是訪問目錄中的 ROOT 目錄,如果自己定義 appBase,目錄下需要創建 ROOT 目錄
如果出現 404 問題,需要考慮到 appBase 、docBase 和 ROOT 目錄的問題。
16.8 Tomcat日誌
日誌目錄
[root@arslinux-01 ~]# cd /usr/local/tomcat/logs/ [root@arslinux-01 logs]# ls catalina.2019-05-27.log host-manager.2019-05-27.log localhost.2019-05-28.log manager.2019-05-27.log catalina.2019-05-28.log host-manager.2019-05-28.log localhost_access_log.2019-05-27.txt manager.2019-05-28.log catalina.out localhost.2019-05-27.log localhost_access_log.2019-05-28.txt
-- 其中 catalina 開頭的日誌爲 Tomcat 的綜合日誌,它記錄 Tomcat 服務相關信息,也會記錄錯誤日誌。
-- 其中 catalina.2017-xx-xx.log 和 catalina.out 內容相同,前者會每天生成一個新的日誌。
-- host-manager 和 manager 爲管理相關的日誌,其中 host-manager 爲虛擬主機的管理日誌。
-- localhost 和 localhost_access 爲虛擬主機相關日誌,其中帶 access 字樣的日誌爲訪問日誌,不帶access 字樣的爲默認虛擬主機的錯誤日誌。
[root@arslinux-01 logs]# cat catalina.out
訪問日誌默認不會生成,需要在 server.xml 中配置一下。
具體方法:
在對應虛擬主機的< Host></Host> 裏面加入下面的配置(假如域名爲123.cn):
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
prefix="123.cn_access" suffix=".log"
pattern="%h %l %u %t "%r" %s %b" />
-- prefix 定義訪問日誌的前綴,suffix定義日誌的後綴,pattern定義日誌格式。
-- 新增加的虛擬主機默認並不會生成類似默認虛擬主機的那個localhost.日期.log日誌,錯誤日誌會統一記錄到catalina.out中。關於Tomcat日誌,你最需要關注catalina.out,當出現問題時,我們應該第一想到去查看它。
擴展:
java容器比較 http://my.oschina.net/diedai/blog/271367
http://www.360doc.com/content/11/0618/21/16915_127901371.shtml
j2ee、j2se、ejb、javabean、serverlet、jsp之間關係 http://bbs.csdn.net/topics/50015576
tomcat server.xml配置詳解 http://blog.csdn.net/yuanxuegui2008/article/details/6056754
JAR、WAR包區別 http://blog.csdn.net/lishehe/article/details/41607725