tomcat简介:

(1)Tomcat 服务器是一个免费的开放源代码的Web应用服务器,属于轻量级应用服务器,由java语言进行开发,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试JSP
程序的首选。对于一个初学者来说,可以这样认为,当在一台机器上配置好Apache
服务器,可利用它响应HTML(标准通用标记语言下的一个应用)页面的访问请求。实际上Tomcat是Apache
服务器的扩展,但运行时它是独立运行的,所以当你运行tomcat 时,它实际上作为一个与Apache 独立的进程单独运行的。
(2)tomcat是java 2 ee不完整的实现

tomcat与apache之间的关联。

(1)apache为html提供页面服务,而tomcat实际上运行jsp页面和servlet,
(2)Tomcat和IIS等Web服务器一样,具有处理HTML页面的功能,另外它还是一个Servlet和JSP容器,独立的Servlet容器是Tomcat的默认模式。不过,Tomcat处理静态HTML的能力不如Apache服务器

tomcat的核心组件。

catalina:servlet  container
coyote:http connection
jasper:jsp enginee
tomcat instance: 运行中的tomcat进程(java进程)
server:          即一个tomcat实列;
service:         用于将connector关联至engine组件,一个service只能包含一个engine组件
engine:          tomcat的核心组件,用于运行jsp或servlet代码;
connector:       接受并解析用户请求,将请求映射为engine中运行的代码;之后,将运行结果构建成响应报文
   http,ajp
host:            类似httpd中的虚拟主机。
context:         类似于httpd中的alias;

注意:每个组件都是由"类"来实现,有些组件的实现还不止一种。
顶级类组件:server
服务类组件:service
容器类组件:即可以部署webapp的组件,enginee,host,context
连接器组件:connector
被嵌套类组件:value,logger,realm

tomcat的运行模式

standalone:通过内置的web server (http connector)来接受客户端的请求;
proxy:由专门的web server服务客户端的httpd请求;
   in-process:部署于同一主机;
   network:部署于不同主机。

部署tomcat,官方站点:http://tomcat.apache.org
两种部署方式:

第一种:我们可以去官方下载tomcat的二次源码包,不用进行编译直接使用。
第二种:就是我们使用yum安装。

部署演示:根据第一种方案;

部署前提:安装jdk,因为我们的web程序在java虚拟机(JDK)上运行,而jdk上运行的是java类代码,所以中间需要一些代码转换,
[root@localhost yum.repos.d]# yum install java -y   
Loaded plugins: fastestmirror, refresh-packagekit, security
Loading mirror speeds from cached hostfile
 * base: mirrors.aliyun.com
 * extras: mirrors.aliyun.com
 * updates: mirrors.aliyun.com
a                                                                                                                         | 4.0 kB     00:00 ... 
Setting up Install Process
Resolving Dependencies
--> Running transaction check
---> Package java-1.5.0-gcj.x86_64 0:1.5.0.0-29.1.el6 will be installed
--> Processing Dependency: jpackage-utils >= 1.7.3 for package: java-1.5.0-gcj-1.5.0.0-29.1.el6.x86_64
--> Processing Dependency: sinjdoc for package: java-1.5.0-gcj-1.5.0.0-29.1.el6.x86_64
--> Running transaction check
---> Package jpackage-utils.noarch 0:1.7.5-3.16.el6 will be installed
---> Package sinjdoc.x86_64 0:0.5-9.1.el6 will be installed
--> Processing Dependency: java_cup >= 0.10 for package: sinjdoc-0.5-9.1.el6.x86_64
--> Running transaction check
---> Package java_cup.x86_64 1:0.10k-5.el6 will be installed
--> Finished Dependency Resolution

[root@localhost yum.repos.d]# java -version    检查java的目前版本。
java version "1.5.0"
gij (GNU libgcj) version 4.4.7 20120313 (Red Hat 4.4.7-23)

Copyright (C) 2007 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PUR

[root@localhost ~]# yum list all | grep jdk   检查相关jdk相关版本号
copy-jdk-configs.noarch                     3.3-9.el6                    base   
java-1.6.0-openjdk.x86_64                   1:1.6.0.41-1.13.13.1.el6_8   base   
java-1.6.0-openjdk-demo.x86_64              1:1.6.0.41-1.13.13.1.el6_8   base   
java-1.6.0-openjdk-devel.x86_64             1:1.6.0.41-1.13.13.1.el6_8   base   
java-1.6.0-openjdk-javadoc.x86_64           1:1.6.0.41-1.13.13.1.el6_8   base   
java-1.6.0-openjdk-src.x86_64               1:1.6.0.41-1.13.13.1.el6_8   base   
java-1.7.0-openjdk.x86_64                   1:1.7.0.261-2.6.22.1.el6_10  updates
java-1.7.0-openjdk-demo.x86_64              1:1.7.0.261-2.6.22.1.el6_10  updates
java-1.7.0-openjdk-devel.x86_64             1:1.7.0.261-2.6.22.1.el6_10  updates
java-1.7.0-openjdk-javadoc.noarch           1:1.7.0.261-2.6.22.1.el6_10  updates
java-1.7.0-openjdk-src.x86_64               1:1.7.0.261-2.6.22.1.el6_10  updates
java-1.8.0-openjdk.x86_64                   1:1.8.0.252.b09-2.el6_10     updates
java-1.8.0-openjdk-debug.x86_64             1:1.8.0.252.b09-2.el6_10     updates
java-1.8.0-openjdk-demo.x86_64              1:1.8.0.252.b09-2.el6_10     updates
java-1.8.0-openjdk-demo-debug.x86_64        1:1.8.0.252.b09-2.el6_10     updates
java-1.8.0-openjdk-devel.x86_64             1:1.8.0.252.b09-2.el6_10     updates
java-1.8.0-openjdk-devel-debug.x86_64       1:1.8.0.252.b09-2.el6_10     updates
java-1.8.0-openjdk-headless.x86_64          1:1.8.0.252.b09-2.el6_10     updates
java-1.8.0-openjdk-headless-debug.x86_64    1:1.8.0.252.b09-2.el6_10     updates
java-1.8.0-openjdk-javadoc.noarch           1:1.8.0.252.b09-2.el6_10     updates
java-1.8.0-openjdk-javadoc-debug.noarch     1:1.8.0.252.b09-2.el6_10     updates
java-1.8.0-openjdk-src.x86_64               1:1.8.0.252.b09-2.el6_10     updates
java-1.8.0-openjdk-src-debug.x86_64         1:1.8.0.252.b09-2.el6_10     updates
ldapjdk.x86_64                              4.18-8.el6                   base   
ldapjdk-javadoc.x86_64                      4.18-8.el6                   base   

[root@localhost ~]# yum install java-1.8.0-openjdk.x86_64  安装最新版jdk
Loaded plugins: fastestmirror, refresh-packagekit, security
Loading mirror speeds from cached hostfile
 * base: mirrors.aliyun.com
 * extras: mirrors.aliyun.com
 * updates: mirrors.aliyun.com
Setting up Install Process
Resolving Dependencies
--> Running transaction check
---> Package java-1.8.0-openjdk.x86_64 1:1.8.0.252.b09-2.el6_10 will be installed
--> Processing Dependency: java-1.8.0-openjdk-headless = 1:1.8.0.252.b09-2.el6_10 for package: 1:java-1.8.0-openjdk-1.8.0.252.b09-2.el6_10.x86_64
--> Processing Dependency: xorg-x11-fonts-Type1 for package: 1:java-1.8.0-openjdk-1.8.0.252.b09-2.el6_10.x86_64
--> Processing Dependency: libjvm.so(SUNWprivate_1.1)(64bit) for package: 1:java-1.8.0-openjdk-1.8.0.252.b09-2.el6_10.x86_64
--> Processing Dependency: libjli.so(SUNWprivate_1.1)(64bit) for package: 1:java-1.8.0-openjdk-1.8.0.252.b09-2.el6_10.x86_64
--> Processing Dependency: libjava.so(SUNWprivate_1.1)(64bit) for package: 1:java-1.8.0-openjdk-1.8.0.252.b09-2.el6_10.x86_64

(2)下载tomcat的二元分布,
apache-tomcat-9.0.36.tar.gz

[root@localhost ~]# tar -xf apache-tomcat-9.0.36.tar.gz -C /usr/local  解压tomcat到指定目录下。
[root@localhost ~]# cd /usr/local/
[root@localhost local]# ls
apache-tomcat-9.0.36  bin  etc  games  include  lib  lib64  libexec  mysql  mysql-5.5.62  sbin  share  src
[root@localhost local]# ln -sv apache-tomcat-9.0.36/ tomcat
`tomcat' -> `apache-tomcat-9.0.36/'
[root@localhost local]# ls
apache-tomcat-9.0.36  bin  etc  games  include  lib  lib64  libexec  mysql  mysql-5.5.62  sbin  share  src  tomcat
[root@localhost local]# cd tomcat/
[root@localhost tomcat]# ls
bin  BUILDING.txt  conf  CONTRIBUTING.md  lib  LICENSE  logs  NOTICE  README.md  RELEASE-NOTES  RUNNING.txt  temp  web
bin:脚本及启动时用到的类
lib:类库
conf:配置文件
logs:日志文件
webapps:应用程序默认部署目录
work:工作目录
temp:临时文件目录

[root@localhost tomcat]# ls
bin  BUILDING.txt  conf  CONTRIBUTING.md  lib  LICENSE  logs  NOTICE  README.md  RELEASE-NOTES  RUNNING.txt  temp  webapps  work
[root@localhost tomcat]# cd conf/
[root@localhost conf]# ls
Catalina         catalina.properties  jaspic-providers.xml  logging.properties  tomcat-users.xml  web.xml
catalina.policy  context.xml          jaspic-providers.xsd  server.xml          tomcat-users.xsd

server.xml:主配置文件
context.xml:每个webapp都可以有专用的配置文件,这些配置文件通常位于webapp应用程序目录下的web-inf目录中,用于定义会话管理器
,jdbc等;
conf/context.xml是为各webapp提供默认配置。
web.xml:每个webapp部署之后才能被访问,此文件则用于为所有的webapp提供默认部署相关的配置;
tomcat-user.xml:用户认证的账号和密码配置文件。
catalina.policy:当使用-security选项启动tomcat实列时会读取此配置文件来实现其安全运行策略;
catalina.properties:java属性的定义文件,用于设定类加载器路径等,以及一些jvm性能相关的调优参数;
logging.properties:日志相关的配置信息;

[root@localhost tomcat]# vim /etc/profile.d/tomcat.sh 
export CATALINA_HOME=/usr/local/tomcat   导入tomcat目录,将相关路径加入到PATH中。
export PATH=$CATALINA_HOME/bin:$PATH  

(3)运行catalina.sh脚本即可运行tomcat
[root@localhost tomcat]# bin/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
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

[root@localhost tomcat]# bin/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
Using CLASSPATH:       /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
Tomcat started.

注意:一般我们都是用普通用户运行tomcat,除非是1023端口之前必须要有root权限执行,所以tomcat运行端口为8080
[root@localhost conf]# ss -tnl | grep 8080
LISTEN     0      100                      :::8080                    :::*     
[root@localhost conf]# 

对tomcat进行访问,只是个tomcat中的应用程序。
在这里插入图片描述
tomcat启动成功后,我们手动来添加一个测试的应用程序。

webapps:这是应用程序的默认部署目录;

我们先来了解一下java webapp的组织架构;
有特定的组织形式,层次型的目录结构,主要包含了servlet代码文件,jsp页面文件,类文件,部署描述符文件等;
 /usr/local/tomcat/webapps/app1
       /:webapp的根目录;
      web-INF/:当前webapp的私有资源目录,通常存放在当前webapp自用的web.xml
      META-INF/:当前webapp的私有资源目录,通常存放在当前webapp自用的context.html;
      classes/:此webapp的私有类;
      lib/:此webapp的私有类,被打包为jar格式类;
      index.jsp:webapp的主页

webapp归档格式:
     - war:webapp;
     . jar:EJB的类
     .rar:资源适配器;
     .ear:企业及应用程序 

添加一个测试的应用程序;
[root@localhost webapps]# pwd
/usr/local/tomcat/webapps
[root@localhost webapps]# mkdir myapp/{lib,classes,WEB-INF,META-INF} -pv   
mkdir: created directory `myapp'
mkdir: created directory `myapp/lib'
mkdir: created directory `myapp/classes'
mkdir: created directory `myapp/WEB-INF'   在这两个文件中我们没有创建context.xml和web.xml文件,因为我们可以不创建到时候直接去默认/usr/local/apache-tomcat-9.0.36/conf目录下帮我们拉去那两个文件。
mkdir: created directory `myapp/META-INF'
[root@localhost webapps]# tree myapp/
myapp/
├── classes
├── lib
├── META-INF
└── WEB-INF
[root@localhost tomcat]# tree work/
work/
└── Catalina          这表示引擎,包装容器。
    └── localhost     本地主机
        ├── docs
        ├── examples
        ├── host-manager
        ├── manager
        ├── myapp    这表示程序的主目录
        │   └── org       
        │       └── apache        这三项表示将域名进行倒写
        │           └── jsp       
        │               ├── index_jsp.class    servlet代码编译成能在jdk虚拟机上运行类文件。
        │               └── index_jsp.java     将jsp格式的文件转换成纯java格式代码(servlet代码)
        └── ROOT
            └── org
                └── apache
                    └── jsp
                        ├── index_jsp.class
                        └── index_jsp.java

[root@localhost webapps]# vim myapp/index.jsp        
<%@ page language="java" %>
<%@ page import="java.util.*" %>
<html>
        <head>
                <title>JSP Test Page</title>    通过我们编写的jsp文件可知,html代码中嵌套jsp代码。
        </head>
        <body>
                <% out.println("hello,word."); %>
        </body>
</html>

添加成功后,我们可以验证,发现回应速度很快。
在这里插入图片描述

注意:我们访问的10.5.100.119:8080给我们呈现的主页面默认映射的为/usr/local/tomcat/webapps/ROOT目录下文件。

在这里插入图片描述

tomcat基本部署已经完成;
基本总结一下:
tomcat是一个应用程序服务器,开发人员使用java代码开发出应用程序。
当客户端进行访问应用程序时;经历几个步骤;我们tomcat有两种运行方式,一种是客户端直接与tomcat服务器交互,另一种通过web服务器进行代理。
第一种方式:web代理(nginx)
客户端发起请求----->web代理服务器---->connector连接器接受用户请求---->通过service关联至engine-----jspare将jsp类代码转换成Java类代码-----经过编译成为class类代码----->运行到tomcat里面。
Logo

CSDN联合极客时间,共同打造面向开发者的精品内容学习社区,助力成长!

更多推荐