简介
Tomcat 服务器是一个免费的开放源代码的Web 应用服务器,属于轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试JSP 程序的首选。对于一个初学者来说,可以这样认为,当在一台机器上配置好Apache 服务器,可利用它响应HTML(标准通用标记语言下的一个应用)页面的访问请求。实际上Tomcat是Apache 服务器的扩展,但运行时它是独立运行的,所以当你运行tomcat 时,它实际上作为一个与Apache 独立的进程单独运行的。
诀窍是,当配置正确时,Apache 为HTML页面服务,而Tomcat 实际上运行JSP 页面和Servlet。另外,Tomcat和IIS等Web服务器一样,具有处理HTML页面的功能,另外它还是一个Servlet和JSP容器,独立的Servlet容器是Tomcat的默认模式。不过,Tomcat处理静态HTML的能力不如Apache服务器。目前Tomcat最新版本为9.0。
tomcat就是传说中的中间件之一,tomcat本身是一个容器,专门用来运行java程序,java语言开发的网页.jsp就应该运行于tomcat中。而tomcat本身的运行也依赖于jdk环境。
tomcat应用场景:lnmt
Tomcat结构图:
Tomcat主要组件:服务器Server,服务Service,连接器Connector、容器Container。连接器Connector和容器Container是Tomcat的核心。
Connector
一个Container容器和一个或多个Connector组合在一起,加上其他一些支持的组件共同组成一个Service服务,有了Service服务便可以对外提供能力了,但是Service服务的生存需要一个环境,这个环境便是Server,Server组件为Service服务的正常使用提供了生存环境,Server组件可以同时管理一个或多个Service服务。
一个Connecter将在某个指定的端口上侦听客户请求,接收浏览器的发过来的 tcp 连接请求,创建一个 Request 和 Response 对象分别用于和请求端交换数据,然后会产生一个线程来处理这个请求并把产生的 Request 和 Response 对象传给处理Engine(Container中的一部分),从Engine出获得响应并返回客户。
Tomcat中有两个经典的Connector,一个直接侦听来自Browser的HTTP请求,另外一个来自其他的WebServer请求。HTTP/1.1 Connector在端口8080处侦听来自客户Browser的HTTP请求,AJP/1.3 Connector在端口8009处侦听其他Web Server(其他的HTTP服务器)的Servlet/JSP请求。
Connector 最重要的功能就是接收连接请求然后分配线程让 Container 来处理这个请求,所以这必然是多线程的,多线程的处理是 Connector 设计的核心。
Container是容器的父接口,该容器的设计用的是典型的责任链的设计模式,它由四个自容器组件构成,分别是Engine、Host、Context、Wrapper。这四个组件是负责关系,存在包含关系。通常一个Servlet class对应一个Wrapper,如果有多个Servlet定义多个Wrapper,如果有多个Wrapper就要定义一个更高的Container,如Context。
Context 还可以定义在父容器 Host 中,Host 不是必须的,但是要运行 war 程序,就必须要 Host,因为 war 中必有 web.xml 文件,这个文件的解析就需要 Host 了,如果要有多个 Host 就要定义一个 top 容器 Engine 了。而 Engine 没有父容器了,一个 Engine 代表一个完整的 Servlet 引擎。
2. tomcat项目部署
java环境安装
//安装jdk环境
[root@wyt2 ~]# yum -y install java-1.8.0-openjdk*
//查看安装的版本
[root@wyt2 ~]# java -version
openjdk version "1.8.0_222-ea"
OpenJDK Runtime Environment (build 1.8.0_222-ea-b03)
OpenJDK 64-Bit Server VM (build 25.222-b03, mixed mode)
tomcat部署
//在官网下载tomcat 官网地址http://tomcat.apache.org/
[root@wyt2 ~]# ls
anaconda-ks.cfg apache-tomcat-9.0.37.tar.gz
//解压tomcat
[root@wyt2 ~]# tar xf apache-tomcat-9.0.37.tar.gz -C /usr/local
[root@wyt2 ~]# cd /usr/local
[root@wyt2 local]# ln -s apache-tomcat-9.0.37/ tomcat //创建软连接
[root@wyt2 local]# ll
总用量 0
drwxr-xr-x 9 root root 220 7月 31 18:31 apache-tomcat-9.0.37
drwxr-xr-x. 2 root root 6 4月 11 2018 bin
drwxr-xr-x. 2 root root 6 4月 11 2018 etc
drwxr-xr-x. 2 root root 6 4月 11 2018 games
drwxr-xr-x. 2 root root 6 4月 11 2018 include
drwxr-xr-x. 2 root root 6 4月 11 2018 lib
drwxr-xr-x. 2 root root 6 4月 11 2018 lib64
drwxr-xr-x. 2 root root 6 4月 11 2018 libexec
drwxr-xr-x. 2 root root 6 4月 11 2018 sbin
drwxr-xr-x. 5 root root 49 7月 29 17:46 share
drwxr-xr-x. 2 root root 6 4月 11 2018 src
lrwxrwxrwx 1 root root 21 7月 31 18:31 tomcat -> apache-tomcat-9.0.37/
写一个hello world的java页面
[root@wyt2 ~]# vim index.jsp
<html>
<head>
<title>test page</title>
</head>
<body>
<%
out.println("Hello World");
%>
</body>
</html>
创建网页放置文件
[root@wyt2 ~]# mkdir /usr/local/tomcat/webapps/test
[root@wyt2 ~]# cp index.jsp /usr/local/tomcat/webapps/test/
[root@wyt2 ~]# ll /usr/local/tomcat/webapps/test/
总用量 4
-rw-r--r-- 1 root root 140 7月 31 18:34 index.jsp
启动tomcat
[root@wyt2 ~]# /usr/local/tomcat/bin/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
Using CLASSPATH: /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
Tomcat started.
[root@wyt2 ~]# ps -ef|grep tomcat
root 1458 1 99 18:34 pts/0 00:00:05 /usr/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 1487 1197 0 18:34 pts/0 00:00:00 grep --color=auto tomcat
[root@wyt2 ~]# ss -antl
State Recv-Q Send-Q Local Address:Port Peer Address:Port
LISTEN 0 100 127.0.0.1:25 *:*
LISTEN 0 128 *:22 *:*
LISTEN 0 100 [::1]:25 [::]:*
去浏览器上访问网页
3.tomcat多项目部署
//安装jdk环境
[root@wyt2 ~]# yum -y install java-1.8.0-openjdk*
//下载安装包
[root@wyt2 ~]# ls
anaconda-ks.cfg apache-tomcat-9.0.37.tar.gz
[root@wyt2 ~]# tar xf apache-tomcat-9.0.37.tar.gz //解压到当前目录
[root@wyt2 ~]# ls
anaconda-ks.cfg apache-tomcat-9.0.37 apache-tomcat-9.0.37.tar.gz
[root@wyt2 ~]# cd /usr/local
[root@wyt2 local]# ls
bin etc games include lib lib64 libexec sbin share src
[root@wyt2 local]# mkdir tomcat //创建tomcat
[root@wyt2 local]# cd tomcat/
[root@wyt2 tomcat]# pwd
/usr/local/tomcat
[root@wyt2 tomcat]# cd
[root@wyt2 ~]# mv apache-tomcat-9.0.37 /usr/local/tomcat/qq 移动tomcat到qq项目
[root@wyt2 ~]# ls
anaconda-ks.cfg apache-tomcat-9.0.37.tar.gz
[root@wyt2 ~]# tar xf apache-tomcat-9.0.37.tar.gz //解压到当前目录
[root@wyt2 ~]# mv apache-tomcat-9.0.37 /usr/local/tomcat/weixin 移动tomcat到weixin项目
[root@wyt2 ~]# cd /usr/local/tomcat //进入tmocat
[root@wyt2 tomcat]# ls
qq weixin
[root@wyt2 tomcat]# ls qq //查看qq项目
bin CONTRIBUTING.md logs RELEASE-NOTES webapps
BUILDING.txt lib NOTICE RUNNING.txt work
conf LICENSE README.md temp
[root@wyt2 tomcat]# ls weixin //查看weixin项目
bin CONTRIBUTING.md logs RELEASE-NOTES webapps
BUILDING.txt lib NOTICE RUNNING.txt work
conf LICENSE README.md temp
[root@wyt2 conf]# cd /usr/local/tomcat/qq/conf
[root@wyt2 conf]# vim server.xml //编辑配置文件
<Server port="8006" shutdown="SHUTDOWN"> //修改默认端口号
<Connector port="8081" protocol="HTTP/1.1" //修改默认端口号
connectionTimeout="20000"
redirectPort="8444" /> //修改默认端口号
[root@wyt2 conf]# /usr/local/tomcat/qq/bin/startup.sh //启动qq
Using CATALINA_BASE: /usr/local/tomcat/qq
Using CATALINA_HOME: /usr/local/tomcat/qq
Using CATALINA_TMPDIR: /usr/local/tomcat/qq/temp
Using JRE_HOME: /usr
Using CLASSPATH: /usr/local/tomcat/qq/bin/bootstrap.jar:/usr/local/tomcat/qq/bin/tomcat-juli.jar
Tomcat started.
[root@wyt2 ~]# /usr/local/tomcat/weixin/bin/startup.sh //启动weixin
Using CATALINA_BASE: /usr/local/tomcat/weixin
Using CATALINA_HOME: /usr/local/tomcat/weixin
Using CATALINA_TMPDIR: /usr/local/tomcat/weixin/temp
Using JRE_HOME: /usr
Using CLASSPATH: /usr/local/tomcat/weixin/bin/bootstrap.jar:/usr/local/tomcat/weixin/bin/tomcat-juli.jar
Tomcat started.
[root@wyt2 ~]# ss -antl
State Recv-Q Send-Q Local Address:Port Peer Address:Port
LISTEN 0 100 127.0.0.1:25 *:*
LISTEN 0 128 *:22 *:*
LISTEN 0 100 [::1]:25 [::]:*
LISTEN 0 1 [::ffff:127.0.0.1]:8005 [::]:*
LISTEN 0 1 [::ffff:127.0.0.1]:8006 [::]:*
LISTEN 0 100 [::]:8080 [::]:*
LISTEN 0 100 [::]:8081 [::]:*
LISTEN 0 128 [::]:22 [::]:*
[root@wyt2 ~]# ps -ef|grep tomcat
root 10045 1 0 11:32 pts/0 00:00:15 /usr/bin/java -Djava.util.logging.config.file=/usr/local/tomcat/qq/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/qq/bin/bootstrap.jar:/usr/local/tomcat/qq/bin/tomcat-juli.jar -Dcatalina.base=/usr/local/tomcat/qq -Dcatalina.home=/usr/local/tomcat/qq -Djava.io.tmpdir=/usr/local/tomcat/qq/temp org.apache.catalina.startup.Bootstrap start
root 10220 1 28 12:01 pts/0 00:00:06 /usr/bin/java -Djava.util.logging.config.file=/usr/local/tomcat/qq/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/qq/bin/bootstrap.jar:/usr/local/tomcat/qq/bin/tomcat-juli.jar -Dcatalina.base=/usr/local/tomcat/qq -Dcatalina.home=/usr/local/tomcat/qq -Djava.io.tmpdir=/usr/local/tomcat/qq/temp org.apache.catalina.startup.Bootstrap start
root 10251 9773 0 12:01 pts/0 00:00:00 grep --color=auto tomcat
访问web界面
需要修改配置文件才能访问 server status Manager App Host Manager
[root@wyt2 webapps]# cd /usr/local/tomcat/weixin/conf
[root@wyt2 conf]# vim tomcat-users.xml
<role rolename="manager-gui"/> //允许访问项目管理工具
<role rolename="admin-gui"/> //允许访问项目管理工具的用户
<user username="tomcat" password="123456" roles="manager-gui,admin-gui"/> //添加用户密码
[root@wyt2 conf]# cd /usr/local/tomcat/weixin/webapps/manager/META-INF
[root@wyt2 META-INF]# vim context.xml
allow="192\.168\.179\.\d+|127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1" //添加允许访问的网段
[root@wyt2 META-INF]# cd /usr/local/tomcat/weixin/webapps/host-manager/META-INF
[root@wyt2 META-INF]# vim context.xml
allow="192\.168\.179\.\d+|127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1" //添加允许主机管理工具的网段