How Tomcat Works(十四)】的更多相关文章

Servlet容器有两个主要的模块,即连接器(connector)与容器(container),本文接下来创建一个连接器来增强前面文章中的应用程序的功能,以一种更优雅的方式来创建request对象和response对象;为了兼容Servlet 2.3和2.4,连接器这里创建的是javax.servlet.http.HttpServletRequest对象和javax.servlet.http.HttpServletResponse对象(servlet对象类型可以是实现javax.servlet.…
 在第4章中将通过剖析Tomcat4的默认连接器的代码,讨论需要什么来创建一个真实的Tomcat连接器.     注意:本章中提及的“默认连接器”是指Tomcat4的默认连接器.即使默认的连机器已经被弃用,被更快的,代号为Coyote的连接器所代替,它仍然是一个很好的学习工具.     Tomcat连接器是一个可以插入servlet容器的独立模块,已经存在相当多的连接器了,包括Coyote, mod_jk, mod_jk2和mod_webapp.一个Tomcat连接器必须符合以下条件: 1. 必…
在How Tomcat Works(十四)中,本人并没有对javax.servlet.Filter及javax.servlet.FilterChain做详细的描述,本文在这里做一下补充 FilterChain接口只有一个方法,方法声明如下: public void doFilter ( ServletRequest request, ServletResponse response ) throws IOException, ServletException; 在tomcat中,org.apac…
我们已经知道,在tomcat中有四种类型的servlet容器,分别为Engine.Host.Context 和Wrapper,本文接下来对tomcat中Wrapper接口的标准实现进行说明. 对于每个引入的HTTP请求,连接器都会调用与其关联的servlet容器的invoke()方法:然后,servlet容器会调用所有子容器的invoke()方法 这里面的流程通常是servlet容器调用其管道对象的invoke()方法,其管道对象的invoke()方法最后调用其基础阀,管道对象的基础阀里面会调用…
在前面的文章中,如果我们要启动tomcat容器,我们需要使用Bootstrap类来实例化连接器.servlet容器.Wrapper实例和其他组件,然后调用各个对象的set方法将它们关联起来:这种配置应用程序的方法有一个明显的缺陷,即所有的配置都必须硬编码.调整组件配置和属性值都必须要重新编译Bootstrap类.幸运的是,Tomcat的设计者使用了一种更加优雅的配置方式,即使用一个名为server.xml的XML文件来对应用程序进行配置.server.xml文件中的每个元素都会转换为一个java…
要使用一个web应用程序,必须要将表示该应用程序的Context实例部署到一个host实例中.在tomcat中,context实例可以用war文件的形式来部署,也可以将整个web应用拷贝到Tomcat安装目录下的webapp下.对于部署的每个web应用程序,可以在其中包含一个描述文件(该文件是可选的),该文件中包含了对context的配置选项,是xml格式的文件.注意,tomcat4和tomcat5使用两个应用程序来管理tomcat及其应用的部署,分别是manager应用程序和admin应用程序…
本文重点关注启动tomcat时会用到的两个类,分别为Catalina类和Bootstrap类,它们都位于org.apachae.catalina.startup包下:Catalina类用于启动或关闭Server对象,并负责解析server.xml配置文件:Bootstrap类是一个入口点,负责创建Catalina实例,并调用其process()方法. org.apachae.catalina.startup.Catalina类是启动类,它包含一个Digester对象,用于解析位于%CATALIN…
上一节说到StandardService负责启动其子组件:container和connector,不过注意,是有先后顺序的,先启动container,再启动connector,这一节先来看看container. 目录 Pipeline和Vavle StandardEngine类和StandardHost类 StandardContext类 总结 Pipeline和Vavle 在第二节(How Tomcat works — 二.tomcat启动(1))中没有介绍关于Pipeline和Vavle,因…
本文接下来会介绍Host容器和Engine容器,在tomcat的实际部署中,总是会使用一个Host容器:本文介绍Host接口和Engine接口及其相关类 Host容器是org.apache.catalina.Host接口的实例,Host接口继承自Container接口, 其定义如下 public interface Host extends Container { public static final String ADD_ALIAS_EVENT = "addAlias"; publ…
本文接下来分析Context容器,Context容器实例表示一个具体的Web应用程序,其中包括一个或多个Wrapper实例:不过Context容器还需要其他的组件支持,典型的如载入器和Session管理器等. 在创建StandardContext实例后,必须调用其start()方法来为引入的每个HTTP请求服务:其中包括读取和解析默认的web.xml文件(该文件位于%CATALINA_HOME%/conf目录),该文件的内容会应用到所有部署到tomcat中的应用程序中:此外,还会配置验证器阀和许…
tomcat容器通过一个称为Session管理器的组件来管理建立的Session对象,该组件由org.apache.catalina.Manager接口表示:Session管理器必须与一个Context容器相关联(需要用到Context容器的相关上下文或方法). 默认情况下,Session管理器会将其所管理的 Session对象存放在内存中,不过在tomcat中,Session管理器也库将Session对象持久化,存储到文件存储器或通过JDBC写入到数据库中. 下面我们来分析具体实现,在serv…
本文接下来分析tomcat的日志记录器,日志记录器是用来记录消息的组件,在tomcat中,日志记录器需要与某个servlet容器相关连:在org.apache.catalina.logger包下,tomcat提供了几种不同类型的日志记录器. tomcat中的日志记录器都必须实现org.apache.catalina.Logger接口 public interface Logger { public static final int FATAL = Integer.MIN_VALUE; publi…
事实上在第三章,就已经有了连接器的样子了,只是那仅仅是一个学习工具,在这一章我们会開始分析tomcat4里面的默认连接器. 连接器 Tomcat连接器必须满足下面几个要求 1 实现org.apache.cataline.Connector接口 2 负责创建实现了org.apache.cataline.Request接口的request对象 3 负责创建实现了org.apache.cataline.Response接口的response对象 这里默认的连接器的原理非常easy,就是等待http请求…
个人总结:读完这篇文章需要15分钟,文章介绍了抽象语法树与js引擎解析这些语法树的过程,提到了懒解析——即转换为AST的过程中不直接进入函数体解析,当这个函数体需要执行的时候才进行相应转换.(因为有的函数体只是声明了,并没有实际被调用) 解析,语法抽象树及最小化解析时间的 5 条小技巧 这是 JavaScript 工作原理的第十四章. 概述 我们都知道运行一大段 JavaScript 代码性能会变得很糟糕.代码不仅仅需要在网络中传输而且还需要解析,编译为字节码,最后运行.之前的文章讨论了诸如 J…
在前面的文章中,已经学会了如何通过实例化一个连接器和容器来获得一个servlet容器,并将连接器和容器相关联:但在前面的文章中只有一个连接器可用,该连接器服务8080端口上的HTTP请求,无法添加另一个连接器来服务诸如HTTPS之类的其他请求:此外,在前面的文章中的应用程序中有些缺憾,即缺少一种启动/关闭servlet容器的机制. org.apache.catalina.Server接口的实例表示Catalina的整个servlet引擎,囊括了所有的组件:它使用一个优雅的方式来启动/关闭整个系统…
本文接下来介绍并分析servlet容器,servlet容器是用来处理请求servlet资源,并为web客户端填充response对象的模块. servlet容器是org.apache.catalina.Container接口的实例,在tomcat中,有四种类型的容器,分别为Engine.Host .Context和Wrapper. Engine. 代表整个容器的servlet引擎.Host.代表一个拥有一定数量Context的虚拟主机.Context.代表一个Web项目.一个Context包含一…
希望各位网友在看完<<how tomcat works>>一书或者鄙人的tomcat专栏文章后再看这篇博客 这里主要是梳理各个章节的核心概念 第一章 一个简单的Web服务器 第1章从这本书一开始就介绍了一个简单的HTTP服务器.要建立一个可工作的HTTP服务器,你需要知道在 java.net 包里边的 2 个类的内部运作:Socket 和 ServerSocket.这里有关于这 2个类足够的背景资料,使得你能够理解附带程序是如何工作的. 类图如下: 程序的main方法中,建立Htt…
---新内容开始--- 番外 大家周一好呀,又是元气满满的一个周一呀!感谢大家在周一这个着急改Bug的黄金时期,抽出时间来看我的博文哈哈哈,时间真快,已经到第十四篇博文了,也很顺顺(跌跌)利利 (撞撞)的来到了Vue的讲解,群里有小伙伴说,感觉后端还有很多没有更新,是呀!还是有很多东西的在后端,只不过想把vue给简单的搭建出来,如果大家有后端的一些知识,可以给我留言,我总结后,在Vue系列之后再继续说,再强调一次,后端以后还会更新. 前边的.net core 文章我会一直在更新中,一直在修改其中…
Spring Boot 是微服务中最好的 Java 框架. 我们建议你能够成为一名 Spring Boot 的专家. 问题一 Spring Boot.Spring MVC 和 Spring 有什么区别? SpringFrame SpringFramework 最重要的特征是依赖注入.所有 SpringModules 不是依赖注入就是 IOC 控制反转. 当我们恰当的使用 DI 或者是 IOC 的时候,我们可以开发松耦合应用.松耦合应用的单元测试可以很容易的进行. SpringMVC Spring…
/** * lihaibo * 文章内容都是根据自己工作情况实践得出. *如有错误,请指正 * 版权声明:本博客欢迎转发,但请保留原作者信息! http://www.cnblogs.com/horizonli/p/5338078.html */ 一.使用admin能看到四个项目…
0 讲座 (1)SLAM定义 对比雷达传感器和视觉传感器的优缺点(主要介绍视觉SLAM) 单目:不知道尺度信息 双目:知道尺度信息,但测量范围根据预定的基线相关 RGBD:知道深度信息,但是深度信息对距离也有要求 vSLAM(视觉SLAM) 摄像机(主要)+IMU+超声波避障传感器 2016年之后已经可以跑一点DEMO程序了(在刚体的和静态的环境下) 视觉SLAM的几个模块 传感器数据(图像数据采集点云) 视觉里程计(估计摄像机参数) 后端(对摄像机参数优化,因为摄像机误差累积跟IMU一样,因此…
如约而至,Java 10 正式发布!   3 月 20 日,Oracle 宣布 Java 10 正式发布. 官方已提供下载:http://www.oracle.com/technetwork/java/javase/downloads/index.html . 在 Java 9 之后,Java 采用了基于时间发布的策略,每 6 个月一个版本.这是采用新的发布策略之后的第一个版本. Java 10 主要有 12 个新特性. 具体来看看. JEP 286: Local-Variable Type I…
徐明锦 徐明锦 2 95 2019-06-30T14:54:00Z 2019-06-30T14:54:00Z 9 608 3472 28 8 4072 14.00 Clean Clean false 7.8 磅 0 2 false false false EN-US ZH-CN X-NONE /* Style Definitions */ table.MsoNormalTable {mso-style-name:普通表格; mso-tstyle-rowband-size:0; mso-tstyl…
项目 内容 这个作业属于哪个课程 软件工程 这个作业的要求在哪里 实验十四 团队项目评审&课程学习总结 作业学习目标 (1)掌握软件项目评审会流程: (2)反思总结课程学习内容. Start: Part1.项目已完成验收,验收意见表见已上交.团队博客 Part2.个人学习总结: 软件工程第一次阅读作业:点我查看 对之前提出问题的解答: Q1:经过我一系列的了解,bug就是bug,它在目前阶段仅仅能代表的是软件开发中遇到的代码错误,导致用户使用感不好.而软件的缺陷和用户之间产生的分歧属于沟通层面,…
项目 内容 这个作业属于哪个课程 课程 2016级计算机科学与工程学院软件工程(西北师范大学) 作业要求 实验十四 团队项目评审&课程学习总结 作业学习目标 团队项目评审&课程学习总结 一.实验目的与要求 (1)掌握软件项目评审会流程: (3)反思总结课程学习内容. 二.实验环境要求 实验十三所准备团队项目验收资料和配置系统. 三.实验内容与步骤 任务(一):按照团队项目结对评审名单,由项目组扮演乙方,结对项目组扮演甲方,相互对各自软件产品进行验收评审(会议流程参见实验十三 软件项目验收相…
项目 内容 这个作业属于哪个课程 2016级计算机科学与工程学院软件工程(西北师范大学) 这个作业的要求在哪里 实验十四 团队项目评审&课程学习总结 课程学习目标 1.掌握软件项目评审会议流程:2.对本学期所有知识进行回顾和梳理; 3.通过所学知识对之前所存在的疑惑进行再次思考并尝试解答. 1.任务一:回答任务一所提出的问题并阐明解决疑问的途径,提出在学习中产生的新问题 1.1 任务五的博客连接 实验一 软件工程准备 1.2 任务五问题的回答     1.书中第三章提出软件工程师的能力,我想知道…
作业 链接 作业所属课程 西北师范大学软件工程 作业要求 实验十四 团队项目评审&课程学习总结 作业目标 总结学习心得 本学期课程学习总结 解决实验一 软件工程准备任务5提出的问题:  问题一:代码容易维护是对于复审者而言,代码已经达到了复审者认为的一些标准,还是对于编译代码的软件而言,该代码达到了团队规定的最严格的的编译警告等级或者编译软件对代码的一些要求之后就可以认为该代码是易于维护的呢?  解答:经过一学期对软件工程知识的学习以及在软件工程实践中获得的经验,我认为代码容易维护是对于软件的维…
How tomcat works (5)servlet容器阅读笔记 第四章阅读了tomcat默认连接器的实现,当时connector中的使用的容器是自定义的容器,也是非常之简单奥,一个人就干完了所有的活,完成了初始化类加载器,加载servlet,调用servlet的service方法等的活儿,秉承了专事专干的也就是模块化设计的理念,这样的设计肯定是不够灵活的,这一章就来看看tomcat中的容器是如何设计的 总体介绍 总的来说呢,tomcat将容器分为了四类: Engine:表示整个Catalin…
How tomcat works chapter 1 简单的web服务器 这一张的主要内容就是实现一个简单的静态资源服务器,socket编程,利用java提供的socket和serverSocket编程 整体过程如下: HttpServer通过serverSocket监听端口,通过阻塞的accept方法接收请求,然后创建resquest和response对象, //服务器启动主方法 public static void main(String[] args) { HttpServer serve…
我的MYSQL学习心得(十四) 备份和恢复 我的MYSQL学习心得(一) 简单语法 我的MYSQL学习心得(二) 数据类型宽度 我的MYSQL学习心得(三) 查看字段长度 我的MYSQL学习心得(四) 数据类型 我的MYSQL学习心得(五) 运算符 我的MYSQL学习心得(六) 函数 我的MYSQL学习心得(七) 查询 我的MYSQL学习心得(八) 插入 更新 删除 我的MYSQL学习心得(九) 索引 我的MYSQL学习心得(十) 自定义存储过程和函数 我的MYSQL学习心得(十一) 视图 我的…