一,  首先我们来谈谈tomcat到底 什么,干什么用,为什么要使用tomcat

1) 先简单介绍下tomcat服务器

Tomcat 是一个java web 服务器,专门用来运行java程序的,同时也被为servlet容器(在下面说说什么是servlet容器),同时也是apache软件基金会的一个核心项目。它是由Java语言编写而成,目前已经出现了tomcat9.0测试版。

2)现在就谈谈tomcat 与Apache的区别和联系:

Apache是web服务器(主要做静态的解析:如 html ),tomcat是java应用服务器(主要做动态的解析,如JSP),tomcat 只是一个servlet容器,可以认为是apache的扩展,但是可以独立于apache运行。

两者的共同点是:

1,两者都是apache软件基金会的开源项目;

2,两者都有HTTP服务的功能;

3,  两者都是开源免费;

联系

1,apache是web服务器,本身只支持html即静态网页,可以通过插件支持php,还可以与Tomcat 连接(apache单向连接tomcat,就是说可以通过apache访问tomcat资源,反之不行)。

2,apache 和tomcat可以整合使用:

如果客户请求的是静态页面,则只需要apache服务器来处理请求就行,但是如果用户请求的是动态的页面,则可以通过tomcat服务器来进行处理,将解析的JSP的页面解析后返回传给Apache服务器,再经过apache返回给浏览器端。

3,apache 和tomcat是相互独立的,在同一台服务器上是可以集成的

区别

1,apache 是静态解析的web服务器,tomcat则是 动态解析web服务器。

2,apache不能解析java程序,而tomcat则可以。

3,打个比方:Apache是一辆卡车,上面可以装一些东西如html等。但是不能装水,要装水必须要有容器(桶),Tomcat就是一个桶(装像Java这样的水),而这个桶也可以不放在卡车上,可以相互之间独立。

3)我们看下tomcat本身的优点有哪些呢

1,免费

2,开源

3,支持最新标准

4,更新快

5,能很好地的支持跨平台

4)到这里对tomcat有了个简单的了解,就看看tomcat的工作原理

假设来自客户的请求为:
http://localhost:8080/yh/index.jsp

1) 请求被发送到本机端口8080,被在那里侦听的CoyoteHTTP/1.1 Connector获得
2) Connector把该请求交给它所在的Service的Engine来处理,并等待来自Engine的回应
3) Engine获得请求localhost/yh/index.jsp,匹配它所拥有的所有虚拟主机Host
4) Engine匹配到名为localhost的Host(即使匹配不到也把请求交给该Host处理,因为该Host被定义为该Engine的默认主机)
5) localhost Host获得请求/yh/index.jsp,匹配它所拥有的所有Context
6) Host匹配到路径为/yh的Context(如果匹配不到就把该请求交给路径名为""的Context去处理)
7) path="/yh"的Context获得请求/index.jsp,在它的mappingtable中寻找对应的servlet
8) Context匹配到URLPATTERN为*.jsp的servlet,对应于JspServlet类
9) 构造HttpServletRequest对象和HttpServletResponse对象,作为参数调用JspServlet的doGet或doPost方法
10)Context把执行完了之后的HttpServletResponse对象返回给Host
11)Host把HttpServletResponse对象返回给Engine
12)Engine把HttpServletResponse对象返回给Connector
13)Connector把HttpServletResponse对象返回给客户browser

 

5)还有比较重要的一点就是,都说tomcat是servlet容器,那到底什么是servlet容器呢,我们就来说说servlet容器到底是个什么东西。

1)容器的概念

就像我前面提到的,如果把java程序比作水的话,就需要有一个容器去装载它,tomcat就是这样一个容器,提供了java程序运行时需要的环境,所以说tomcat 是servlet容器。

2)容器的作用

Servlet容器的作用是负责处理客户请求,当客户请求来访问时,servlet容器获取请求,然后调用某个servlet,并把servlet的执行结果返回给客户。

3)servlet容器的工作过程是:

当客户端请求某个资源时,servlet容器使用servletRequest对象把客户端的请求信息封装起来,然后调用java  servlet API定义中的servlet 的一些生命周期的方法,完成servlet的执行,接着把servlet执行的要返回给客户的结果封装到servletResponse对象中,最后servlet容器把客户端的请求发送给客户,完成为客户的一次服务的过程,每一个servlert的类都执行init()、service()、destory() 三个函数的自动调用,在启动时调用一个init()函数用以进行参数的初始化,在服务期间每当接收到对servlet的请求时都会调用service()函数执行该servlet的服务操作,当容器销毁时调用一次destory()函数。

6)接下来就看看tomcat的安装

安装tomcat之前我们要先将jdk安装好,我这里就直接用centos7光盘里收录的openjdk1.8,这里建议直接使用yum安装

  1. 先yum安装jdk

yum -y  install  java-1.8.0-openjdk  java-1.8.0-openjdk-devel  java-1.8.0-openjdk-headless

安装好jdk以后可以用java –version来测试下,如图表示安装成功了

2.再yum安装tomcat
yum  –y  install tomcat tomcat-admin-webapps tomcat-libtomcat-doc-webapps tomcat-webapps

这里就介绍下这几个组件:

tomcat:这个就不用说,核心组件

tomcat-admin-webapps这个包用来管理应用程序的组件。

Description : The host-manager and managerweb applications for Apache Tomcat

tomcat-lib:这个是tomcat的库文件

Description : Libraries needed to run theTomcat Web container.

tomcat-doc-webapps:这是tomcat文档应用程序

tomcat-webapps:这个是自带web应用程序实例,如果不需要的话,可以不用装

Description : The ROOT and examples webapplications for Apache Tomcat.

3.安装好后,就用systemctl  start  tomcat,通过浏览器进行测试,如下

7)访问成功后,就介绍下它的目录结构和配置文件是用来干什么的,这样更有助于我们更容易理解tomcat,我们现在要做的就是一步一步去了解tomcat

/usr/share/tomcat :这个就是tomcat的安装路径,目录结构有:

bin:脚本、及启动时用到的类

conf:配置文件

lib:存放一些库文件

logs:日志文件目录

temp:存放临时文件目录

webapps:放应用程序的目录

work:存放正在工作的应用程序

tomcat的配置文件

server.xml:主配置文件

web.xml:每个webapp只有部署后才能被访问,它的部署方式通常由web.xml进行定义其存放位置为WEB-INF/目录中,此文件为所有的webapp提供默认的设置。

Context.xml:每个web都可以有专用的配置文件,它通常由专用的配置文件context.xml来定义,存放的位置为WEB-INF/目录中

tomcat-users.xml:这个文件,主要用作用户的认证和密码。

Catalina.properties:这个是java属性的定义文件,由于设定类加载器的路径,以及一些jvm的调优

Logging.properties:这个就是日志系统相关的配置。

8)现在tomcat已经处于运行的状态,下一步的问题就是怎样去部署web程序,在部署程序之前,我们得先进入tomcat的程序管理平台,这里我们就得用上tomcat-users.xml,点击登陆manager app 时,需要用户名和密码,如图

                             

我们则可以在tomcat-users.xml文件下,做如下的配置

就可以访问到

 

9)现在可以部署测试页面先测试下:

在tomcat安装目录/usr/share/tomcat/webapps下,创建一个test/index.jsp,前面说过webapps就是存放应用程序的,index.jsp测试页面如下图:

写完以后就可以重启tomcat了,然后在浏览器上访问

这叫冷部署,是生产上部署方式之一,就是把web程序复制到指定的位置后,重新启动tomcat,然后进行访问。

还有一种叫热部署:就是在不停止tomcat的前提下进行部署,并不建议此方法。

10)部署测试成功后,我们就看看tomcat虚拟主机的配置,配置虚拟主机的目的就是我们有可能会有这样的需求,在同一台服务器里,访问不同的域名,执行不同的程序 。实例如下

   假如我现在要测试的域名是b.com,第一步就是在自己的windows下hosts文件配置

如下:

这样访问的时候,才能解析到目标ip

第二步就是编辑/etc/tomcat/server.conf,配置如下

在Engine标签下加上一组host组件,图中appBase是存放应用程序的绝对路径,我在/user/test目录下创建了一个ROOT/index.jsp,如图

我把测试页面改成了helloyang, 现在就可以在浏览器上看测试效果了

这样虚拟主机的添加就完成了,完成后我们可以顺便测试一下tomcat的Context组件,

Context组件是定义上下文的,也就是说我们可以在虚拟主机的web目录下定义其他程序,实例如下:

假如我现在又要部署一个电商的应用程序,就把应用程序复制到web程序目录下,如图,部署程序时,最好使用软连接:ln  –sv  shop shopxx-v3.0-Beta

接着就去主配置文件里配置Context组件,如图:

配置完成后,访问浏览器http://b.com:8080/shop,如图

这样就更容易理解Context配置是干什么用的。

11)现在我们可以测试下LNMT的组合使用方法,其实都很简单,只要在前一台主机中的nginx主配置文件中,转发给tomcat主机就行了,实例如下:

172.16.3.1(nginx主机,主要做反向代理)

172.16.253.248(tomcat主机)

第一步就是在172.16.3.1主机中安装nginx

第二步就是在nginx主配置文件你nginx.conf配置反向代理,如图

配置完成后,在浏览器上访问测试http://172.16.3.1/test/ 如图

以上的配置是把所有的请求都给了172.16.253.248,如果要实现动静分离的就要做如下配置

意思就是只把jsp和do结尾的请求转发给后端

12)看了LNMT组合,在看看LAMT的组合

LAMT:linux   apache  mysql   tomcat

我们先看下httpd的代理的模块:

Proxy_module:这个是主代理模块

Proxy_httpd_module:这个是实现httpd协议的代理模块

Proxy_ajp_module:这个是实现ajp协议的代理模块

现在就可以用虚拟主机,就可以分别测试这两个协议的反代通信

第一步:先测试http协议的反代通信,首先安装httpd.然后在/etc/httpd/conf.d目录下创建http_tomcat.conf,配置如下:

第二步 重启httpd服务即可,测试如下http://172.16.3.1/

在看看aip协议实现,配置文件如下

启动http, 测试如下http://172.16.3.1/

说明两个协议通信正常,tomcat基础知识就写这么多了

转载于:https://blog.51cto.com/185113800/1842023

tomcat基础应用详解相关推荐

  1. Tomcat 6 --- JNDI详解

    JNDI(Java Naming and Directory Interface, Java命名和目录接口),说白了,就是通过配置一些xml文件,方便用户直接调用API使用某些通用的资源. 举个简单的 ...

  2. java基础(十三)-----详解内部类——Java高级开发必须懂的

    java基础(十三)-----详解内部类--Java高级开发必须懂的 目录 为什么要使用内部类 内部类基础 静态内部类 成员内部类 成员内部类的对象创建 继承成员内部类 局部内部类 推荐博客 匿名内部 ...

  3. Nmap扫描教程之基础扫描详解

    Nmap扫描教程之基础扫描详解 Nmap扫描基础扫描 当用户对Nmap工具了解后,即可使用该工具实施扫描.通过上一章的介绍,用户可知Nmap工具可以分别对主机.端口.版本.操作系统等实施扫描.但是,在 ...

  4. R语言基础知识详解及概括

    R语言基础知识详解及概括 目录 R语言基础知识详解及概括 R数据可视化示例 R语言进行数据创建

  5. R语言可视化绘图基础知识详解

    R语言可视化绘图基础知识详解 图形参数:字体.坐标.颜色.标签等: 图像符号和线条: 文本属性: 图像尺寸及边界: 坐标轴.图例自定义等: 图像的组合: #install.packages(c(&qu ...

  6. python命名空间和闭包_Python函数基础实例详解【函数嵌套,命名空间,函数对象,闭包函数等】...

    本文实例讲述了Python函数基础用法.分享给大家供大家参考,具体如下: 一.什么是命名关键字参数? 格式: 在*后面参数都是命名关键字参数. 特点: 1.约束函数的调用者必须按照Kye=value的 ...

  7. 计算机网络相关知识 参考博客 子网掩码怎么理解 网关及网关的作用 路由器基础知识详解

    子网掩码怎么理解 https://blog.csdn.net/farmwang/article/details/64132723 网关及网关的作用 https://blog.csdn.net/zhao ...

  8. python编程语法大全-Python编程入门——基础语法详解

    今天小编给大家带来Python编程入门--基础语法详解. 关于怎么快速学python,可以加下小编的python学习群:611+530+101,不管你是小白还是大牛,小编我都欢迎,不定期分享干货 每天 ...

  9. python编程语法-Python编程入门——基础语法详解

    今天小编给大家带来Python编程入门--基础语法详解. 一.基本概念 1.内置的变量类型: Python是有变量类型的,而且会强制检查变量类型.内置的变量类型有如下几种: #浮点 float_num ...

  10. python编程if语法-Python编程入门基础语法详解经典

    原标题:Python编程入门基础语法详解经典 一.基本概念 1.内置的变量类型: Python是有变量类型的,而且会强制检查变量类型.内置的变量类型有如下几种: #浮点 float_number = ...

最新文章

  1. php如何压缩txt文件怎么打开,PHP-压缩txt文件,同时保持文件扩展名
  2. 推荐系统笔记(内容推荐)
  3. 2021-10-21 二叉堆 恋上数据结构笔记
  4. Zero-Copysendfile浅析
  5. android id设计模式,Android与设计模式话题
  6. 【Linux】一步一步学Linux——chmod命令(110)
  7. ImageServiceImpl加@Service注解
  8. kotlin 查找id_Kotlin程序在矩阵中查找偶数和奇数的频率
  9. 冗余的阿里云实例开启和停止API
  10. Centos7 yum install chrome
  11. async/await剖析
  12. oracle集群数据库事务配置,在 .NET中使用Oracle数据库事务-安装配置-Oracle频道-中国IT实验室...
  13. JavaScript学习(七十)—函数中this的指向问题
  14. 好评率超高的几个硬核公众号,99%的程序员都关注了!
  15. 使用TestNG-xslt美化测试报告
  16. 树线段hdu 4508 美素数(线段树)
  17. Enterprise Library 2.0 Hands On Lab 翻译(15):加密应用程序块(二)
  18. 我的世界java作弊怎么开_我的世界怎么开作弊?如何启用作弊模式?
  19. 驱动开发笔记2—PAGED_CODE(),IRQL,分页内存
  20. 盛迈坤电子商务:网店有哪些营销活动

热门文章

  1. 1.2 文本表示——Emdedding
  2. Python模块 - itertools循环器模块
  3. cad画流程图的插件_如何用cad画交互流程图
  4. python中列表是什么类型_Python数据类型之列表
  5. mysql查看已打开文件数_[MySQL FAQ]系列 -- mysql如何计算打开文件数
  6. ug区域轮廓铣没有重叠距离_UG加工基本操作
  7. MySQL8.0.12 EXPLAIN EXTENDED 报错问题
  8. 虚幻4皮肤材质_虚幻4学习心得
  9. git安装后设置用户名和密码
  10. eclipse没有server选项怎么解决