Tomcat詳解

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)) 
Tomcat詳解

(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))  

Tomcat詳解
目錄文件查看:
~]# cd /usr/local/tomcat/
tomcat]# ls
bin  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.xml

tomcat的配置文件:

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默認為熱部署,所以網頁已經可以正常訪問
tomcat會默認把jsp網頁編譯成java語言
~]# cd /usr/local/tomcat/work/Catalina/localhost/myapp/org/apache/jsp/
jsp]# ls
index_jsp.class  index_jsp.java

(2)tomcat自帶的應用程序

Tomcat詳解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))

Tomcat詳解Tomcat詳解Tomcat詳解Tomcat詳解

管理頁面可以對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

此時網站已經可以正常訪問

Tomcat詳解

配置后臺數據庫
~]# 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

Tomcat詳解Tomcat詳解Tomcat詳解

安裝提示刪除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

Tomcat詳解

此時網站部署完成

Tomcat詳解

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屬性即可,點擊按鈕也會出現提示畫面

Tomcat詳解Tomcat詳解

修改內容為:
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

Tomcat詳解

此時在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 &quot;%r&quot; %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 961

4、LNMT/LAMT

LNMT:

Tomcat詳解

- 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

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資源目錄:

Tomcat詳解

訪問動態jsp資源,會自動去訪問tomcat資源目錄:

Tomcat詳解

LAMT:

Tomcat詳解

使用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

Tomcat詳解Tomcat詳解

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

Tomcat詳解Tomcat詳解

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

(0)
N23-蘇州-voidN23-蘇州-void
上一篇 2017-04-27
下一篇 2017-04-27

相關推薦

  • N27_第六周作業

    請詳細總結vim編輯器的使用并完成以下練習題 基本模式:編輯模式(命令模式),輸入模式,末行模式 模式轉換: 編輯模式–輸入模式: i:insert,在光標所在處前方輸入 a:append,在光標所在處后方輸入 o:在光標所在處的下方新建一行 I:在光標所在行行首輸入 A:在光標所在處行尾輸入 O:在光標所在處的上方打開一個新行 輸入模式&#82…

    Linux干貨 2017-10-26
  • LVS工作原理淺析

    一、什么是LVS         LVS是Linux Virtual Server的簡寫,意即Linux虛擬服務器,是一個虛擬的服務器集群系統。本項目在1998年5月由章文嵩博士成立,是中國國內最早出現的自由軟件項目之一。         LVS集群采用IP負載均衡技術和基于內容…

    Linux干貨 2016-11-29
  • DNS

    這里都以我本機的實驗為例 正向解析:就是從主機名到IP的解析過程 先在工作目錄/var/named/創建一個區域數據文件 以zcylinux.io域為例:vim/var/named/zcylinux.io.zone $TTL  600     #設置全局變量TTL的值為600s zcylinux.io.&nb…

    Linux干貨 2017-05-30
  • 26期全程班-第五周博客作業

      1、顯示/boot/grub/grub.conf中以至少一個空白字符開頭的行; # grep “^[[:space:]]\+” /boot/grub/grub.conf 2、顯示/etc/rc.d/rc.sysinit文件中以#開頭,后面跟至少一個空白字符,而后又有至少一個非空白字符的行; # grep “^…

    Linux干貨 2017-03-09
  • Linux基礎(四)——用戶管理&grep命令

    1、  復制/etc/skel目錄為/home/tuser1,要求/home/tuser1及其內部文件的屬組和其它用戶均沒有任何訪問權限。 cp /etc/skel/ /home/tuser1 –r chmod -R 700 /home/tuser1/ 2、  編輯/etc/group文件,添加組hadoop。 echo "ha…

    Linux干貨 2016-11-08
  • LVS的詳細應用

    LVS是Linux Virtual Server的簡寫, 意思是Linux虛擬服務器, 是一個虛擬的服務器集群系統. LVS的宗旨:    1. 使用集群技術和Linux操作系統實現一個高性能, 高可用的服務器;    2. 很好的可伸縮性(Scalability);    3. 很好的可靠性(Re…

    Linux干貨 2016-12-05

評論列表(1條)

  • 馬哥教育
    馬哥教育 2017-05-04 14:49

    非常非常詳細的一篇關于tomcat的系統文檔,相信一定會幫到很多人。

欧美性久久久久