TomcatSession概述首先HTTP是一个无状态的协议,这意味着每次发起的HTTP请求,都是一个全新的请求(与上个请求没有任何联系,服务端不会保留上个请求的任何信息),而Session的出现就是为了解决这个问题,将Client端的每次请求都关联起来,要实现Session机制通常通过Cookie(cookie里面保存统一标识符号),URI附加参数,或者就是SSL(就是SSL中的各种属性作为一个Client请求的唯一标识),而在初始化ApplicationContext指定默认的Session追踪机制(URL+COOKIE),若Connector配置了SSLEnabled,则将通过SSL追踪
我们接着上一篇文章的容器处理来讲,当postParseRequest方法返回true时,则由容器继续处理,在service方法中有connector.getService().getContainer().getPipeline().getFirst().invoke(request,response)这一行:Connector调用getService()返回StandardService;StandardService调用getContainer返回StandardEngine;StandardEngine调用getPipeline返回与其关联的StandardPipeline;Engine
终于进行到Connector的分析阶段了,这也是Tomcat里面最复杂的一块功能了。Connector中文名为连接器,既然是连接器,它肯定会连接某些东西,连接些什么呢?Connector用于接受请求并将请求封装成Request和Response,然后交给Container进行处理,Container处理完之后再交给Connector返回给客户端。要理解Connector,我们需要问自己4个问题。(1)Connector如何接受请求的?(2)如何将请求封装成Request和Response的?(3)封装完之后的Request和Response如何交给Container进行处理的?(4)Conta
在上一篇文章中,我们分析了tomcat的初始化过程,是由Bootstrap反射调用Catalina的load方法完成tomcat的初始化,包括server.xml的解析、实例化各大组件、初始化组件等逻辑。那么tomcat又是如何启动webapp应用,又是如何加载应用程序的ServletContextListener,以及Servlet呢?我们将在这篇文章进行分析我们先来看下整体的启动逻辑,tomcat由上往下,挨个启动各个组件:我们接着上一篇文章来分析,上一篇文章我们分析完了Catalina.load(),这篇文章来看看daemon.start();Bootstrapdaemon.start(
说到Tomcat的启动,我们都知道,我们每次需要运行tomcat/bin/startup.sh这个脚本,而这个脚本的内容到底是什么呢?我们来看看。启动脚本startup.sh脚本#!/bin/shos400=falsecase"`uname`"inOS400*)os400=true;;esac#resolvelinks-$0maybeasoftlinkPRG="$0"while[-h"$PRG"];dols=`ls-ld"$PRG"`link=`expr"$ls":'.*->\(.*\)$
在研究tomcat类加载之前,我们复习一下或者说巩固一下java默认的类加载器。楼主以前对类加载也是懵懵懂懂,借此机会,也好好复习一下。楼主翻开了神书《深入理解Java虚拟机》第二版,p227,关于类加载器的部分。请看:什么是类加载机制?Java虚拟机把描述类的数据从Class文件加载进内存,并对数据进行校验,转换解析和初始化,最终形成可以呗虚拟机直接使用的Java类型,这就是虚拟机的类加载机制。虚拟机设计团队把类加载阶段中的“通过一个类的全限定名来获取描述此类的二进制字节流”这个动作放到Java虚拟机外部去实现,以便让应用程序自己决定如何去获取所需要的类。实现这动作的代码模块成为“类加载器”
在Tomcat源码分析(二)-----Tomcat整体架构及组件中我们简单分析了一下Pipeline和Valve,并给出了整体的结构图。而这一节,我们将详细分析Tomcat里面的源码。ValveValve作为一个个基础的阀门,扮演着业务实际执行者的角色。我们看看Valve这个接口有哪些方法。publicinterfaceValve{//获取下一个阀门publicValvegetNext();//设置下一个阀门publicvoidsetNext(Valvevalve);//后台执行逻辑,主要在类加载上下文中使用到publicvoidbackgroundProcess();//执行业务逻辑publ
Tomcat里面有各种各样的组件,每个组件各司其职,组件之间又相互协作共同完成web服务器这样的工程。在这些组件之上,Lifecycle(生命周期机制)至关重要!在学习各个组件之前,我们需要看看Lifecycle是什么以及能做什么?实现原理又是怎样的?什么是Lifecycle?Lifecycle,其实就是一个状态机,对组件的由生到死状态的管理。当组件在STARTING_PREP、STARTING或STARTED时,调用start()方法没有任何效果当组件在NEW状态时,调用start()方法会导致init()方法被立刻执行,随后start()方法被执行当组件在STOPPING_PREP、STO
前言Tomcat的前身为Catalina,而Catalina又是一个轻量级的Servlet容器。在美国,catalina是一个很美的小岛。所以Tomcat作者的寓意可能是想把Tomcat设计成一个优雅美丽且轻量级的web服务器。Tomcat从4.x版本开始除了作为支持Servlet的容器外,额外加入了很多的功能,比如:jsp、el、naming等等,所以说Tomcat不仅仅是Catalina。既然Tomcat首先是一个Servlet容器,我们应该更多的关心Servlet。那么,什么是Servlet呢?在互联网兴起之初,当时的Sun公司(后面被Oracle收购)已然看到了这次机遇,于是设计出了A
作为后端开发人员,在实际的工作中我们会非常高频地使用到web服务器。而tomcat作为web服务器领域中举足轻重的一个web框架,又是不能不学习和了解的。tomcat其实是一个web框架,那么其内部是怎么实现的呢?如果不用tomcat我们能自己实现一个web服务器吗?首先,tomcat内部的实现是非常复杂的,也有非常多的各类组件,我们在后续章节会深入地了解。其次,本章我们将自己实现一个web服务器的。下面我们就自己来实现一个看看。(【注】:参考了《Howtomcatworks》这本书)http协议简介http是一种协议(超文本传输协议),允许web服务器和浏览器通过Internet来发送和接受