tomcat简介
java与jdk
c/c++程序针对特定的硬件平台编译为cpu直接运行的二进制;而java程序面向的是jvm,由中间层jvm代为翻译为特定硬件平台的集群语言,通过中间层实现了write once, run anywhere
c/c++类的语言,需要自己针对不同硬件平台做对应修改,而java不需要,方便各平台之间的移植,适合大型程序,牺牲了一定效率,但减少了针对不同硬件平台的开发工作;
1、java程序执行过程
- java程序被java编译器javac编译为java字节码:.class文件;
- 字节码文件,再由java虚拟机jvm翻译为二进制的机器语言;
.java源码-》(经由javac编译)-》.class字节码文件-》(经由jvm执行)-》特定cpu能执行的二进制机器语言;
2、jvm、jre、jdk
- jvm是java虚拟机,负责将java字节码翻译成对应硬件平台的语言;
- jre,jvm+运行时依赖的库
- jdk,jvm+运行时依赖的库+开发调试工具
- jave se:java标准版,包含jdk
- jave ee:java企业版,java标准版基础上+企业应用用到的类库;
jsp与servlet
- applet:
- 早期,java实现web,是由客户端将程序下载到本机执行,1,不安全;
- 2,客户端需要java环境
- servlet
- 改进,servlet将应用程序放在服务端,客户端向服务端发请求,由服务端执行后返回结果,servlet的类库可以解析处理http协议
- 1,servlet方式:java应用代码和html代码组合在一起,组织方式较差
- 2,需要开发懂java和html
- jsp
- 再改进,jsp是继承了servlet类库的类库,但能够使得html和java代码结合较好
- 1,java代码嵌入到html代码,组合为.jsp文件,
- 2,通过jasper组件,再翻译为servlet代码执行
- 3,jsp本质还是servlet
- java程序进程
- 一个java程序进程需要一个jvm进程;java程序进程自己是线程的
- tomcat,利用servlet可以处理动态和静态请求,但为了效率,一般将静态请求前置到前端的静态web服务:httpd和nginx等
web服务器与应用程序服务器
- web服务器:一般指处理http协议,提供静态请求的服务;如httpd,nginx
- 应用程序服务器:一般指接收前面web转发来的动态请求,处理后交由web服务器,和静态内容一起封装后,返回给客户端;如tomcat、jboss、weblogic,php的有php-fpm等
tomcat体系结构
**tomcat组成:**jdk加上jsp和servlet类库实现的java ee;主要用于web应用开发;
- server:tomcat实例,定义服务监听端口
- service1,封装conector和container,
- connector1:连接器,接收客户端请求,转给container处理,并返回container处理后数据给客户端,【请求与响应的中转站,唯一出入口】
- connector2...
- container:【上级容器范围内唯一】包含4个子容器,用于分析、处理请求、构建响应给connector进而转给客户端
- engine:【唯一】定义servlet引擎,
- host:定义虚拟主机,类比nginx虚拟主机;
- context:定义webapp,一个context就是一个webapp,类比nginx的location,【如nginx有2个location分别为wordpress和discuz,分别配置后端tomcat的2个webapp为wordpress和discuz,】
- wrapper:【唯一】最底层的容器,负责管理一个servlet
- context:定义webapp,一个context就是一个webapp,类比nginx的location,【如nginx有2个location分别为wordpress和discuz,分别配置后端tomcat的2个webapp为wordpress和discuz,】
- host:定义虚拟主机,类比nginx虚拟主机;
- engine:【唯一】定义servlet引擎,
- service2
- service3
- ...
- service1,封装conector和container,
结构图如下:
<server> # 一个tomcat实例,就是一个server
<service> # 一个server内部,可以有多个service
<connector />
<connector />
... # 一个service内可以有多个connector
<engine> # 一个service内有唯一的engine
<host> # 一个engine内可有多个host---虚拟主机
<context> # 一个host可以有多个context
wrapper # 一个context唯一的一个wrapper
</context>
<context>
</contex>
</host>
<host>
</host>
</engine>
</service>
<service>
...
</service>
<service>
...
</service>
</server>
tomcat安装
安装jdk
jdk安装方法
jdk有2大版本,开源的openjdk,以及oracle公司的oraclejdk;
- 利用yum源,安装yum源中的openjdk
- 下载oracle官方的oraclejdk,直接用其rpm包安装;
tomcat自身是java程序,需要jdk环境支撑运行;即tomcat依赖jdk环境;
安装版本选择
- openjdk
- yum直接安装
- 官方rpm包安装
- oracle jdk
- 官方rpm包安装
实验采用,oraclejdk 8,tomcat 8.5
1,下载oracle官方的rpm包,直接安装即可
https://www.oracle.com/java/technologies/javase/javase-jdk8-downloads.html
[root@host2 src]# yum localinstall -y jdk-8u261-linux-x64.rpm
2,安装后目录
默认安装目录为/usr/java,通过2个软连接,可以方便实现版本的切换;版本为jdk8的第261次更新;
[root@host2 src]# cd /usr/java/
[root@host2 java]# ll
total 0
lrwxrwxrwx 1 root root 16 Sep 2 14:40 default -> /usr/java/latest
drwxr-xr-x 9 root root 286 Sep 2 14:40 jdk1.8.0_261-amd64
lrwxrwxrwx 1 root root 28 Sep 2 14:40 latest -> /usr/java/jdk1.8.0_261-amd64
[root@host2 default]# ll
total 25648
drwxr-xr-x 2 root root 4096 Sep 2 14:40 bin
-rw-r--r-- 1 root root 3244 Jun 18 14:55 COPYRIGHT
drwxr-xr-x 3 root root 132 Sep 2 14:40 include
-rw-r--r-- 1 root root 5219010 Jun 18 12:03 javafx-src.zip
-rw-r--r-- 1 root root 195 Jun 18 14:55 jmc.txt
drwxr-xr-x 6 root root 198 Sep 2 14:40 jre
drwxr-xr-x 4 root root 31 Sep 2 14:40 legal
drwxr-xr-x 4 root root 223 Sep 2 14:40 lib
-rw-r--r-- 1 root root 44 Jun 18 14:55 LICENSE
drwxr-xr-x 4 root root 47 Sep 2 14:40 man
-rw-r--r-- 1 root root 159 Jun 18 14:55 README.html
-rw-r--r-- 1 root root 424 Jun 18 14:55 release
-rw-r--r-- 1 root root 21005583 Jun 18 14:55 src.zip
-rw-r--r-- 1 root root 190 Jun 18 12:03 THIRDPARTYLICENSEREADME-JAVAFX.txt
-rw-r--r-- 1 root root 190 Jun 18 14:55 THIRDPARTYLICENSEREADME.txt
# 查看版本信息;
[root@host2 java]# java -version
java version "1.8.0_261"
Java(TM) SE Runtime Environment (build 1.8.0_261-b12)
Java HotSpot(TM) 64-Bit Server VM (build 25.261-b12, mixed mode)
3,配置java_home等环境变量
# 安装后即可以找到java命令的原因,安装过程中自动做了软链接到默认PATH路径下
[root@host2 default]# which java
/usr/bin/java
[root@host2 default]# ll /usr/bin/java
java javadoc javah javapackager javaws
javac javafxpackager javap java-rmi.cgi
[root@host2 default]# ll /usr/bin/java
lrwxrwxrwx 1 root root 22 Sep 2 14:40 /usr/bin/java -> /etc/alternatives/java
[root@host2 default]# ll /etc/alternatives/java
lrwxrwxrwx 1 root root 37 Sep 2 14:40 /etc/alternatives/java -> /usr/java/jdk1.8.0_261-amd64/bin/java
# 配置变量
[root@host2 default]# cat /etc/profile.d/java.sh
export JAVA_HOME=/usr/java/latest
export PATH=$JAVA_HOME/bin/:$PATH
[root@host2 default]# source /etc/profile.d/java.sh
[root@host2 default]# which java
/usr/java/latest/bin/java
安装tomcat
1,下载官网8.5版本的最新二进制版本,在安装jdk后,解压,做软链接
[root@host2 src]# tar -xf apache-tomcat-8.5.57.tar.gz -C /usr/local/
[root@host2 src]# ll /usr/local/
total 0
drwxr-xr-x 9 root root 220 Sep 2 14:56 apache-tomcat-8.5.57
drwxr-xr-x. 2 root root 6 Apr 11 2018 bin
drwxr-xr-x. 2 root root 6 Apr 11 2018 etc
drwxr-xr-x. 2 root root 6 Apr 11 2018 games
drwxr-xr-x. 2 root root 6 Apr 11 2018 include
drwxr-xr-x. 2 root root 6 Apr 11 2018 lib
drwxr-xr-x. 2 root root 6 Apr 11 2018 lib64
drwxr-xr-x. 2 root root 6 Apr 11 2018 libexec
drwxr-xr-x. 2 root root 6 Apr 11 2018 sbin
drwxr-xr-x. 5 root root 49 Aug 8 11:58 share
drwxr-xr-x. 2 root root 72 Sep 2 14:39 src
[root@host2 src]# ln -sv /usr/local/apache-tomcat-8.5.57/ /usr/local/tomcat
‘/usr/local/tomcat’ -> ‘/usr/local/apache-tomcat-8.5.57/’
2,程序目录
[root@host2 src]# ll /usr/local/tomcat/
total 124
drwxr-x--- 2 root root 4096 Sep 2 14:56 bin # 启停脚本,有linux平台的.sh脚本,也又windows平台的.bat脚本
-rw-r----- 1 root root 19318 Jul 1 05:53 BUILDING.txt
drwx------ 2 root root 238 Jul 1 05:53 conf
-rw-r----- 1 root root 5408 Jul 1 05:53 CONTRIBUTING.md
drwxr-x--- 2 root root 4096 Sep 2 14:56 lib
-rw-r----- 1 root root 57011 Jul 1 05:53 LICENSE
drwxr-x--- 2 root root 6 Jul 1 05:49 logs # 日志目录
-rw-r----- 1 root root 1726 Jul 1 05:53 NOTICE
-rw-r----- 1 root root 3255 Jul 1 05:53 README.md
-rw-r----- 1 root root 7136 Jul 1 05:53 RELEASE-NOTES
-rw-r----- 1 root root 16262 Jul 1 05:53 RUNNING.txt
drwxr-x--- 2 root root 30 Sep 2 14:56 temp # 临时目录
drwxr-x--- 7 root root 81 Jul 1 05:50 webapps # 放web程序的根目录
drwxr-x--- 2 root root 6 Jul 1 05:49 work # 存放编译后的class文件的目录
3,启停脚本
bin下的catalina.sh可以管理tomcat的启停
[root@host2 bin]# ./catalina.sh -h
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
...
[root@host2 bin]# ./catalina.sh start
# 监听在8080端口
4,conf配置文件
[root@host2 tomcat]# ll conf/
total 224
drwxr-x--- 3 root root 23 Sep 2 15:04 Catalina
-rw------- 1 root root 13446 Jul 1 05:53 catalina.policy
-rw------- 1 root root 7661 Jul 1 05:53 catalina.properties
-rw------- 1 root root 1338 Jul 1 05:53 context.xml
-rw------- 1 root root 1149 Jul 1 05:53 jaspic-providers.xml
-rw------- 1 root root 2313 Jul 1 05:53 jaspic-providers.xsd
-rw------- 1 root root 3916 Jul 1 05:53 logging.properties
-rw------- 1 root root 7588 Jul 1 05:53 server.xml
# 主配置文件
-rw------- 1 root root 2164 Jul 1 05:53 tomcat-users.xml
# 监控界面用户登陆认证配置
-rw------- 1 root root 2558 Jul 1 05:53 tomcat-users.xsd
-rw------- 1 root root 171879 Jul 1 05:53 web.xml
# webapp提供默认属性配置文件,启动tomcat时,会先找对应webapp目录下的/WEB-INF/web.xml文件加载属性信息,找不到的话,会利用该文件做默认配置,
# web.xml文件定义了默认页面
[root@host2 tomcat]# grep -C 1 index conf/web.xml
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
5,设置环境变量
|
|
6,检查版本信息
[root@host2 tomcat]# version.sh
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
Server version: Apache Tomcat/8.5.57
Server built: Jun 30 2020 21:49:10 UTC
Server number: 8.5.57.0
OS Name: Linux
OS Version: 3.10.0-862.el7.x86_64
Architecture: amd64
JVM Version: 1.8.0_261-b12
JVM Vendor: Oracle Corporation
7,启动测试
[root@host2 tomcat]# 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.
# 默认监听8080端口
# 以及8005,管理端口;
[root@host2 tomcat]# curl -I http://localhost:8080
HTTP/1.1 200
Content-Type: text/html;charset=UTF-8
Transfer-Encoding: chunked
Date: Wed, 02 Sep 2020 07:23:06 GMT