一、初识tomcat

概述:Tomcat是由Apache软件基金会下属的Jakarta项目开发的一个Servlet容器,按照Sun Microsystems提供的技术规范,实现了对Servlet和JavaServer Page(JSP)的支持,并提供了作为Web服务器的一些特有功能,如Tom cat管理和控制平台、安全域管理和Tomcat阀等。由于Tomcat本身也内含了一个HTTP服务器,它也可以被视作一个单独的Web服务器。

便于理解:Apache与Tomcat的比较
相同点:
1.两者都是Apache组织开发的
2.两者都有HTTP服务的功能
3.两者都是开源的
不同点:
1.Apache是专门用了提供HTTP服务的,以及相关配置的(例如虚拟主机、URL转发等等),而Tomcat是Apache组织在符合Java EE的JSP、Servlet标准下开发的一个JSP服务器.
2.Apache是一个Web服务器环境程序,启用他可以作为Web服务器使用,不过只支持静态网页。如果要在Apache环境下运行JSP的话就需要一个解释器来执行JSP网页,而这个JSP解释器就是Tomcat。
3.Apache侧重于HTTPServer ,Tomcat侧重于Servlet引擎,如果以Standalone方式运行,功能上与Apache等效,支持JSP,但对静态网页不太理想;
4.Apache是Web服务器,Tomcat是应用(Java)服务器,它只是一个Servlet(JSP也翻译成Servlet)容器,可以认为是Apache的扩展,但是可以独立于Apache运行。

中间件:JSP网页的解释器
Httpd:能够解析html的页面,也就是所谓的静态页面
Tomcat:既能解析html的页面,解析静态页面的能力远远不如httpd,又能解析jsp页面(为主)

Tomcat同类产品:
1.Resin 服务器:
Resin是Caucho公司的产品,是一个非常流行的支持Servlet和JSP的服务器,速度非常快。Resin本身包含了一个支持HTML的Web服务器,这使它不仅可以显示动态内容,而且显示静态内容的能力也毫不逊色,因此许多网站都是使用Resin服务器构建。
2.Jetty 服务器:
Jetty是一个纯粹的基于Java的网页服务器和Java Servlet容器。尽管网页服务器通常用来为人们呈现文档,但是Jetty通常在较大的软件框架中用于计算机与计算机之间的通信。Jetty作为Eclipse基金会的一部分,是一个自由和开源项目。
3.JBoss服务器:
JBoss是一个种遵从JavaEE规范的、开放源代码的、纯Java的EJB服务器,对于J2EE有很好的支持。JBoss采用JML API实现软件模块的集成与管理,其核心服务又是提供EJB服务器,不包含Servlet和JSP的Web容器,不过它可以和Tomcat完美结合。
4.WebSphere 服务器:
WebSphere是IBM公司的产品,可进一步细分为 WebSphere Performance Pack、Cache Manager 和WebSphere Application Server等系列,其中WebSphere Application Server 是基于Java 的应用环境,可以运行于 Sun Solaris、Windows NT 等多种操作系统平台,用于建立、部署和管理Internet和Intranet Web应用程序。
5.WebLogic 服务器:
WebLogic 是ORACLE公司的产品,可进一步细分为 WebLogic Server、WebLogic Enterprise 和 WebLogic Portal 等系列,其中 WebLogic Server 的功能特别强大。WebLogic 支持企业级的、多层次的和完全分布式的Web应用,并且服务器的配置简单、界面友好。对于那些正在寻求能够提供Java平台所拥有的一切应用服务器的用户来说,WebLogic是一个十分理想的选择。


二、Tomcat与jdk的关系

图解:
解析: JDK是开发人员开发使用,jre是用来运行java程序,就是java程序的运行环境,jvm是整个java实现跨平台的最核心的部分,所有的java程序会首先被编译为.class的类文件,这种类文件可以在虚拟机上执行;
JDK中包含JRE,在JDK的安装目录下有一个名为jre的目录,里面有两个文件夹bin和lib,在这里可以认为bin里的就是jvm,lib中则是jvm工作所需要的类库,而jvm和 lib和起来就称为jre。jdk是java语言编写的,用来给java程序调用的,jvm因为与平台进行交互,是用c/c++和汇编语言编写的;
jdk是java运行和编译的,tomcat是web项目的运行容器,java没有jdk没办法编译运行,java运行必须依赖jdk的环境,所以安装tomcat前必须要安装jdk环境;

注解:

  1. Java SE(Java Platform,Standard Edition):Java SE 是做电脑上运行的软件;
  2. Java EE(Java Platform,Enterprise Edition):Java EE 是用来做网站的(我们常见的JSP技术);
  3. Java ME(Java Platform,Micro Edition):Java ME 是做手机软件的;
    对应关系:

三、Tomcat内部工作原理

tomcat整体架构:
组件关联:
1、Tomcat 的心脏是两个组件:Connector 和 Container,Connector 组件是可以被替换,这样显得更加灵活,一个 Container 可以选择对应多个 Connector。多个 Connector 和一个 Container 就形成了一个 Service,有了 Service 就可以对外提供服务了,但是 Service 还要一个生存的环境,必须要有人能够给她生命、掌握其生死大权,那就非 Server 莫属了。所以整个 Tomcat 的生命周期由 Server 控制。
2、我们将 Tomcat 中 Connector、Container 作为一个整体比作一对情侣的话,Connector 主要负责对外交流,可以比作为 Boy,Container 主要处理 Connector 接受的请求,主要是处理内部事务,可以比作为 Girl。那么这个 Service 就是连接这对男女的结婚证了。是Service 将它们连接在一起,共同组成一个家庭。当然要组成一个家庭还要很多其它的元素说白了,Service 只是在 Connector 和 Container 外面多包一层,把它们组装在一起,向外面提供服务,一个 Service 可以设置多个 Connector,但是只能有一个 Container 容器。
Container组件详解:

Engine:负责处理所有请求,处理后,将结果返回给service,而connector是作为service与engine的中间媒介出现的。 作为交流者;一个engine下可以配置一个默认主机,每个虚拟主机都有一个域名。当engine获得一个请求时,它把该请求匹配到虚拟主机host上,然后把请求交给该主机来处理。 Engine有一个默认主机,当请求无法匹配到任何一个虚拟主机时,将交给默认host来处理。Engine以线程的方式启动Host。
Host:代表一个虚拟主机,每个虚拟主机和某个网络域名(Domain Name)相匹配。 每个虚拟主机下都可以部署一个或多个web应用,每个web应用对应于一个context,有一个context path。 当Host获得一个请求时,将把该请求匹配到某个Context上;
Wrapper: 代表一个 Servlet,它负责管理一个 Servlet,包括的 Servlet 的装载、初始化、执行以及资源回收。Wrapper 是最底层的容器,它没有子容器了;


四、Tomcat配置文件详解






tomcat中支持两种协议的连接器:HTTP/1.1与AJP/1.3
HTTP/1.1协议负责建立HTTP连接,web应用通过浏览器访问tomcat服务器用的就是这个连接器,默认监听的是8080端口;
AJP/1.3协议负责和其他HTTP服务器建立连接,监听的是8009端口,比如tomcat和apache或者iis集成时需要用到这个连接器。

扩展:tomcat架构以及详细配置如下:
https://www.cnblogs.com/hggen/p/6264475.html
https://blog.csdn.net/skp127/article/details/52026150

tomcat下载地址:
https://tomcat.apache.org/download-90.cgi
jdk下载地址:
http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html


五、案例:搭建Tomcat案例

案例环境:
点击下载apache-tomcat-8.5.32.tar.gz
提取码:degw

点击下载jdk-8u181-linux-x64.tar.gz
提取码:v4az

案例步骤:

安装jdk,部署java环境

下载完tomcatjdk之后上传到我们的服务器
上传方法点击获取

然后安装:

[root@localhost ~]# ls
anaconda-ks.cfg  apache-tomcat-8.5.32.tar.gz  jdk-8u181-linux-x64.tar.gzrpm -qa |grep java                    ##查看是否有安装java
tar zxvf jdk-8u181-linux-x64.tar.gz   ##解压
mv jdk1.8.0_181/ /usr/local/java      ##移动[root@localhost ~]# ls /usr/local/java/
bin        include         jre  LICENSE  README.html  src.zip                             THIRDPARTYLICENSEREADME.txt
COPYRIGHT  javafx-src.zip  lib  man      release      THIRDPARTYLICENSEREADME-JAVAFX.txt cat <<END >>/etc/profile
export JAVA_HOME=/usr/local/java
export PATH=$PATH:/usr/local/java/bin
ENDsource  /etc/profile[root@localhost ~]# java -version       ##查看java的版本是否一致
java version "1.8.0_181"
Java(TM) SE Runtime Environment (build 1.8.0_181-b13)
Java HotSpot(TM) 64-Bit Server VM (build 25.181-b13, mixed mode)

安装tomact软件程序

tar zxvf apache-tomcat-8.5.32.tar.gz          ##解压
mv apache-tomcat-8.5.32/ /usr/local/tomcat    ##移动[root@localhost ~]# ls /usr/local/tomcat/
bin  conf  lib  LICENSE  logs  NOTICE  RELEASE-NOTES  RUNNING.txt  temp  webapps  work/usr/local/tomcat/bin/startup.sh              ##启动tomcat[root@localhost ~]# netstat -anptu | grep 8080        ##查看端口号
tcp6       0      0 :::8080                 :::*                    LISTEN      1242/java/usr/local/tomcat/bin/shutdown.sh             ##关闭tomcat

客户端访问测试初始页面:

http://192.168.1.2:8080/


自定义tomcat页面

上传一张图片

cd /usr/local/tomcat/webapps/ROOT

vi index.jsp


客户机再次访问:
http://192.168.1.2:8080/


Tomcat服务配置目录讲解,配置文件讲解,主配置文件讲解
点击查看


安装mariadb数据库,提供数据库服务

yum -y install mariadb-server mysql     ##安装mariadb
systemctl start mariadb                 ##启动mariadb
systemctl enable mariadb                ##开机自启mariadb[root@localhost ~]# netstat -anptu | grep mysqld        ##查看端口号
tcp        0      0 0.0.0.0:3306            0.0.0.0:*               LISTEN      1790/mysqld
mysqladmin -uroot password 123456     ##设置密码
mysql -uroot -p123456                 ##进入数据库MariaDB [(none)]> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| test               |
+--------------------+
4 rows in set (0.01 sec)MariaDB [(none)]> exit     ##退出
Bye

配置Tomcat的manager管理界面

vi /usr/local/tomcat/conf/tomcat-users.xml     ##添加管理页面的用户认证,帐户名为tomcat,密码为123456
<role rolename="manager-gui"/>
<user username="tomcat" password="123456" roles="manager-gui"/>
</tomcat-users>

vi /usr/local/tomcat/webapps/manager/META-INF/context.xml   ##默认tomcat的管理页面只能通过tomcat服务器上的浏览器才可以访问,设置其可以在其他主机访问allow="127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1|\d+\.\d+\.\d+\.\d+" />

/usr/local/tomcat/bin/shutdown.sh
/usr/local/tomcat/bin/startup.sh

客户端访问测试manager管理界面;(客户端测试启动停止项目、测试服务端状态查看):



项目二:超市订单管理系统,手动上线,创建项目中的数据库或者导入数据库文件,并且进行授权

下载超市管理系统war包
提取码:bmps
下载之后解压可以看到里面有两个文件:

我们把smbms_db.sql上传:

[root@localhost ~]# rz
z waiting to receive.**B0100000023be50
[root@localhost ~]# ls
anaconda-ks.cfg  apache-tomcat-8.5.32.tar.gz  jdk-8u181-linux-x64.tar.gz  smbms_db.sql
mysql -uroot -p123456<smbms_db.sql
mysql -uroot -p123456MariaDB [(none)]> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| smbms              |
| test               |
+--------------------+
5 rows in set (0.00 sec)MariaDB [(none)]> grant all on smbms.* to 'zps'@'192.168.1.%'  identified by "123456";   ##为项目中所指定的数据库进行授权
Query OK, 0 rows affected (0.00 sec)MariaDB [(none)]>  flush privileges;
Query OK, 0 rows affected (0.00 sec)MariaDB [smbms]> show tables;
+-----------------+
| Tables_in_smbms |
+-----------------+
| smbms_address   |
| smbms_bill      |
| smbms_provider  |
| smbms_role      |
| smbms_user      |
+-----------------+
5 rows in set (0.00 sec)MariaDB [smbms]> use smbms;
Database changedMariaDB [smbms]> select * from smbms_user;                   ##查看项目中的管理员账户
+----+-----------+-----------------+--------------+--------+------------+-------------+----------------------------------------------------+----------+-----------+---------------------+----------+---------------------+
| id | userCode  | userName        | userPassword | gender | birthday   | phone       | address                                            | userRole | createdBy | creationDate        | modifyBy | modifyDate          |
+----+-----------+-----------------+--------------+--------+------------+-------------+----------------------------------------------------+----------+-----------+---------------------+----------+---------------------+
|  1 | admin     | 系统管理员      | 1234567      |      1 | 1983-10-10 | 13688889999 | 北京市海淀区成府路207号                            |        1 |         1 | 2013-03-21 16:52:07 |     NULL | NULL                |
|  2 | liming    | 李明            | 0000000      |      2 | 1983-12-10 | 13688884457 | 北京市东城区前门东大街9号                          |        2 |         1 | 2014-12-31 19:52:09 |     NULL | NULL                |
|  5 | hanlubiao | 韩路彪          | 0000000      |      2 | 1984-06-05 | 18567542321 | 北京市朝阳区北辰中心12号                           |        2 |         1 | 2014-12-31 19:52:09 |     NULL | NULL                |
|  6 | zhanghua  | 张华            | 0000000      |      1 | 1983-06-15 | 13544561111 | 北京市海淀区学院路61号                             |        3 |         1 | 2013-02-11 10:51:17 |     NULL | NULL                |
|  7 | wangyang  | 王洋            | 0000000      |      2 | 1982-12-31 | 13444561124 | 北京市海淀区西二旗辉煌国际16层                     |        3 |         1 | 2014-06-11 19:09:07 |     NULL | NULL                |
|  8 | zhaoyan   | 赵燕            | 0000000      |      1 | 1986-03-07 | 18098764545 | 北京市海淀区回龙观小区10号楼                       |        3 |         1 | 2016-04-21 13:54:07 |     NULL | NULL                |
| 10 | sunlei    | 孙磊            | 0000000      |      2 | 1981-01-04 | 13387676765 | 北京市朝阳区管庄新月小区12楼                       |        3 |         1 | 2015-05-06 10:52:07 |     NULL | NULL                |
| 11 | sunxing   | 孙兴            | 0000000      |      2 | 1978-03-12 | 13367890900 | 北京市朝阳区建国门南大街10号                       |        3 |         1 | 2016-11-09 16:51:17 |     NULL | NULL                |
| 12 | zhangchen | 张晨            | 0000000      |      1 | 1986-03-28 | 18098765434 | 朝阳区管庄路口北柏林爱乐三期13号楼                 |        3 |         1 | 2016-08-09 05:52:37 |        1 | 2016-04-14 14:15:36 |
| 13 | dengchao  | 邓超            | 0000000      |      2 | 1981-11-04 | 13689674534 | 北京市海淀区北航家属院10号楼                       |        3 |         1 | 2016-07-11 08:02:47 |     NULL | NULL                |
| 14 | yangguo   | 杨过            | 0000000      |      2 | 1980-01-01 | 13388886623 | 北京市朝阳区北苑家园茉莉园20号楼                   |        3 |         1 | 2015-02-01 03:52:07 |     NULL | NULL                |
| 15 | zhaomin   | 赵敏            | 0000000      |      1 | 1987-12-04 | 18099897657 | 北京市昌平区天通苑3区12号楼                        |        2 |         1 | 2015-09-12 12:02:12 |     NULL | NULL                |
+----+-----------+-----------------+--------------+--------+------------+-------------+----------------------------------------------------+----------+-----------+---------------------+----------+---------------------+
12 rows in set (0.00 sec)MariaDB [smbms]> exit
Bye

超市订单管理系统项目上线

cd /usr/local/tomcat/webapps/
mkdir /root/webapps.bak
mv * /root/webapps.bak/

然后我们把SMBMS目录里的WebRoot目录上传到/usr/local/tomcat/webapps/下:

[root@localhost webapps]# ls
WebRootvi /usr/local/tomcat/webapps/WebRoot/WEB-INF/classes/database.properties
driver=com.mysql.jdbc.Driver
#在和mysql传递数据的过程中,使用unicode编码格式,并且字符集设置为utf-8
url=jdbc:mysql://192.168.1.2:3306/smbms?useUnicode=true&characterEncoding=utf-8
user=zps
password=123456

/usr/local/tomcat/bin/shutdown.sh
/usr/local/tomcat/bin/startup.sh
systemctl restart mariadb

客户端访问测试项目二:

登录后如若访问不了,可以尝试重启tomcat
http://192.168.1.2:8080/WebRoot
账号密码是:



自定义jsp页面,并测试访问:

mkdir  -p /web/webapp/
cp -r /usr/local/tomcat/webapps/WebRoot/* /web/webapp/vi /web/webapp/index.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<html><head><title>JSP TEST PAGE1 </title></head><body><% out.println("Welcome to test site;http://www.zps.com");%></body>
</html>
vi  /usr/local/tomcat/conf/server.xml<Host name="www.zps.com"  appBase="webapps"unpackWARs="true" autoDeploy="true"><Context docBase="/web/webapp" path="" reloadable="false"></Context>


注解:
unpackWARs="true"                        ##设置自动识别war包
autoDeploy="true"                        ##开启自动部署
Context docBase="/web/webapp"            ##设置项目存放位置
path=""                              ## tomcat把web应用程序映射为root URI路径reloadable="true"

tomcat服务器在运行状态下会监视在WEB-INF/classes和WEB-INF/lib目录下class文件的改动,如果监测到代码中有class文件被更新的,服务器会自动重新加载Web应用,但是开启会加重服务器负荷,建议设置为false选项为关闭,有可能会出现内存溢出,tomcat服务不正常等异常,建议还是false掉,更新完代码脚本重启tomcat才是王道。

/usr/local/tomcat/bin/shutdown.sh
/usr/local/tomcat/bin/startup.sh

客户端访问测试:
http://www.zps.com/index.jsp


部署tomcat的虚拟主机,客户端访问测试

mkdir -p /web2/webapp/
cp /web/webapp/index.jsp /web2/webapp/
sed -i 's/zps/zps2/g' /web2/webapp/index.jsp[root@www ~]# grep zps /web/webapp/index.jsp <% out.println("Welcome to test site;http://www.zps.com");%>
[root@www ~]# grep zps2 /web2/webapp/index.jsp <% out.println("Welcome to test site;http://www.zps2.com");%>
vi /usr/local/tomcat/conf/server.xml<Host name="www.zps.com"  appBase="webapps"unpackWARs="true" autoDeploy="true"><Context docBase="/web/webapp" path="" reloadable="false"></Context></Host><Host name="www.zps2.com"  appBase="webapps"unpackWARs="true" autoDeploy="true"><Context docBase="/web2/webapp" path="" reloadable="false"></Context></Host></Engine></Service>
</Server>

 /usr/local/tomcat/bin/shutdown.sh/usr/local/tomcat/bin/startup.sh
vi /etc/hosts          ##修改主机名
192.168.1.2 www.zps.com
192.168.1.2 www.zps2.com

客户端访问测试:

修改客户端的hosts文件C:\Windows\System32\drivers\etc\hosts
192.168.1.2 www.zps.com
192.168.1.2 www.zps2.com

http://www.zps.com/index.jsp
http://www.zps2.com/index.jsp


注意:虽然更改了原有host,但是不影响/usr/local/tomcat/webapps下项目的访问


Tomcat应用部署及详解相关推荐

  1. Tomcat(二):tomcat配置文件server.xml详解和部署简介

    1. 入门示例:虚拟主机提供web服务 该示例通过设置虚拟主机来提供web服务,因为是入门示例,所以设置极其简单,只需修改$CATALINA_HOME/conf/server.xml文件为如下内容即可 ...

  2. Apache + Tomcat集群配置详解(1)

    Apache + Tomcat集群配置详解(1) 一.软件准备 Apache 2.2 : http://httpd.apache.org/download.cgi,下载msi安装程序,选择no ssl ...

  3. Docker持续部署图文详解

    2019独角兽企业重金招聘Python工程师标准>>> Docker持续部署图文详解 博客分类: docker 架构 JAVA项目如何通过Docker实现持续部署(只需简单四步),即 ...

  4. Sonic 开源移动端云真机测试平台 - 设备中心接入安卓设备实例演示,Agent端服务部署过程详解

    Sonic 开源移动端云真机测试平台 - Agent端服务部署与安卓设备接入演示 一加8手机连接效果图展示 第一章:环境准备 ① agent-sources 资源包下载 ② Android SDK安装 ...

  5. centos 安装mysql5.7_Zabbix 4.2.5 安装部署实践详解

    [导读]云计算背景下,无论是大数据.物联网还是边缘计算,规模化后大量的设备需要保证正常运行,在人员一定的情况下,就需要提高运行维护效率.同时随着智能化被应用在人们生活的方方面面,关联性也越来越紧密,即 ...

  6. MySQL8.0二进制免编译部署过程详解(二)

    一.背景介绍 本文主要介绍MySQL二进制免编译软件包的安装过程详解,之所以选择二进制安装包部署MySQL8.0,是因为官方版本已经内置所有功能,在安装的时候可以指定数据库安装路径. 目前官网MySQ ...

  7. Zabbix 4.2.5 安装部署实践详解

    一.安装 1.安装CentOS操作系统,并配置网络 2.安装Zabbix官方源 rpm -ivh http://repo.zabbix.com/zabbix/4.2/rhel/7/x86_64/zab ...

  8. OpenStack Redhat部署安装详解

    [资料] 社区OpenStack Queens版本部署安装详解 KeyStone配置详细解释 openstack之keystone部署 照着官网来安装openstack pike之创建并启动insta ...

  9. ubuntu 20.04 部署SS5详解

    ubuntu 20.04 部署SS5详解 前言 一.SS5部署前提? 二.部署步骤 1.更新软件包 2.ss5部署 常用命令 前言 提示:仅供交流学习,如有问题可以可以评论区留言: 提示:以下是本篇文 ...

最新文章

  1. 2008年1月19日 微软(北京).NET俱乐部 线下休闲活动-滑雪
  2. 前端学习(2700):重读vue电商网站21之如何导入全局样式表
  3. (44)Verilog HDL 计数器设计
  4. java的remove iterator_Java集合 iterator.remove()方法详解
  5. NodeJS仿WebApi路由
  6. 软件盘将dialog顶上去_Android dialog软键盘弹出顶起View
  7. react 打包体积过大_解决 webpack 打包文件体积过大
  8. 【Python】Webpy
  9. Linux入门及进阶学习推荐书籍
  10. Linux音乐相册代码,小年糕音乐相册制作下载-小年糕视频编辑appv1.5.8-Linux公社
  11. 【java】IDEA设置自己的名字和时间(Created by)
  12. 计算机专业854,精选-2017年哈工大计算机科学与技术专业854考研真题
  13. 统计学上的P值的含义通俗
  14. 系统分析师-资料总结-中
  15. matlab在概率统计中的应用
  16. echarts的series配置
  17. 智能代还行业怎么样?合法吗?代还APP开发靠谱吗?
  18. 2021秋招总结(内含笔试面试攻略)
  19. Apache服务器安装教程
  20. uniapp 下拉刷新

热门文章

  1. Flash + MediaPlayer 专题
  2. Nordic蓝牙nRF52840入门学习:Hello Word
  3. strncmp()详解
  4. 2-java安全——tomcat AJP协议文件包含分析[CVE-2020-1938]
  5. C#HttpHelper爬虫类源码分享--苏飞版
  6. 最小树形图-朱刘算法详解 +例题解析
  7. 【Android SDK 开发】随想录:开发一流Android SDK
  8. Golang之HTTP server 502问题分析
  9. 【原创醒目】终极之决战CSDN专家分【抢分醒目】
  10. Rank.eq函数使用