Tomcat # Tomcat基础知识
Posted LRcoding
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Tomcat # Tomcat基础知识相关的知识,希望对你有一定的参考价值。
1. Tomcat
⼀个运⾏JAVA的⽹络服务器,底层是Socket的⼀个程序,它也是JSP和Serlvet的⼀个容器。
2. URL和URI
3. Tomcat目录结构
进入conf 文件夹,查看具体的配置文件:
- server.xml:Tomcat 的主配置文件,包含 Service, Connector, Engine, Realm, Valve, Hosts 主组件的相关配置信息;
- web.xml:遵循 Servlet 规范标准的配置文件,用于配置 servlet,并为所有的 Web 应用程序提供包括MIME 映射等默认配置信息;
- context.xml:所有 host 的默认配置信息;
- logging.properties:日志相关配置;
- tomcat-users.xml:Realm 认证时用到的相关角色、用户和密码等信息;Tomcat自带的manager默认情况下会用到此文件;在Tomcat中添加/删除用户,为用户指定角色等将通过编辑此文件实现;
- catalina.policy:Java相关的安全策略配置文件,在系统资源级别上提供访问控制的能力,以安全模式启动Tomcat会使用这个配置
- catalina.properties:Tomcat 内部 package 的定义及访问相关的控制,也包括对通过类装载器装载的内容的控制,Tomcat 在启动时会事先读取此文件的相关设置;
- jaspic-providers.xml:用户认证配置文件
4. server.xml 配置
Tomcat 的主配置文件,包含 Service, Connector, Engine, Realm, Valve, Hosts 主组件的相关配置信息;
<!-- port: 接收shutdown指令的端口,默认仅允许通过本机访问,默认为8005;
shutdown: 发往此Server用于实现关闭tomcat实例的命令字符串,默认为SHUTDOWN;
使用方式: telnet localhost 8005, 输入SHUTDOWN即可关闭tomcat
如果你不配置这两个属性,Tomcat的这种关闭机制还是会运行的。你不想暴露这种关闭机制的
话,可以将端口设置成poer=-1,shutdown设置成一个复杂的字符串,比如shutdown="xscdeww#12"
-->
<Server port="8005" shutdown="SHUTDOWN">
<!-- 默认配置的Listener -->
<Listener className="org.apache.catalina.startup.VersionLoggerListener" />
<Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="on" />
<Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener" />
<Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener" />
<Listener className="org.apache.catalina.core.ThreadLocalLeakPreventionListener" />
<!-- 应用于整个服务器的JNDI映射,此可以避免每个Web应用程序都需要在各自的web.xml创建,这在web应用程序以WAR的形式存在时尤为有用。-->
<GlobalNamingResources>
<Resource name="UserDatabase" auth="Container"
type="org.apache.catalina.UserDatabase"
description="User database that can be updated and saved"
factory="org.apache.catalina.users.MemoryUserDatabaseFactory"
pathname="conf/tomcat-users.xml" />
</GlobalNamingResources>
<!-- Service是多个Connector和单个Container的组合。Container是一个抽象的概念,由Engine, Realm,Valve和Hosts主组组成。
在server.xml配置文件中可以同时配置【【多个Service标签】】
-->
<Service name="Catalina">
<!-- 默认情况下,每个连接器connector会使用自己创建的线程池,我们也可以配置多个线程池让连接器共享-->
<!-- 如果想让连接器connector组件使用这个线程池,需要在连接器组件中配置executor属性.
另外,Executor元素的配置应该放在Connector配置的前面,这样才会先加载Executor的配置。
Executor的主要属性包括:
- name:该线程池的名称id
- maxThreads:线程池中最大活跃线程数,默认值200(Tomcat7和8都是)
- minSpareThreads:线程池中保持的最小线程数,最小值是25
- maxIdleTime:线程空闲的最大时间,当空闲超过该值时关闭线程(除非线程数小于
minSpareThreads),单位是ms,默认值60000(1分钟)
- daemon:是否后台线程,默认值true
- threadPriority:线程优先级,默认值5
- namePrefix:线程名字的前缀,线程池中线程名字为:namePrefix+线程编号
-->
<Executor name="tomcatThreadPool" namePrefix="catalina-exec-"
maxThreads="150" minSpareThreads="4"/>
<!-- Connector是Tomcat中请求接收和响应返回的端点,Tomcat中支持HTTP、AJP和APR等协议。
下面的配置定义了一个支持Http协议的连接器,监听8080端口
Connector组件支持以下组件的配置:
- address:指定连接器监听的地址,默认为所有地址,即0.0.0.0;
- port:监听的端口,默认为0;
- protocol:连接器使用的协议,默认为HTTP/1.1,定义AJP协议时通常为AJP/1.3;
- connectionTimeout:等待客户端发送请求的超时时间,单位为毫秒,默认为60000,即1分钟;
- maxThreads:支持的最大并发连接数,默认为200;
- redirectPort:如果某连接器支持的协议是HTTP,当接收客户端发来的HTTPS请求时,
则转发至此属性定义的端口;
- enableLookups:是否通过request.getRemoteHost()进行DNS查询以获取客户端的主机名;
默认为true;
- acceptCount:设置等待队列的最大长度;
- executor:指定共享的线程池组件;
-->
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443"
executor="tomcatThreadPool" />
<!-- 下面是进行支持Https的配置 -->
<!--
<Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol"
maxThreads="150" SSLEnabled="true">
<SSLHostConfig>
<Certificate certificateKeystoreFile="conf/localhost-rsa.jks"
type="RSA" />
</SSLHostConfig>
</Connector>
<Connector port="8443" protocol="org.apache.coyote.http11.Http11AprProtocol"
maxThreads="150" SSLEnabled="true" >
<UpgradeProtocol className="org.apache.coyote.http2.Http2Protocol" />
<SSLHostConfig>
<Certificate certificateKeyFile="conf/localhost-rsa-key.pem"
certificateFile="conf/localhost-rsa-cert.pem"
certificateChainFile="conf/localhost-rsa-chain.pem"
type="RSA" />
</SSLHostConfig>
</Connector>
-->
<!-- AJP 1.3 的配置 -->
<!--
<Connector protocol="AJP/1.3"
address="::1"
port="8009"
redirectPort="8443" />
-->
<!-- Tomcat内部有4个级别的容器,分别是Engine、Host、Context和Wrapper。
Engine代表全局Servlet引擎,每个Service组件只能包含一个Engine容器组件,
但Engine组件可以包含若干Host容器组件
-->
<Engine name="Catalina" defaultHost="localhost">
<Realm className="org.apache.catalina.realm.LockOutRealm">
<Realm className="org.apache.catalina.realm.UserDatabaseRealm"
resourceName="UserDatabase"/>
</Realm>
<!-- 配置虚拟主机,可以配置多个-->
<Host name="localhost" appBase="webapps"
unpackWARs="true" autoDeploy="true">
<!-- 一个Host下面可以有多个Context,也就是可以部署多个Webapp应用,
一个webapp对应一个Context,用不同的ContextPath区分
-->
<Context path="/web1" docBase="E:\\blog"/>
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
prefix="localhost_access_log" suffix=".txt"
pattern="%h %l %u %t "%r" %s %b" />
</Host>
</Engine>
</Service>
</Server>
5. 虚拟目录
-
在其他盘符下创建⼀个web站点⽬录,并创建WEB-INF⽬录和⼀个html⽂件。
-
找到Tomcat⽬录下/conf/server.xml⽂件
-
在server.xml中的
<Host>
节点下添加如下代码。path表示的是访问时输⼊的web项⽬名,docBase表示的是站点⽬录的绝对路径
<Context path="/web1" docBase="D:\\web1"/>
在浏览器输入
localhost:8080/web1/a.txt
就可以直接 查看 D:\\web1 下的 a.txt 文件的内容
6. 虚拟主机
-
在tomcat的server.xml⽂件中添加主机名
- name:访问的主机名
- appBase:本地的映射地址
- unpackWARs:是否解压 war 文件
- autoDeploy:是否自动部署
<Host name="lwclick" appBase="D:\\web1" unpackWARs="true" autoDeploy="true"> </Host>
-
访问:
lwclick:8080/web1/test.html
7. 浏览器访问WEB资源的流程图
以上是关于Tomcat # Tomcat基础知识的主要内容,如果未能解决你的问题,请参考以下文章