概述:Tomcat是由Apache软件基金会下属的Jakarta项目开发的一个Servlet容器,按照Sun Microsystems提供的技术规范,实现了对Servlet和JavaServer Page(JSP)的支持,并提供了作为Web服务器的一些特有功能,如Tomcat管理和控制平台、安全域管理和Tomcat阀等。由于Tomcat本身也内含了一个HTTP服务器,它也可以被视作一个单独的Web服务器
相同点:
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运行
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是一个十分理想的选择
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环境
下载位置
Tomcat下载地址:Apache Tomcat® - Apache Tomcat 9 Software Downloads
jdk下载地址:Java 归档文件下载 - Java SE 8 (oracle.com)
解释:
Java SE(Java Platform,Standard Edition):Java SE 是做电脑上运行的软件
Java EE(Java Platform,Enterprise Edition):Java EE 是用来做网站的(我们常见的JSP技术)
Java ME(Java Platform,Micro Edition):Java ME 是做手机软件的
对应关系:
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 容器
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 是最底层的容器,它没有子容器了
应用层 | 应用层协议 | 说明 |
НТТP/1.1 | 这是大部分Web应用采用的访问协议 | |
AJP | 用于和WX集成(如Apache) ,以实现对静态资源的优化以及集群部署,当前支持AJP/1.3 | |
HТIP/2 | HTTP 2.0大幅度的提升了Web性能。下一代HTTP协议, 自8.5以及9.0版本之后支持 | |
传输层 | IO模型 | 说明 |
NIO | 非阻塞I/O,采用Java NIO类库实现非阻塞I/O,采用Java NIO类库实现 | |
NIO2 NIO2 | 异步I/O,采用JDK 7最新的NIO2类库实现 | |
APR | 采用Apache可移植运行库实现,是C/C++编写的本地库。如果选择该方案,需要单独安装APR库 |
应用层默认协议:HTTP/1.1
传输层默认IO模型:NIO
Tomcat的目录:
目录 | 说明 |
bin | 存放启动和关闭tomcat脚本 |
conf | 存放不同的配置文件(server.xml和web.xml) |
doc | 存放Tomcat文档 |
lib/japser/common | 存放Tomcat运行需要的库文件(JARS) |
logs | 存放Tomcat执行时的LOG文件 |
src | 存放Tomcat的源代码 |
webapps | Tomcat的主要Web发布目录(包括应用程序示例) |
work | 存放jsp编译后产生的class文件 |
conf目录中配置文件说明 | |
server.xml | Tomcat的主配置文件,包含Service, Connector, Engine, Realm, Valve, Hosts主组件的相关配置信息 |
web.xml | 遵循Servlet规范标准的配置文件,用于配置servlet,并为所有的Web应用程序提供包括MIME映射等默认配置信息 |
tomcat-user.xml | Realm认证时用到的相关角色、用户和密码等信息;Tomcat自带的manager默认情况下会用到此文件;在Tomcat中添加/删除用户,为用户 指定角色等将通过编辑此文件实现 |
catalina.policy | Java相关的安全策略配置文件,在系统资源级别上提供访问控制的能力 |
catalina.properties | Tomcat内部package的定义及访问相关控制,也包括对通过类装载器装载的内容的控制;Tomcat在启动时会事先读取此文件的相关设置 |
logging.properties | Tomcat6通过自己内部实现的JAVA日志记录器来记录操作相关的日志,此文件即为日志记录器相关的配置信息,可以用来定义日志记录的组 件级别以及日志文件的存在位置等 |
context.xml | 所有host的默认配置信息 |
tomcat请求过程:
tomcat server处理一个HTT请求的过程
tomcat中支持两种协议的连接器:HTTP/1.1与AJP/1.3
HTTP/1.1协议负责建立HTTP连接,web应用通过浏览器访问tomcat服务器用的就是这个连接器,默认监听的是8080端口
AJP/1.3协议负责和其他HTTP服务器建立连接,监听的是8009端口,比如tomcat和apache或者iis集成时需要用到这个连接器
系统 | 机器名称 | ip | 服务 |
CentOS Linux release 7.4.1708 | c7--10 | 192.168.2.10/24 | Tomcat |
先上传安装包 apache-tomcat-10.0.13.tar.gz jdk-8u91-linux-x64.tar.gz
[root@C7-10 ~]# ls
apache-tomcat-10.0.13.tar.gz jdk-8u91-linux-x64.tar.gz
[root@C7-10 ~]# tar zxvf jdk-8u91-linux-x64.tar.gz
..........
.....
..
jdk1.8.0_91/jre/README
jdk1.8.0_91/README.html
[root@C7-10 ~]# mv jdk1.8.0_91/ /usr/local/java
[root@C7-10 ~]# ls /usr/local/java/
bin db javafx-src.zip lib man release THIRDPARTYLICENSEREADME-JAVAFX.txt
COPYRIGHT include jre LICENSE README.html src.zip THIRDPARTYLICENSEREADME.txt
----下面直接复制粘贴
cat <>/etc/profile
export JAVA_HOME=/usr/local/java
export PATH=\$PATH:/usr/local/java/bin
END
----
[root@C7-10 ~]# source /etc/profile
[root@C7-10 ~]# java -version #查看java版本
java version "1.8.0_91"
Java(TM) SE Runtime Environment (build 1.8.0_91-b14)
Java HotSpot(TM) 64-Bit Server VM (build 25.91-b14, mixed mode)
这里安装的是tomcat 10.0.13版本
注意: 如要做下面的项目二尽量安装版本低一点的
[root@C7-10 ~]# tar zxvf apache-tomcat-10.0.13.tar.gz
................
..........
....
apache-tomcat-10.0.13/bin/startup.sh
apache-tomcat-10.0.13/bin/tool-wrapper.sh
apache-tomcat-10.0.13/bin/version.sh
[root@C7-10 ~]# mv apache-tomcat-10.0.13 /usr/local/tomcat
[root@C7-10 ~]# ls /usr/local/tomcat/
bin conf lib logs README.md RUNNING.txt webapps
BUILDING.txt CONTRIBUTING.md LICENSE NOTICE RELEASE-NOTES temp work
[root@C7-10 ~]# /usr/local/tomcat/bin/startup.sh #启动apache-tomcat服务
Using CATALINA_BASE: /usr/local/tomcat
Using CATALINA_HOME: /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/temp
Using JRE_HOME: /usr/local/java
Using CLASSPATH: /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
Using CATALINA_OPTS:
Tomcat started.
[root@C7-10 ~]# netstat -auptn|grep 8080
tcp6 0 0 :::8080 :::* LISTEN 14366/java
访问页面测试
安装mariadb数据库,提供数据库服务
[root@C7-10 ~]# yum install mariadb-server mariadb
...................
..........
.....
[root@C7-10 ~]# systemctl start mariadb
[root@C7-10 ~]# mysqladmin -uroot password 123
[root@C7-10 ~]# mysql -uroot -p123
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 2
Server version: 5.5.68-MariaDB MariaDB Server
Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
MariaDB [(none)]> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| test |
+--------------------+
4 rows in set (0.00 sec)
MariaDB [(none)]> quit
Bye
[root@C7-10 ~]# ping www.biadu.com #查看是否可以ping通外网
PING www.biadu.com (47.254.33.193) 56(84) bytes of data.
64 bytes from 47.254.33.193 (47.254.33.193): icmp_seq=1 ttl=50 time=185 ms
[root@C7-10 ~]# wget http://dev.mysql.com/get/mysql-community-release-el7-5.noarch.rpm
[root@C7-10 ~]# yum install mariadb-server mariadb #安装
已加载插件:fastestmirror
Loading mirror speeds from cached hostfile
* base: mirrors.aliyun.com
* extras: mirrors.aliyun.com
* updates: mirrors.aliyun.com
mariadb数据库的相关命令是:
systemctl start mariadb #启动MariaDB
systemctl stop mariadb #停止MariaDB
systemctl restart mariadb #重启MariaDB
systemctl enable mariadb #设置开机启动
[root@C7-10 ~]# systemctl start mariadb
[root@C7-10 ~]# mysqladmin -uroot password 123
[root@C7-10 ~]# mysql -uroot -p123
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 4
Server version: 5.5.68-MariaDB MariaDB Server
Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
MariaDB [(none)]> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| test |
+--------------------+
4 rows in set (0.00 sec)
MariaDB [(none)]> quit
Bye
[root@C7-10 ~]# vim /usr/local/tomcat/conf/tomcat-users.xml
..............
.........
..
-->
#添加定义的角色
#账户名:tomcat 密码:123
#默认在最后有
保存
[root@C7-10 ~]# vim /usr/local/tomcat/webapps/manager/META-INF/context.xml
............
.......
21 #修改 解释:允许其他所有主机访问
...
.
注意:allow默认是:127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1
[root@C7-10 ~]# /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/java
Using CLASSPATH: /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
Using CATALINA_OPTS:
[root@C7-10 ~]# /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/java
Using CLASSPATH: /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
Using CATALINA_OPTS:
Tomcat started.
进行测试:客户端访问manager管理界面(客户端启用停止项目、测试服务端状态查看)
输入之前设置的 用户名 :tomcat 密码:123
显示出:Tomcat Web 应用程序管理者就说明项目一实验成功了
如果:提示我们403 拒绝访问
[root@C7-10 ~]# vim /usr/local/tomcat/conf/Catalina/localhost/manager.xml
保存 添加以上内容
[root@C7-10 ~]# /usr/local/tomcat/bin/startup.sh
......
...
[root@C7-10 ~]# /usr/local/tomcat/bin/shutdown.sh
....
..
在进行访问测试
注意:如果出现401 说明你用户密码输入错误只要输入正确就可以了
注意:此次使用 apache-tomcat-8.5.16.tar.gz 版本
上传文件smbms_db.sql
[root@C7-10 ~]# ls
smbms_db.sql
[root@C7-10 ~]# mysql -uroot -p123 show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| smbms |
| test |
+--------------------+
5 rows in set (0.00 sec)
MariaDB [(none)]> grant all on smbms.* to 'aaa'@'192.168.2.10' identified by "123"; #给项目数据库授权
Query OK, 0 rows affected (0.01 sec)
MariaDB [(none)]> flush privileges;
Query OK, 0 rows affected (0.00 sec)
MariaDB [(none)]> use smbms;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Database changed
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]> 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 |
.................
...........
MariaDB [smbms]> exit
Bye
城市订单管理系统项目上线
[root@C7-10 ~]# cd /usr/local/tomcat/webapps/
[root@C7-10 webapps]# mkdir /root/webapps.bak
[root@C7-10 webapps]# mv * /root/webapps.bak/
[root@C7-10 webapps]# ls #上传 WebRoot 文件
WebRoot
[root@C7-10 webapps]# vim /usr/local/tomcat/webapps/WebRoot/WEB-INF/classes/database.properties
driver=com.mysql.jdbc.Driver
#在和mysql传递数据的过程中,使用unicode编码格式,并且字符集设置为utf-8
url=jdbc:mysql://192.168.2.10:3306/smbms?useUnicode=true&characterEncoding=utf-8 #修改地址为自己的192.168.2.10
user=aaa #设置为之前在数据库授权的用户名 aaa
password=123 #设置为之前在数据库授权的密码 123
保存退出
[root@C7-10 webapps]# /usr/local/tomcat/bin/shutdown.sh
.....
[root@C7-10 webapps]# /usr/local/tomcat/bin/startup.sh
.....
测试客户端访问项目二:http://192.168.2.10:8080/WebRoot
登录后如若访问不了,可以尝试重启tomcat
注意:如果出现用户名密码错误说明连接不上数据库需要查看数据库是否给用户aaa授权
准备网页
[root@C7-10 ~]# cd /usr/local/tomcat/webapps/
[root@C7-10 webapps]# mkdir benet biii
[root@C7-10 webapps]# vim benet/index.jsp
<%@ page language="java" contentType="text/html;charset=utf-8"
pageEncoding="utf-8"%>
192.168.2.10 www.benet.com 今天特别冷
保存
[root@C7-10 webapps]# vim biii/index.jsp
<%@ page language="java" contentType="text/html;charset=utf-8"
pageEncoding="utf-8"%>
www.biii.com 今天我没有看电视
保存
修改server.xml文件
[root@C7-10 webapps]# vim /usr/local/tomcat/conf/server.xml
........
....
........
....
保存
注意:在文件最后添加内容的上面添加
---##########---- HOST容器 介绍
---#####
name="www.benet.com" :虚拟主机的名称,Tomcat 通过在请求 URL 中的域名与 name 中的值匹配,用于查找能够处理该请求的虚拟主机。如果未找到则交给在 Engine 中 defaultHost 指定的主机处理
appBase="webapps" :此 Host 的 webapps目录,即指定存放 web 应用程序的目录的路径,默认指向 ROOT 目录下的 index.jsp
unpackWARs="true" :在启用此 webapps 时是否对 WAR 格式的归档文件先进行展开;默认为 true
autoDeploy="true" :在 Tomcat 处于运行状态时放置于 appBase 目录中的应用程序文件是否自动进行 部署,默认为 true ;开启自动部署
---#####
docBase="/usr/local/tomcat/webapps/benet" :设置项目存放路径
path="" :tomcat把web应用程序映射为root URI路径(相对路径)
reloadable="true" :在Tomcat运行时,如果WEB-INF/classes和WEB-INF/lib目录中有改变,Tomcat会自动重新加载该WEB应用,但是开启会加重服务器的负载(建议设置为false关闭),默认值为false,我们在调用可以打开,发布后再关闭;如果要更新可以更新完重启tomcat服务
[root@C7-10 webapps]# /usr/local/tomcat/bin/shutdown.sh
[root@C7-10 webapps]# /usr/local/tomcat/bin/startup.sh
中本机中修改hosts文件 192.168.2.10 www.benet.com www.biii.com
c7--10上修改hosts文件
[root@C7-10 webapps]# vim /etc/hosts
192.168.2.10 www.benet.com www.biii.com
测试访问:www.benet.com www.biii.com
......
......
<%@ page language="java" contentType="text/html;charset=utf-8"
pageEncoding="utf-8"%>