Tomcat目录解析和应用部署

Tomcat8以前是BIO,以后是NIO,NIO并不是一定能提高性能,如果请求数据量较大,NIO性能比BIO性能还要差。
servlet3.0规范支持tomcat7,servlet3.1规范支持tomcat8.

一.目录

下图是Tomcat的webapps目录:
在这里插入图片描述
在Tomcat的webapps目录下的每个目录都是一个应用上下文,一般通过路径来进行划分,例如localhost:8080/root就可以访问到root目录下的内容。
在这里插入图片描述

所以在Tomcat架构图中,context会有多层,意味着context可以有多个。
Conf目录
catalina.policy:tomcat安全策略文件,java(一次编写到处运行,安全:java security),此文件中编写了各种权限(java.security.Permission)用来控制JVM相关权限。
catalina.properties:控制配置文件 ,如common classloader
logging.properties:日志配置文件,JDK Logging
server.xml:主要server配置文件
Context.xml:全局context配置文件
tomcat-users.xml:角色配置文件(Realm文件实现方式)
web.xml:servlet标准的web.xml部署文件,tomcat默认实现了部分配置
不使用Tomcat处理静态文件不是性能不好,而是因为它要占用端口,而端口是有限的。Jsp性能很好,也可以用html的形式去写,但它最大的缺点是要依赖于servlet容器。
Context主要关心应用相关的东西(web app),manager,loader,realm是安全相关的,内层的servlet是通过web app控制安全的,外层的Tomcat有自己的一套安全体系。Host有自己的实例,还会带有虚拟主机。Engine(引擎)带有Catalina。
Lib目录
Tomcat存放公用类库的文件
jasper.jar :jsp的编译器
ecj-4.6.3.jar :eclipse java 编译器
Logs目录
Localhost. d a t e . l o g : T o m c a t C a t a l i n a . {date}.log :当Tomcat应用起不来的时候,多看该文件,如类冲突 Catalina. {date}.log : 控制台输出,system.out可以外置,代码中有个方法setOut()
Webapps目录
简化web应用部署的方式,在实际生产中,应用不应该部署在webapps目录中,应该外置,比如docker镜像,war包要是作为其中一部分的话,会产生很多麻烦。

二.部署web应用

方法一:放置在webapps目录下
直接拖过去
方法二:修改conf/server.xml文件
在这里插入图片描述
在host中配置context,一个host可以配置多个context,docBase和path都是可配置的,source可忽略。若是配置了path,就覆盖了webapps目录中的root,此时root根目录可忽略。在connector里面设置字符集URIEncoding=”UTF-8”。
该方式不支持动态部署,建议在生产环境中使用。
方法三:独立的context.xml配置文件
在Tomcat容器启动的时候,会有一个文件,conf/Catalina/localhost产生,在此文件下配置独立的context.xml文件,路径为: t o m c a t h o m e / c o n f / C a t a l i n a / l o c a l h o s t + {tomcat_home}/conf/Catalina/localhost+ {ContextPath}.xml,设置path属性是无效的。根独立context.xml配置文件路径: t o m c a t h o m e / c o n f / {tomcat_home}/conf/ {Engine.name}/${host.name}/ROOT.xml
要注意XML文件的格式。
该方式可以实现热部署,建议在开发环境使用,生产环境会影响性能。
实现热部署,调整元素的属性reloadable=”true”。

三.Web技术栈有两种:

1.基于servlet的传统技术栈
Servlet容器启动了spring,servlet容器必须实现servlet规范。
将webapps部署到servlet容器中,而嵌入式容器web应用,可以灵活部署到任意指定位置或者通过复杂的条件判断。
Jar启动方式
Java -jar,参考JDK api : java.util.jar.Manifest
Jar包可以自我驱动,war包不可以,但主要看包里面的内容,不是看后缀名,jar,war都是zip文件,这点可以从JDK API中看出:JarFile extends ZipFile{}
可以通过设置server.xml配置文件或者通过tomcat API在代码中设置host,context,port等达到控制host,context,port等的目的。当然一个host中可以有多个context,一个tomcat中可以有多个connector。
2.基于web Flux(基于netty)的非servlet技术栈。

上一篇:Tomcat介绍
下一篇:tomcat性能优化

猜你喜欢

转载自blog.csdn.net/lx_Frolf/article/details/84535908
今日推荐