Jrebel公布了一份2020 Java生态系统报告,调查结果显示,有61%的开发者们使用的主要应用服务器还是Tomcat。很多初学Java的人不知道怎么入门Tomcat,接下来就给大家做一个简单的知识梳理。
Tomcat是由Apache开发的一个Servlet容器,实现了对Servlet和JSP的支持,并提供了作为Web服务器的一些特有功能,如Tomcat管理和控制平台、安全域管理和Tomcat阀等。Tomcat包含了一个配置管理工具,也可以通过编辑XML格式的配置文件来进行配置。
/bin - Tomcat 脚本存放目录(如启动、关闭脚本)。 *.sh 文件用于 Unix 系统; *.bat 文件用于 Windows 系统。
/conf - Tomcat 配置文件目录。
/logs - Tomcat 默认日志目录。
/webapps - webapp 运行的目录。
1.服务器(server)
实例,通常一个JVM只能包含一个实例,一般情况下,一个物理服务器可以启动多个JVM,从而启动多个实例,但一般不这么做。
2.服务(service)
一个服务组件通常包含一个引擎和此引擎相关联的一个或多个链接服务器。
3.连接器(connectors)
一个引擎能配置多个连接器,但是每个连接器的端口不能冲突。同时,Tomcat也支持AJP JSERV和JK2连接器,实现让Apache反向代理到后端服务器的非常高效的传输协议。
4.引擎
可以自己接收用户的http请求,并构建响应报文,而且可以在内部处理java程序的整个套间 。
5.主机
6.上下文
7.阀门,能够过滤也可以做访问控制。
8.日志记录器
9.领域(Realm),用来实现用户的认证和授权。
任何Tomcat实例就是一个server,而一个server内部要想能够解析JSP页面转义编译serlet程序,要靠其引擎来实现。而引擎才是真正意义上执行JSP代码的容器,都是Tomcat用类来描述这些组件的。同时,为了接受用户的请求,需要基于connector组件,所谓监听的套接字的程序,能够接手用户的请求,被称为连接器。一个server内部可以完全运行N个引擎,无非就是运行多个虚拟机而已。
查看文件:
# cat /usr/local/tomcat/conf/server.xml
Listener为侦听器,通常实现tomcat内部进行通信的,可在各组件之间完成通信
<Serverport="8005" shutdown="SHUTDOWN">
<Listener className="org.apache.catalina.core.AprLifecycleListener"SSLEngine="on" />
<Listener className="org.apache.catalina.core.JasperListener"/>
<Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener"/>
<Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener"/>
<Listener className="org.apache.catalina.core.ThreadLocalLeakPreventionListener"/>
全局命名资源,方便全局引用,所以为其起完名称后可以随便调用的
<GlobalNamingResources>
<Resource name="UserDatabase"auth="Container"
type="org.apache.catalina.UserDatabase"
description="User databasethat can be updated and saved"
factory="org.apache.catalina.users.MemoryUserDatabaseFactory"
pathname="conf/tomcat-users.xml" /> #其调用tomcat-user.xml配置文件进行用户认证
</GlobalNamingResources>
服务类组件配置信息,将连接器关联至引擎上
<Servicename="Catalina">
<Connector port="8080" protocol="HTTP/1.1" #所在监听端口,以及协议版本号
connectionTimeout="20000" #连接超时时间,单位毫秒
redirectPort="8443" /> #必要的时候可以做重定向,定义在8443
<Connector port="8443"protocol="HTTP/1.1" SSLEnabled="true" #端口监听在8443,协议http1.1
maxThreads="150" scheme="https" secure="true" #最大线程,协议版本,安全的
clientAuth="false" sslProtocol="TLS" /> #不验证客户端 ssl协议用的是tls
<Connector port="8009" protocol="AJP/1.3"redirectPort="8443" />
<Engine name="Catalina" defaultHost="localhost"> #引擎,名为catalina
<RealmclassName="org.apache.catalina.realm.LockOutRealm">
<RealmclassName="org.apache.catalina.realm.UserDatabaseRealm"
resourceName="UserDatabase"/> </Realm>
<Host name="localhost" appBase="webapps" #应用程序存放的位置,相对路径
unpackWARs="true" autoDeploy="true"> #如果是war文件格式,是否解压,是否自动部署
# 定义阀门,java中类的记录方式,当前所处域名反过来写的记录方式
<ValveclassName="org.apache.catalina.valves.AccessLogValve"directory="logs"
prefix="localhost_access_log." suffix=".txt" #日志的命名 suffix表示时间戳
pattern="%h %l %u %t "%r" %s %b" /> #访问日志的格式
</Host>
</Engine>
</Service>
</Server>
了解更多Tomcat,你可以关注我,定期发布技术文章和行业趋势分析。需要更多Java学习资料,可以在评论中留言并备注:Java,即可领取全套Java学习资料!