tomcat学习笔记(一)

基本概念

B/S,C/S.网络通信三要素(ip,端口,网络协议)

  1. 静态资源:所有用户访问之后,得到的结果都是一样的,静态资源直接被服务器解析。如 css文件,js文件,图片
  2. 动态资源:每个用户访问相同的资源,得到的响应不一样。动态资源访问之后,需要先转换静态资源,在返回给浏览器进行解析

常见服务器(tomcat,Nginx)Jboss,webLogic,等等

tomcat主要目录

  1. bin 存放tomcat的启动,停止等批处理脚本文件
    1. startup.bat-启动脚本
    2. startdowm-服务停止脚本
  2. conf-存放tomcat的相关配置文件
    1. context.xml用于定义所有的web应用加载的context配置,如果web应用指定了自己的的context.xml,该文件将被覆盖
    2. logging.properties-tomcat的日志配置文件,可以通过修改tomcat的日志级别以及日志路径
    3. server.xml-tomcat服务器的核心配置文件
    4. tomcat-user.xml-定义tomcat默认的用户以及角色映射信息配置
    5. web.xml-tomcat中所有默认的部署文件,主要定义了基础servlet和mime映射

tomcat源码,idea打开

tomcat8.5源码
第一步解压
第二步:在源码文件夹中建立 home文件夹,并将 conf以及webapp文件夹移动到home文件夹下
在这里插入图片描述
第三步:新建pom.xml文件

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>org.apache.tomcat</groupId>
  <artifactId>apache‐tomcat‐8.5.69‐src</artifactId>
  <name>Tomcat8.5</name>
  <version>8.5</version>


  <build>
    <finalName>Tomcat8.5</finalName>

    <resources>
      <resource>
        <directory>java</directory>
      </resource>
    </resources>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-compiler-plugin</artifactId>
        <version>2.3.2</version>
        <configuration>
          <encoding>UTF‐8</encoding>
          <source>1.8</source>
          <target>1.8</target>
        </configuration>
      </plugin>
    </plugins>
  </build>


  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.12</version>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>org.easymock</groupId>
      <artifactId>easymock</artifactId>
      <version>3.4</version>
    </dependency>
    <dependency>
      <groupId>ant</groupId>
      <artifactId>ant</artifactId>
      <version>1.7.0</version>
    </dependency>
    <dependency>
      <groupId>wsdl4j</groupId>
      <artifactId>wsdl4j</artifactId>
      <version>1.6.2</version>
    </dependency>
    <dependency>
      <groupId>javax.xml</groupId>
      <artifactId>jaxrpc</artifactId>
      <version>1.1</version>
    </dependency>
    <dependency>
      <groupId>org.eclipse.jdt.core.compiler</groupId>
      <artifactId>ecj</artifactId>
      <version>4.5.1</version>
    </dependency>
  </dependencies>
</project>

第四步:新建一个空项目
把tomcat源码放进去
在这里插入图片描述

小问题
导入打开之后,idea没有识别是java文件。
按Ctrl+Shift+Alt+S
设置一下就好了
在这里插入图片描述
设置tomcat启动类
tomcat 启动类是在这个路径:org.apache.catalina.startup.Bootstrap
添加一个Application
在这里插入图片描述
vm 参数如下,到时候换成自己的路径

-Dfile.encoding=UTF-8
-Dcatalina.home=D:\sourceCode\tomcat_source_study\apache-tomcat-8.5.69-src\home
-Dcatalina.base=D:\sourceCode\tomcat_source_study\apache-tomcat-8.5.69-src\home
-Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager
-Djava.util.logging.config.file=D:\sourceCode\tomcat_source_study\apache-tomcat-8.5.69-src\home\conf\logging.properties

启动之后,访问127.0.0.1:8080
报错。
问题解决
在这个类中的org.apache.catalina.startup.ContextConfig的configureStart 方法中加入,让其初始jsp解析器

context.addServletContainerInitializer(new JasperInitializer(), null);

在这里插入图片描述
再次访问:
在这里插入图片描述

tomcat结构

http原理
在这里插入图片描述

  1. 用户通过浏览器发起一个请求
  2. 浏览器向服务器发起TCP连接请求
  3. 服务器接收请求,通过TCP三次握手进行连接,浏览器将访问数据打包成HTTP协议数据包
  4. 服务器拿到数据包,解析,进行处理
  5. 服务器将响应结果按照http协议格式进行打包

http请求处理
在这里插入图片描述
servlet流程
在这里插入图片描述

  1. 客户请求之后,http服务器用servletRequest对象将客户的请求信息封装起来,调用servlet容器的service方法
  2. servlet容器拿到请求之后,根据请求的url和servlet映射关系,找到对应的servlet
  3. 如果还没有加载servlet,利用反射机制进行加载-初始化(调用init方法)接着调用servlet的service方法处理请求
  4. 处理之后,返回servletResponse对象返回给http服务器,http服务器会吧响应发给客户端

tomcat整体架构
在这里插入图片描述

  1. 处理socket连接,负责网络字节流与Request和response对象的转化
  2. 加载和管理servelt,以及具体处理Request请求

连接器

在这里插入图片描述

  1. 连接器又名coyote,是连接器框架的名称,是tomcat服务器提供的供客户端访问的外部接口,
  2. 作用:封装底层的网络通信(socket)为catalina容器提供统一的接口,使catalina容器与具体的请求协议以及IO操作方式完全解耦。

在这里插入图片描述
容器Catalina
容器Catalina是servlet容器的实现,包含了之前讲到的所有容器组件,通过松耦合的方式集成(Coyote),已完成请求协议的数据读写
在这里插入图片描述
结构图
在这里插入图片描述
这个图的关系在源码体现:org.apache.catalina.Service

catalina-管理整个服务器。一个服务器有多个服务。每个服务有多个连接器和一个容器
各个组件的职责
在这里插入图片描述
container结构
在这里插入图片描述
各个组件的介绍
在这里插入图片描述
通过conf -server.xml看各个组件的一个层次关系
在这里插入图片描述
通过源码看
在这里插入图片描述
org.apache.catalina.Container
在这里插入图片描述

tomcat启动流程

在这里插入图片描述
可以结合,tomcat的bin文件夹下的 一些*.bat批处理脚本去看

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值