环境 tomcat 8.5 原因 在使用相对路径加载配置文件时,如果相对路径超出了 tomcat 容器的根目录,那么 tomcat 会提示 xxx has been normalized to [null] which is not valid . 分析 下面从 tomcat 的源码来进行分析. validate 在 StandardRoot 中,有一个 validate 方法,该方法的注释如下: /** * Ensures that this object is in a valid stat…
org.apache.tomcat.util.bcel.classfile.ClassFormatException: null is not a Java .class file   在$TOMCAT_HOME/conf/catalina.properties文件 的tomcat.util.scan.DefaultJarScanner.jarsToSkip中添加DB2驱动的Jar包文件名如”db2jcc4.jar” 即可.  …
  1.情景展示 tomcat 日志时不时会报出如下异常信息,到底是怎么回事? java.lang.IllegalArgumentException: Invalid character found in the request target. The valid characters are defined in RFC 7230 and RFC 3986 at org.apache.coyote.http11.AbstractNioInputBuffer.parseRequestLine(A…
背景 在项目的部署过程中,一般是打成 war 或者 jar 包,这样一般存在两种问题: 即使是配置文件修改,也还需要整个项目重新打包和部署. 整个项目只有一套环境,不能切换. 针对上面的问题,可以使用外部化配置来解决. 需求 由于服务器上的应用服务器存放路径未知,只知应用服务器的目录结构.所以需要通过文件的相对路径,实现外部化配置. 环境 JDK6 Spring 3.2.5 方案 File 不建议使用 File 的相对路径来获取,因为以下两点: File 的相对目录会随着启动的目录变化而变化.…
本文由ilanniweb提供友情赞助,首发于烂泥行天下 想要获得更多的文章,可以关注我的微信ilanniweb 公司的业务是使用tomcat做web容器,为了更有效的利用服务器的性能,我们一般部署多个tomcat做业务的负载均衡. 一.业务需求 目前一台服务器上,部署了4个tomcat,也就相当于4个节点.平时在维护业务时,需要我们一个一个tomcat实例进行单独的维护,感觉很不方便,所以就有了这篇文章. 但是为了更方便的管理这4个tomcat,我这边做了两方面的工作,一是把所有的tomcat工…
上一篇说到<Spring MVC防御CSRF.XSS和SQL注入攻击>,今天说说SessionID带来的漏洞攻击问题.首先,什么是Session Fixation攻击和Session Hijacking攻击问题? 说来话长,非常具体的解释查看我这个pdf文件:<Session Fixation Vulnerability in Web-based Applications>.为什么会注意到这个问题?其实原来也知道session劫持的问题,但没有注意,这几天用IBM Ration A…
为什么使用内嵌Tomcat开发? 开发人员无需搭建Tomcat的环境就可以使用内嵌式Tomcat进行开发,减少搭建J2EE容器环境的时间和开发时容器频繁启动所花时间,提高开发的效率. 怎么搭建内嵌Tomcat环境呢?(以tomcat6和tomcat7为例) 在开发工程(xxxx)的根目录下新建以下的目录: xxxx/Embedded/conf xxxx/Embedded/lib xxxx/Embedded/webapps xxxx/Embedded/work apache-tomcat-6.0.…
之前在Spring Boot启动过程(二)提到过createEmbeddedServletContainer创建了内嵌的Servlet容器,我用的是默认的Tomcat. private void createEmbeddedServletContainer() { EmbeddedServletContainer localContainer = this.embeddedServletContainer; ServletContext localServletContext = getServ…
看代码有助于线上出现预料之外的事的时候,不至于心慌... StandardEngine[Tomcat].StandardHost[localhost]的启动与StandardEngine不在同一个线程中,它的start: // Start our child containers, if any Container children[] = findChildren(); List<Future<Void>> results = new ArrayList<>(); f…
Tomcat 部署Tomcat环境 环境准备 linux: CentOS 7.3 tomcat: 9.0.0.M21 jdk: 1.8.0_131 ip: 192.168.1.5 tomcat官方下载地址 http://tomcat.apache.org/download-90.cgi 下载tomcat # cd /usr/local/src # wget -c http://mirrors.tuna.tsinghua.edu.cn/apache/tomcat/tomcat-9/v9.0.0.M…
tomcat 作为知名的web容器,很棒! 本文简单了从其应用命令开始拆解,让我们对他有清晰的了解,揭开神秘的面纱!(冗长的代码流水线,给你一目了然) 话分两头: 1. tomcat是如何启动的? 2. tomcat是如何接收请求的? x. 应用程序是怎样接入tomcat的? 从何处开始? /etc/init.d/.0_101/bin/java org.apache.catalina.startup.Bootstrap "$@" start # 参考eval命令 eval "…
在上面的部分,其实我们已经接触到Tomcat的生命周期了,接下来我们将仔细讨论和学习Tomcat的生命周期的具体实现. LifeCycle接口 这个LifeCycle接口上面在讲解Server和Service时其实已经有所接触.Tomcat通过org.apache.catalina.LifeCycle接口统一接管Tomcat的生命周期,所有继承自它的组件(即Component)都需要实现这个接口. 我们先俯视看一看LifeCycle接口的定义. 根据上图,我们清晰看到上图包含了4个生命周期的方法…
看代码有助于线上出现预料之外的事的时候,不至于心慌... StandardEngine[Tomcat].StandardHost[localhost]的启动与StandardEngine不在同一个线程中,它的start: // Start our child containers, if any Container children[] = findChildren(); List<Future<Void>> results = new ArrayList<>(); f…
我一直很好奇 spring boot 以哪种方式 启动的 tomcat  今天 特地跟踪了一下 大家都知道 spring 容器很核心的 方式 是org.springframework.context.support.AbstractApplicationContext#refresh 这个方法 其中 try { // Allows post-processing of the bean factory in context subclasses. postProcessBeanFactory(b…
环境 eclipse:4.5.2 jre:1.8 java project compiler:1.8 embedded tomcat:7.0.32 可以正常启动,但是访问时,会报错. HTTP Status 500 - Unable to compile class for JSP: type Exception report message Unable to compile class for JSP: description The server encountered an intern…
Tomcat里面有各种各样的组件,每个组件各司其职,组件之间又相互协作共同完成web服务器这样的工程.在这些组件之上,Lifecycle(生命周期机制)至关重要!在学习各个组件之前,我们需要看看Lifecycle是什么以及能做什么?实现原理又是怎样的? 什么是Lifecycle? Lifecycle,其实就是一个状态机,对组件的由生到死状态的管理. 当组件在STARTING_PREP.STARTING或STARTED时,调用start()方法没有任何效果 当组件在NEW状态时,调用start()…
在上一篇文章中,我们分析了tomcat的初始化过程,是由Bootstrap反射调用Catalina的load方法完成tomcat的初始化,包括server.xml的解析.实例化各大组件.初始化组件等逻辑.那么tomcat又是如何启动webapp应用,又是如何加载应用程序的ServletContextListener,以及Servlet呢?我们将在这篇文章进行分析 我们先来看下整体的启动逻辑,tomcat由上往下,挨个启动各个组件: 我们接着上一篇文章来分析,上一篇文章我们分析完了Catalina…
前言          不得不说SpringBoot的开发者是在为大众程序猿谋福利,把大家都惯成了懒汉,xml不配置了,连tomcat也懒的配置了,典型的一键启动系统,那么tomcat在springboot是怎么启动的呢?  内置tomcat          开发阶段对我们来说使用内置的tomcat是非常够用了,当然也可以使用jetty. <dependency> <groupId>org.springframework.boot</groupId> <arti…
Spring Boot版本: 2.0.0.RELEASE 这里需要引入依赖 spring-boot-starter-web 这里有可能有个人的误解,请抱着怀疑态度看. 建议: 感觉自己也会被绕晕,所以有兴趣的使用IDE工具看下源码 1.Tomcat在什么时候被初始化了? 在ServletWebServerApplicationContext中有段代码,如下: org.springframework.boot.web.servlet.context.ServletWebServerApplicat…
Spring Boot默认使用Tomcat作为嵌入式的Servlet容器,只要引入了spring-boot-start-web依赖,则默认是用Tomcat作为Servlet容器: <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> Servlet容器…
onRefresh(); protected void onRefresh() { try { createEmbeddedServletContainer(); } } private void createEmbeddedServletContainer() { EmbeddedServletContainer localContainer = this.embeddedServletContainer; //null ServletContext localServletContext =…
在读本篇文章之前如果你读过这篇文章SpringBoot自动装配原理解析应该会更加轻松 准备工作 我们知道SpringBoot的自动装配的秘密在org.springframework.boot.autoconfigure包下的spring.factories文件中,而嵌入Tomcat的原理就在这个文件中加载的一个配置类:org.springframework.boot.autoconfigure.web.servlet.ServletWebServerFactoryAutoConfiguratio…
作者:木木匠 https://my.oschina.net/luozhou/blog/3088908 我们知道 Spring Boot 给我们带来了一个全新的开发体验,让我们可以直接把 Web 程序打包成 jar 包直接启动,这得益于 Spring Boot 内置了容器,可以直接启动. 本文将以 Tomcat 为例,来看看 Spring Boot 是如何启动 Tomcat 的,同时也将展开学习下 Tomcat 的源码,了解 Tomcat 的设计. 从 Main 方法说起 用过 Spring Bo…
接第二篇 第二篇里面, 看到容器创建的是 AnnotationConfigServletWebServerApplicationContext 类型. 一 .类图 二. 构造 public GenericApplicationContext() { //创建 bean 工厂 this.beanFactory = new DefaultListableBeanFactory(); } public AnnotationConfigServletWebServerApplicationContext…
Spring boot中使用的是内置的Tomcat,而不像Spring mvc那样依赖外部tomcat运行项目. spring boot中导入了Tomcat的jar包: 点进一个Spring boot 项目的application类的run方法: 查看此方法的实现类: 查看其实现类: 就是下面这段代码: @Override public WebServer getWebServer(ServletContextInitializer... initializers) { Tomcat tomca…
一. 预备 如果你是Windows用户,使用Eclipse,并且想自行导入源码进行分析,你可能需要:Eclipse 导入 Tomcat 源码 如果你已遗忘 观察者模式,那么你可以通过该文章回顾:设计模式(五)观察者模式 如果你已遗忘 UML类图相关知识,那么你可以通过文章 (五分钟读懂UML类图 )快速回顾 二. 启程 1. Tomcat组件生命周期 Tomcat中包含多种组件,每个组件有各自的生命周期,而每个生命周期中又包含多种状态,这些状态会根据程序的运行而相互转换,在这个过程中,某些组件会…
Spring Boot一个非常突出的优点就是不需要我们额外再部署Servlet容器,它内置了多种容器的支持.我们可以通过配置来指定我们需要的容器. 本文以我们平时最常使用的容器Tomcat为列来介绍以下两个知识点: Spring Boot是怎么整合启动Tomcat容器的: 在Spring Boot中,怎么进行Tomcat的深度配置. Spring Boot整合启动Tomcat的流程 对于看源代码,每个人都有自己的方法.我自己在看源代码的时候喜欢结合IDEA的Debug功能一起看.比如说现在我们要…
SpringBoot 就像一条巨蟒,慢慢缠绕着我们,使我们麻痹.不得不承认,使用了 SpringBoot 确实提高了工作效率,但同时也让我们遗忘了很多技能.刚入社会的时候,我还是通过 Tomcat 手动部署 JavaWeb 项目,还经常对 Tomcat 进行性能调优.除此之外,还需要自己理清楚各 Jar 之间的关系,以避免 Jar 丢失和各版本冲突导致服务启动异常的问题.到如今,这些繁琐而又重复的工作已经统统交给 SpringBoot 处理,我们可以把更多的精力放在业务逻辑上.但是,清楚 Tom…
1.测试代码,一个简单的springboot web项目:地址:https://gitee.com/yangxioahui/demo_mybatis.git 一:tomcat的主要架构:1.如果我们下载了tomcat的安装包,可以在解压后的文件夹看到server.xml文件: 内容如下: <?xml version='1.0' encoding='utf-8'?> <Server port="8005" shutdown="SHUTDOWN">…
<dependency>    <groupId>org.springframework.boot</groupId>    <artifactId>spring-boot-starter-web</artifactId></dependency> 添加如上 Web 的依赖,Spring Boot 就帮我们内置了 Servlet 容器,默认使用的是 Tomcat,同样也支持修改,比如可以使用 jetty.Undertow 等. 因为内…