tomcat的启动一般是从startup.bat/startup.sh开始,然后启动catalina.bat/catalina.sh,然后启动bootstrap.jar包 那么它们启动的时候都做了哪些事情呢? 首先是startup.bat,startup.bat做了什么? 第二是catalina.bat,catalina.bat做了什么? 第三是bootstrap.jar,…
在spring Web中,需要初始化IOC容器,用于存放我们注入的各种对象.当tomcat启动时首先会初始化一个web对应的IOC容器,用于初始化和注入各种我们在web运行过程中需要的对象.当tomcat启动的时候是如何初始化IOC容器的,我们先看一下在web.xml中经常看到的配置: <context-param> <param-name>contextConfigLocation</param-name> <param-value> classpath:…
目录 一.前言 二.初始化 1. 容器初始化 根容器查找的方法 容器创建的方法 加载配置文件信息 2. MVC的初始化 文件上传解析器 区域信息解析器 handler映射信息解析 3. HandlerMapping的实现原理 HandlerExecutionChain RequestMappingHandlerMapping 三.请求响应处理 1. 请求分发 2. 请求处理 参数解析过程 传递页面参数 返回值解析 3. 视图解析 视图解析器 视图 一.前言 版本: springMVC 5.0.2…
最近公司要做功能迁移,原来的后台使用的Netty,现在要迁移到在uap上,也就是说所有后台的代码不能通过netty写的加载顺序加载了. 问题就来了,怎样让迁移到tomcat的代码按照原来的加载顺序进行加载(例如顺序:1.初始化spring容器,2.初始化线程池,3.加载业务代码,将数据库中数据加载到内存中).我个人首先想到的是在tomcat中加监听,tomcat启动时先加载监听中的方法.方法中的加载顺序也就是按照我拟定的顺序进行. 然后我查了一些资料,发现了两种解决方案: 1.通过tomcat的…
[原文]https://www.toutiao.com/i6594400249429623304/ SpringIOC容器的初始化过程 简单来说,IoC容器的初始化是由refresh()方法来启动的,这个方法标志着IoC容器的正式启动. 具体来说,这个启动包括BeanDefinition的 Resouce定位.载入和注册三个基本过程. 如果我们了解如何编程式地使用IoC容器,就可以清楚地看到Resource定位和载入过程的接口调用.在下面的内容里,我们将会详细分析这三个过程的实现.在分析之前,要…
当tomcat启动的时候 首先会加载 org.apache.ctalina.startup.BootStrap类. 使用eclipse或idea启动tomcat其实就是在启动这个类的main方法 根据类的初始化 首先会 加载static静态块 然后进入main方法. 启动的主要步骤可以围绕BootStrap划分为 static中的 准备 和main中的初始化(init).加载 (load).启动(statrt) 1. static static静态块中做的事情是获取tomcat 的安装目录和创建…
通过带注解Spring Boot可以启动一个web容器,并初始化bean容器.那么Tomcat启动并初始化spring容器的原理是怎样的? Tomcat启动web程序时会创建一对父子容器(图1): 有几种方式: XML配置Spring和Servlet容器 通过注解初始化 Servlet提供SPI的调用方式来启动 XML配置Spring和Servlet容器 web.xml主要通过一下配置初始化父子容器(父子容器是职责单一的设计) <web-app> <listener> <li…
之前没有遇到过这个问题,配了三天的项目了,惊人啊!!!各种怪问题全被我赶上了.真有种骂人的冲动. tomcat启动项目时,项目资源被加载两遍. 原因:配置虚拟目录导致,项目被重新加载. <Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespa…
近期在项目开发測试的时候,发现Tomcat启动时项目反复载入,导致资源初始化两次的问题  导致该问题的解决办法: 例如以下图:在Eclipse中将Server Locations设置为"Use Tomcat installation(takes control of Tomcat installation)"时. 就会导致该问题! 根本原因: 解决方法一: 把server.xml中的context删除掉 但这会导致一个问题: 在Web Modules中你将看不到我们的项目 解决方法二:…
1. 使用@Bean注解定义initMethod和destroyMethod 所谓initMethod和destroyMethod,是指在springIOC容器中,对于bean对象执行到初始化阶段和销毁阶段所调用的方法,其并不是初始化方法和销毁方法本身. 对于单例模式,initMethod会在创建容器时,构造方法.属性赋值方法完成之后调用,destroyMethod会在关闭容器之后调用: 对于原型模式,initMethod会在每次获取bean对象时,构造方法.属性赋值方法完成之后调用,而dest…
授人以鱼不如授人以渔,首先声明这篇文章并没有过多的总结和结论,主要内容是教大家如何一步一步自己手动debug调试源码,然后总结spring如何解决的循环依赖,最后,操作很简单,有手就行. 本次调试 是使用@Autowired注入,通过来调试源码看spring如何解决的循环依赖问题. 首先创建一个简单的springBoot项目,引入spring-boot-test包即可.可以使用idea提供的spring官网推荐的快速创建. maven依赖 <dependency> <groupId>…
tomcat作为一款web服务器本身很复杂,代码量也很大,但是模块化很强,最核心的模块还是连接器Connector和容器Container.具体请看下图: 从图中可以看出 a. 高亮的两块是Connector和Container,为什么说他们两最核心,其中Connector是负责接收http请求,当你在浏览器中输入URL为http://www.demon.com,这样的http请求就会被Connector接收并转发给容器Container. 到了Container后,会经过不同的容器层有: En…
前面摆了三节的姿势,现在终于要看到最终tomcat监听端口,接收请求了. 目录 Connector Http11Protocol JIoEndpoint 总结 在前面的初始化都完成之后,进行Connector的初始化,也是执行一些生命周期方法. Connector 在启动过程中这个类的主要作用是初始化并启动CoyoteAdapter和Http11Protocol: initInternal 新建一个CoyoteAdapter,并调用protocolHandler.setAdapter方法设置ad…
上一节说到StandardService负责启动其子组件:container和connector,不过注意,是有先后顺序的,先启动container,再启动connector,这一节先来看看container. 目录 Pipeline和Vavle StandardEngine类和StandardHost类 StandardContext类 总结 Pipeline和Vavle 在第二节(How Tomcat works — 二.tomcat启动(1))中没有介绍关于Pipeline和Vavle,因…
之前在Spring Boot启动过程(二)提到过createEmbeddedServletContainer创建了内嵌的Servlet容器,我用的是默认的Tomcat. private void createEmbeddedServletContainer() { EmbeddedServletContainer localContainer = this.embeddedServletContainer; ServletContext localServletContext = getServ…
根据Tomcat源码来看一下Tomcat启动过程都做了什么 部分代码为主要流程代码,删去了try-catch以及一些校验逻辑,方便理解主流程 先来一张启动过程时序图,了解一下启动顺序 Tomcat启动的入口类:org.apache.catalina.startup.Bootstrap#main main方法是整个tomcat启动时的入口.在main方法中,使用bootstrap.init()来初始化类加载器和创建Catalina实例,然后再启动Catalina线程. public static…
servlet容器是用来处理请求servlet资源,并为Web客户端填充response对象的模块.在上一篇文章(也就是书的第四章)我们设计了SimpleContainer类,让他实现Container接口,也基本完成了容器的作用.但是我们得知道在实际的tomcat中有4类容器: Engine: 表示整个Catalina servlet引擎; Host: 包含一个或多个Context容器的虚拟主机; Context:表示一个Web应用程序,一个Context可以包含多个Wrapper Wrapp…
------------------tomcat服务开启----------2014-9-26 9:17:07 org.apache.catalina.core.AprLifecycleListener init    //Apache核心类中AprLifecycleListener监听器调用init初始化方法,作用:对服务端的启动,重启,关闭等进行监听.信息: The APR based Apache Tomcat Native library which allows optimal per…
在了解了tomcat 的一些基本组件之后,学习启动过程就更容易理解了,因为启动过程就是启动各个组件. 目录 启动顺序 Bootstrap类 Catalina类 StandardServer类和StandardService类 总结 启动顺序 tomcat的启动主要是容器的启动,根据tomcat四层架构,启动时由上而下的,而service包含这些组件,service又包含在server里面,启动顺序如下: Bootstrap类 整个tomcat程序的入口——main函数,主要作用就是找到CATAL…
主要介绍tomcat启动涉及到的一些接口和类. 目录 概述 tomcat包含的组件 server和service Lifecycle Container Connector 总结 概述 tomcat作为一个服务器,它的主要功能就是接收请求——处理请求——返回,如果是我们自己实现一个最简单的服务器,启动一个线程监听某个端口,该端口有数据进来的话就接收数据,然后在启动一个线程去处理接收到的数据并返回.那么启动一个服务器最重要的就是启动一个线程监听某个端口,tomcat也是,只不过tomcat包含很多…
一.SpringMVC启动过程 Spring的MVC是基于Servlet功能实现的,每个web工程中都有一个web.xml文件,web容器在启动的时候会加载这个配置文件,当一个web应用加载到web容器中后,在web应用开始响应客户端的请求之前,要按照顺序执行下面几个步骤: 1.实例化部署描述符中的<listener>元素标识的时间监听器的实例: <listener> <listener-class>org.springframework.web.context.Con…
  1.首先知道SpringBoot打包为jar和war包是不一样的(只讨论SpringBoot环境下web应用打包)     1.1.jar和war包的打开方式不一样,虽然都依赖java环境,但是jar包只需要外部提供java环境,war需要外部提供java和servlet环境     1.2.jar包和war包的启动流程不一样:             ①.jar包的启动时直接由项目的主函数开始启动,此时会先初始化IOC容器,然后才会进行内置Servlet环境(一般为Tomcat)的启动.…
Log4j容器初始化探究 Log4j第一步就是初始化Logger容器Repository,这一章我们来探究Logger容器,从别从独立应用以及servlet容器下启动初始化两方面探究. 1 独立应用 静态初始化,java语言保证静态初始化只被执行一次,静态初始化源码在LogManager中. 时序图: 初始化流程: 第一步: LogManager获取配置文件的URL 第二步: OptionConverter获取Configurator实现类(配置类) 第三步: Configurator读取配置文…
相关文章 <Servlet3.0之四:动态注册和Servlet容器初始化> <SpringBoot中通过SpringBootServletInitializer如何实现组件加载> <SpringMVC之五:自定义DispatcherServlet配置及配置额外的 servlets 和 filters> 在之前的<SpringBoot之二:部署Spring Boot应用程序方式>章节有过一个实践,需要启动类继承自SpringBootServletInitial…
springboot的web项目的启动主要分为: 一.使用内置tomcat启动 启动方式: 1.IDEA中main函数启动 2.mvn springboot-run 命令 3.java -jar XXX.jar 配置内置tomcat属性: 关于Tomcat的属性都在org.springframework.boot.autoconfigure.web.ServerProperties配置类中做了定义,我们只需在application.properties配置属性做配置即可.通用的Servlet容器…
http://blog.csdn.net/qq924862077/article/details/52769754 <context-param> <param-name>contextConfigLocation</param-name> <param-value> classpath:applicationContext.xml </param-value> </context-param> <listener> &l…
一.什么是Spring IOC: Ioc—Inversion of Control,即“控制反转”,不是什么技术,而是一种设计思想. 在Java开发中,Ioc意味着将你设计好的对象交给容器控制,而不是传统的在你的对象内部直接控制. 二.Spring中如何实现DI(依赖注入) 1.构造器注入 <bean id="beanName" class="BeanClassName"> <constructor-arg index="构造器中的位置&…
当我们做一个java项目时,有几个功能都须要载入servlet或者实现某个共同的方法,尽管我们一味地在每个功能中依次载入也不是不能够,可是当某个servlet 或者方法被频繁地载入和应用.我们将面向对象的思想置于不顾却也真的说只是去. 所以.对于这类的servlet我们须要在Tomcat启动时直接载入,比方初始化信息.读取配置文件等需求时,我们就能够通过web.xml的配置文件对来实现这个需求: 首先,AbstractItemServlet 类中封装了相应的Init方法: <span style…
SpringMVC作为MVC框架近年来被广泛地使用,其与Mybatis和Spring的组合,也成为许多公司开发web的套装.SpringMVC继承了Spring的优点,对业务代码的非侵入性,配置的便捷和灵活,再加上注解方式的简便与流行,SpringMVC自然成为web开发中MVC框架的首选. SpringMVC的设计理念,简单来说,就是将Spring的IOC容器与Servlet结合起来,从而在IOC容器中维护Servlet相关对象的生命周期,同时将Spring的上下文注入到Servlet的上下文…
说到Tomcat的启动,我们都知道,我们每次需要运行tomcat/bin/startup.sh这个脚本,而这个脚本的内容到底是什么呢?我们来看看. 启动脚本 startup.sh 脚本 #!/bin/sh os400=false case "`uname`" in OS400*) os400=true;; esac # resolve links - $0 may be a softlink PRG="$0" while [ -h "$PRG"…