Tomcat服务器学习笔记

x33g5p2x  于2021-12-07 转载在 其他  
字(4.6k)|赞(0)|评价(0)|浏览(469)

首先展现一个图:

这就是Tomcat服务器的内部结构,最顶层的容器是Server,代表着整个服务器,整个 Tomcat 的生命周期由Server 控制,一个 Server 至少包含一个 Service(至于最多可以包含多少个 Service,一是看 Tomcat 本身的配置,二是看服务器的硬件配置是否能承载得了)

Service 又包含两个主要的部分:Connector 和 Container,这两个组件是 Tomcat 的心脏

Connector 用于接受请求并将请求封装成 Request 和 Response

Container 用于封装和管理 Servlet,以及处理具体的 Request 请求

接下来先说一下怎样部署一个项目:使用tomcat部署一个war包:

  • jar包:JAR包是类的归档文件,JAR 文件格式以流行的 ZIP 文件格式为基础。与 ZIP 文件不同的是,JAR 文件不仅用于压缩和发布,而且还用于部署和封装库、组件和插件程序,并可被像编译器和 JVM 这样的工具直接使用。

  • war包:war包是JavaWeb程序打的包,war包里面包括写的代码编译成的class文件,依赖的包,配置文件,所有的网站页面,包括html,jsp等等。一个war包可以理解为是一个web项目,里面是项目的所有东西。

首先讲解一下怎样将一个项目打包成war包:

如果是一个maven项目:只需要在pom.xml里面加入:

<modelVersion>4.0.0</modelVersion>
  <packaging>war</packaging>
  <name>MobilPhone</name>
  <groupId>org.example</groupId>
  <artifactId>MobilPhone</artifactId>
  <version>1.0-SNAPSHOT</version>

然后:

如果这不是一个maven项目:

1:使用快捷键Ctrl+Alt+Shift+s 或者 鼠标点击选中项目名按F4 打开 Project Structure界面

2:选择Artifacts,点击右边+,依次选择Web Application:Archive 和 For ‘myPro:war exploded’

3:[修改名称:可选] 和 注意 war输出的路径

4:点击下图红色箭头所指+图标,选择Directory Content,添加你的WebRoot目录,然后点击OK

5:在主界面选择Build – Build Artifacts,找到刚才需要打包的项目名点击build

部署项目的方式:

1:将项目打出的 war 包直接放到 tomcat/webapps 目录下,那么当 Tomcat 启动时,会自动将 .war 包解压

2:在 conf/context.xml 中进行独立的配置,可以增加如下元素:,启动 Tomcat 后,在浏览器中输入 http://localhost:8080/project/ 就能访问项目了。

3:在 Tomcat 中创建 conf/Catalina/localhost 目录,用项目名新建一个 xml 文件,例如 project.xml,然后在 project.xml 中加上类似于第二种方式的内容:<ContextdocBase="/usr/local/project" reloadbale=“true”>,启动 Tomcat 后,在浏览器中输入http://localhost:8080/project/ 就能访问项目了。

知识点讲解:网上有很多说第二种部署方法不是在 conf/context.xml 中而是在server.xml中的标签下面,下面简单讲解一下:

在tomcat 5.5之前:Context体现在/conf/server.xml中的Host里的元素,它由Context接口定义。每个元素代表了运行在虚拟主机上的单个Web应用。

元素:<Context path="/kaka" docBase="kaka" debug="0" reloadbale="true">

  • <1>path:即要建立的虚拟目录,,注意是/kaka,它指定访问Web应用的URL入口,如http://localhost:8080/kaka/****。

  • <2>docBase:为实际目录在硬盘上的位置(应用程序的路径或者是WAR文件存放的路径)。

  • <3>reloadable:如果这个属性设为true,Tomcat服务器在运行状态下会监视在WEB-INF/classes和Web-INF/lib目录CLASS文件的改变,如果监视到有class文件被更新,服务器自动重新加载Web应用,这样我们可以在不重起tomcat的情况下改变应用程序。

  • 一个Host元素中嵌套任意多的Context元素。每个Context的路径必须是惟一的,由path属性定义。另外,你必须定义一个path=“”的context,这个Context称为该虚拟主机的缺省web应用,用来处理那些不能匹配任何Context的Context路径的请求。

2. 在tomcat 5.5之后:

不推荐在server.xml中进行配置,而是在/conf/context.xml中进行独立的配置。因为server.xml是不可动态重加载的资源,服务器一旦启动了以后,要修改这个文件,就得重启服务器才能重新加载。而context.xml文件则不然,tomcat服务器会定时去扫描这个文件。一旦发现文件被修改(时间戳改变了),就会自动重新加载这个文件,而不需要重启服务器。

元素:

<Context path="/kaka" docBase="kaka" debug="0" reloadbale="true" privileged="true">  
  
<WatchedResource>WEB-INF/web.xml</WatchedResource>  
  
<WatchedResource>WEB-INF/kaka.xml</WatchedResource> 监控资源文件,如果web.xml || kaka.xml改变了,则自动重新加载改应用。  
  
<Resource name="jdbc/testSiteds" 表示指定的jndi名称  
    auth="Container" 表示认证方式,一般为Container  
    type="javax.sql.DataSource"  
    maxActive="100" 连接池支持的最大连接数  
    maxIdle="30" 连接池中最多可空闲maxIdle个连接  
    maxWait="10000" 连接池中连接用完时,新的请求等待时间,毫秒  
    username="root" 表示数据库用户名  
    password="root" 表示数据库用户的密码  
    driverClassName="com.mysql.jdbc.Driver" 表示JDBC DRIVER  
    url="jdbc:mysql://localhost:3306/testSite" /> 表示数据库URL地址  
  
</Context>

context.xml的三个作用范围:

  • 1. tomcat server级别:

在/conf/context.xml里配置。

  • 2. Host级别:

在/conf/Catalina/${hostName}里添加context.xml,继而进行配置。

  • 3. web app 级别:

在/conf/Catalina/h o s t N a m e 里 添 加 {hostName}里添加hostName里添加{webAppName}.xml,继而进行配置。

给 Tomcat 新增用户,实现输入用户名和密码进入应用管理界面:

打开 conf 目录下的 tomcat-users.xml,添加一行:<user username= "root" password= "root" roles="manager-gui"/>

禁用AJP:

修改conf下的server.xml文件,将AJP服务禁用掉即可

<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />

禁用前:

禁用后:

禁用后还可以访问

知识讲解:Tomcat HTTP协议与AJP协议

Tomcat在server.xml中配置了两种连接器。

HTTP Connector

拥有这个连接器,Tomcat才能成为一个web服务器,但还额外可处理Servlet和jsp。

AJP Connector

AJP连接器可以通过AJP协议和另一个web容器进行交互。

<!-- Define a non-SSL/TLS HTTP/1.1 Connector on port 8080 -->
<Connector port="8080" protocol="HTTP/1.1"
           connectionTimeout="20000"
           redirectPort="8443" />

<!-- Define an AJP 1.3 Connector on port 8009 -->
<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />

第一个连接器监听8080端口,负责建立HTTP连接。在通过浏览器访问Tomcat服务器的Web应用时,使用的就是这个连接器。

第二个连接器监听8009端口,负责和其他的HTTP服务器建立连接。在把Tomcat与其他HTTP服务器集成时,就需要用到这个连接器。AJP连接器可以通过AJP协议和一个web容器进行交互。

Web客户访问Tomcat服务器的两种方式:

AJP13是一个二进制的TCP传输协议,相比HTTP这种纯文本的协议来说,效率和性能更高,也做了很多优化。显然,浏览器并不能直接支持AJP13协议,只支持HTTP协议。所以实际情况是,通过Apache的proxy_ajp模块进行反向代理,暴露成http协议给客户端访问,主要应用场景就是动静分离时,两个服务器之间通信使用。

支持AJP协议的代理服务器可以用这种做法,但是支持AJP代理的服务器非常少,比如目前很火爆的Nginx就没这个模块。因此tomcat的配置大部分都是关闭AJP协议端口的,因为除了Apache之外别的http server几乎都不能反代AJP13协议,没太大用处了

相关文章

目录