Tomcat学习笔记(史上最全tomcat学习笔记)
发布于 2019-10-24    786 次阅读
Tomcat学习笔记(史上最全tomcat学习笔记) tomcat介绍 Tomcat是Apache 软件基金会(Apache Software Foundation)的Jakarta 项目中的一个核心项目,由Apache、Sun 和其他一些公司及个人共同开发而成。 Tomcat 服务器是一个免费的开放源代码的Web 应用服务器,属于轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍...

Tomcat学习笔记(史上最全tomcat学习笔记)

tomcat介绍

  • Tomcat是Apache 软件基金会(Apache Software Foundation)的Jakarta 项目中的一个核心项目,由Apache、Sun 和其他一些公司及个人共同开发而成。

  • Tomcat 服务器是一个免费的开放源代码的Web 应用服务器,属于轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试JSP 程序的首选。

  • 对于一个初学者来说,可以这样认为,当在一台机器上配置好Apache 服务器,可利用它响应HTML(标准通用标记语言下的一个应用)页面的访问请求。

  • 实际上Tomcat是Apache 服务器的扩展,但运行时它是独立运行的,所以当你运行tomcat 时,它实际上作为一个与Apache 独立的进程单独运行的。诀窍是,当配置正确时,Apache 为HTML页面服务,而Tomcat 实际上运行JSP 页面和Servlet。

  • 另外,Tomcat和IIS等Web服务器一样,具有处理HTML页面的功能,另外它还是一个Servlet和JSP容器,独立的Servlet容器是Tomcat的默认模式。不过,Tomcat处理静态HTML的能力不如Apache服务器。

Web基础

c/s与b/s架构

  • C/S ,Client/Server,就是客户端与服务器,顾名思义,用户需要安装相应的客户端才能运行,典型的如QQ,微信。

优点:减轻服务端的处理压力,运算速度快,对客户端响应快

缺点:版本升级成本高,每次升级必须先卸载老版本在升级

  • B/S,Browser/Server,浏览器/服务器,本质上来说也是cs架构,只不过client变成了browser而已。

优点:不存在客户端升级问题,只需要升级服务端程序即可。

缺点:具体业务的处理压力,全部加载了服务端,导致服务端程序运算速度降低,响应速度降低,用户体验差。

web中的三大协议四大角色

  • 三大协议
  • HTTP协议

  • Servlet协议

  • JDBC协议

  • 四大角色
  • 浏览器

  • web服务器

  • 服务器端程序

  • db(数据库)

Tomcat下载

  • 下载地址

  • 请根据自己需求和电脑系统下载相应版本,建议Source Code Distributions源码也下载,方便后续研究

Tomcat的运行环境与配置

  • tomcat需要安装jdk和jre,对于tomcat5及以前的版本,要求必须安装jdk,而tomcat6及以后的版本只需要安装jre。这里怎么安装jdk和jre就不讲了。

  • 只需要在系统环境变量中设置JAVA_HOME后,将其java的bin目录添加到path变量即可。

Tomcat的启动与访问

  • 打开bin目录下的startup.bat即可启动,打开shutdown.bat即可关闭
  • 如果java环境变量没有正确配置,则可能出现闪退情况,请按要求正确配置java环境变量即可

  • 如遇控制台中文乱码情况,9版本以下的在tomcat中conf里面的server.xml,在Connector中加上


URIEncoding="UTF-8" 

还是不行的在tomcat的bin目录下的catalina.bat加如下一条语句


set JAVA_OPTS=-Xms512m -Xmx1024m -XX:MaxPermSize=1024m -Dfile.encoding=UTF-8  

项目结构

  • 项目文件所在目录直接放项目资源文件

  • WEB-INF

    • classes中放servlet编译好的字节码文件

    • lib放中放使用的jar包

    • web.xml是配置文件,定义请求url和所访问的内容与Servlet间的映射关系,可以指定欢迎页面等

实战手工创建和打包第一个web工程

  • 首先准备好自己的web工程,我这里使用的是之前写的代码,传送门

  • 然后将整个项目文件放在webapps目录下

  • 启动tomcat服务器,通过浏览器正常访问

  • 将webapps中项目删除,控制台中进入项目目录

  • 输入命令


jar -cvf d:\xxx\xxx.war .

  • cvg是命令参数,表示生成一个文档、显示生成过程、指定生成的文件名,xxx为打包后要存放的路径和打包后的文件名,根据自己需求修改,注意,最后需输入一个空格在加一个'.',代表打包该目录下所有文件。

解读tomcat核心源码

  • Tomcat的核心配置

    • tomcat的核心配置都在conf\server.xml文件中,其核心结构示意图如下图所示:
  • 一个server服务器可以有多个service服务,每个服务都是由engine引擎提供的,每个引擎中可以多台主机或者虚拟主机,如localhost和virtual host,localhost中又可以包含多个context应用,engine引擎通过connector连接器使得浏览器可以访问服务器。
  • Service.xml内容的解读

    • 源码图
  • 从源码图的代码结构中正好印证了上图的tomcat核心结构图,这里只有一个service服务,name为Catalina,

  • 有两个connector,第一个端口为8080,协议是HTTP/1.1,20000ms的延迟,重定向端口为8443,uri编码为utf-8,所以这也就是为什么是开头所说的通过浏览器访问http://localhost:8080的原因了,所以当8080端口被占用时,可以在此修改端口(注意,当应用上线时,必须将端口号 改为80,因为浏览器发出的HTTP请求的默认端口为80端口);第二个connector较为简单,就不分析了。

  • 同时,这个server服务器里有一个engine引擎,name为Catalina,默认端口就是localhost。

  • 接下来是非常重要的地方,请看下图,我们看到engine里面有一个host主机,name为localhost,appBase为webapps,看到这里我想大家也就明白了为什么之前要把项目文件放在webapps中了,再往下看,unpackWARs为true,这个属性的意思是自动解压war包,autoDeploy为true代表着当开启tomcat服务器项目就会自动部署上线,所以在这里可以根据实际生产需求去改变它。

创建虚拟目录

方法一:配置service.xml文件

  • 根据tomcat核心结构图,我们知道,只需要在host主机中添加一个context应用,指定他的path和docBase即可。

<Context path="/xxx", docBase="x:/xx/xx"/>

  • path:当前主机域名访问该应用的uri

  • docBase:当前应用目录所在的真实路径

  • 弊端:若采用修改service.xml方法创建虚拟目录,则每次修改都要重新启动tomcat服务器,对正在运行的项目会造成不可估量的影响。

方法二: 在localhost中添加配置

  • 每当我们启动tomcat时,他会默认的在我们的conf目录下生成一个名为Catalina的引擎,里面有名为localhost的主机,我们只需要在localhost中添加相关配置文件即可。
  • 需要注意的是, 添加的配置文件名字即为path,所以不需要再额外指定path路径,只需要指定docBase即可。最后只需要在浏览器中输入http://localhost:8080/xxx即可访问。

<Context, docBase="x:/xx/xx"/> 

  • 使用该方法的优点是他会自动部署用户配置的文件,不需要重启tomcat服务器。

创建虚拟主机

域名解析服务DNS

  • DNS,Domain Name Service,域名解析服务,就是将域名与ip进行映射的服务,而提供这种服务的服务器叫做DNS服务器。

  • 之所以我们能通过域名localhost访问本机,是因为windows本身也可以作为DNS服务器,我们能通过http://localhost:8080/访问本机,正是因为在C:\Windows\System32\drivers\etc目录下的hosts文件中配置了域名和ip地址,请看:


#    localhost name resolution is handled within DNS     itself.

#    127.0.0.1       localhost

#    ::1             localhost

虚拟主机的创建

  • 所以,创建虚拟主机,我们只需要在service.xml配置文件engine里面新增加一个host主机即可。

    <Engine name="Catalina" defaultHost="localhost">

      <Host name="virtualHost"  appBase="newWebapps"

            unpackWARs="true" autoDeploy="true">

      </Host>

    ......

    </Engine>

  • name:代表当前主机的域名,这里我们将它取为virtualHost,

  • appBase:代表该域名下的应用存放在哪个目录,这里我指定为newWebapps

  • 修改完service.xml配置文件后,重启tomcat服务器

  • 修改本地主机hosts文件后如下图(注意不要在前面加#):

  • 在浏览器中输入http://virtualHost:8080/xxx (xxx为你的项目文件,放在newWebapps中)

  • 浏览器会先对本机上hosts文件进行DNS解析,如果没有找到,则去网络服务商(联通、电信)公司提供的DNS服务器上寻找该域名,如果还没有找到则会去更高级的DNS服务器上寻找,直到找到该域名为止;如果找不到,则浏览器会提示“域名解析错误“

  • 思考,此时hosts文件中ip:127.0.0.1映射多个域名,当我们在浏览器中输入127.0.0.1:8080时,他会返回谁呢?

  • 其实这跟我们service.xml中的配置相关。

  • 请看这句代码:


  <Engine name="Catalina" defaultHost="localhost">

  • 很显然这里引擎指定了默认主机为localhost,所以当你输入127.0.0.1:8080时,浏览器会默认返回主机为localhost中的contex应用内容。

ManagerApp

  • 当我们的项目非常多的时候,我们不可能一个一个的在浏览器地址栏输入项目名称去访问,这样会很麻烦,这时候就需要用到ManagerApp来把所有项目列出来了。
  • 第一步访问http://localhost:8080/,点击managerApp

  • 第二步输入用户名密码。用户名密码需要在 conf/tomcat-users.xml 中设置,添加以下代码即可。


<role rolename="manager-gui"/>

<user username="tomcat" password="s3cret" roles="manager-gui"/>

  • 其中不要修改

<role rolename="manager-gui"/>

  • 只需要修改username和password即可。

<user username="tomcat" password="s3cret" roles="manager-gui"/>

  • 最后重启tomcat,登录,即可看到当前localhost下所有的应用内容。

版权说明 : 本文为转载文章, 版权为原作者所有

原文标题 : Tomcat学习笔记(史上最全tomcat学习笔记)

原文连接 : https://www.jianshu.com/p/fdf054a30bbd