Tomcat源码阅读之使用IDEA构建Tomcat源码,以及Tomcat文件目录结构说明

web概念

本文构建好的Tomcat(含注释)gitee地址:点击

  • 软件架构

    • C/S: 客户端/服务器端 ‐‐‐‐‐‐‐‐‐‐‐‐> QQ , 360 …

    • B/S: 浏览器/服务器端 ‐‐‐‐‐‐‐‐‐‐‐‐> 京东, 网易 , 淘宝 , CSDN,博客园

  • 资源分类

    • 静态资源: 所有用户访问后,得到的结果都是一样的,称为静态资源。静态资源可以直接被浏览器解析。 如: html,css,JavaScript,jpg

    • 动态资源: 每个用户访问相同资源后,得到的结果可能不一样 , 称为动态资源。动态资源被访问后,需要先转换为静态资源,再返回给浏览器,通过浏览器进行解析。 如:servlet/jsp,php,asp....

  • 网络通信三要素

    • IP:电子设备(计算机)在网络中的唯一标识。

    • 端口:应用程序在计算机中的唯一标识。 0~65536

    • 传输协议:规定了数据传输的规则

      • 基础协议:

        • tcp : 安全协议,三次握手。 速度稍慢

        • udp:不安全协议。 速度快

常见的web应用服务器

概念

  • 服务器

    • 安装了服务器软件的计算机
  • 服务器软件

    • 接收用户的请求,处理请求,做出响应
  • web服务器软件

    • 接收用户的请求,处理请求,做出响应。

注意:在web服务器软件中,可以部署web项目,让用户通过浏览器来访问这些项目

常见的web服务器软件

  1. webLogic:oracle公司,大型的JavaEE服务器,支持所有的JavaEE规范,收费的。

  2. webSphere:IBM公司,大型的JavaEE服务器,支持所有的JavaEE规范,收费的。

  3. JBOSS:JBOSS公司的,大型的JavaEE服务器,支持所有的JavaEE规范,收费的。

  4. Tomcat:Apache基金组织,中小型的JavaEE服务器,仅仅支持少量的JavaEE规范servlet/jsp。开源的,免费的。

Tomcat历史

  1. Tomcat 最初由Sun公司的软件架构师 James Duncan Davidson 开发,名称为“JavaWebServer”。

  2. 1999年 ,在 Davidson 的帮助下,该项目于1999年于apache 软件基金会旗下的JServ 项目合并,并发布第一个版本(3.x), 即是现在的Tomcat,该版本实现了Servlet2.2 和 JSP 1.1 规范 。

  3. 2001年,Tomcat 发布了4.0版本, 作为里程碑式的版本,Tomcat 完全重新设计了其架构,并实现了 Servlet 2.3 和 JSP1.2规范。目前 Tomcat 已经更新到 9.0.x版本 , 但是目前企业中的Tomcat服务器, 主流版本还是7.x 和 8.x , 所以本课程是基于 8.5 版本进行讲解。

Tomcat安装

这里不多说,自行百度

Tomcat目录结构说明

Tomcat 的目录结构

Tomcat启动停止

启动

双击 bin/startup.bat 文件;

停止

双击 bin/shutdown.bat 文件;

访问

localhost:8080/项目名

Tomcat源码

作者推荐大家自己动手去构建Tomcat,若是觉得麻烦可以加clone该项目

源码下载

下载地址:https://tomcat.apache.org/download-80.cgi

运行

  • 解压zip压缩包

  • 进入解压目录,并创建一个目录,命名为home , 并将conf、webapps目录移入home 目录中

  • 在当前目录下创建一个 pom.xml 文件,引入tomcat的依赖包

pom文件内容如下:

<?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>Tomcat8.0</artifactId>
    <name>Tomcat8.0</name>
    <version>8.0</version>
 
    <build>
        <finalName>Tomcat8.0</finalName>
        <sourceDirectory>java</sourceDirectory>
<!--        <testSourceDirectory>test</testSourceDirectory>-->
        <resources>
            <resource>
                <directory>java</directory>
            </resource>
        </resources>
        <testResources>
           <testResource>
                <directory>test</directory>
           </testResource>
        </testResources>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>2.3</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>


  • 在idea中导入该工程(删除test测试文件夹)

  • 配置主启动类**org.apache.catalina.startup.Bootstrap**,VM参数为:

-Dcatalina.home=E:/ideaworkspace/Tomcat_sourceRead/apache-tomcat-8.5.66-src/home
-Dcatalina.base=E:/ideaworkspace/Tomcat_sourceRead/apache-tomcat-8.5.66-src/home 
-Djava.endorsed.dirs=E:/ideaworkspace/Tomcat_sourceRead/apache-tomcat-8.5.66-src/home/endorsed 
-Djava.io.tmpdir=E:/ideaworkspace/Tomcat_sourceRead/apache-tomcat-8.5.66-src/home/temp 
-Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager 
-Djava.util.logging.config.file=E:/ideaworkspace/Tomcat_sourceRead/apache-tomcat-8.5.66-src/home/conf/logging.properties 
-Duser.language=en -Duser.region=US -Dfile.encoding=UTF-8

  • 初始化Jsp解释器组件

    • 在tomcat的源码ContextConfig中的configureStart函数中手动将JSP解析器初始化(添加如下代码):
//初始化,引入下面一行代码
context.addServletContainerInitializer(new JasperInitializer(), null);

在这里插入图片描述

  • 启动并访问Tomcat

    • 直接浏览器地址栏输入:localhost:8080即可访问

在这里插入图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

five-five

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值