作者:Johnsonxu 链接:https://www.jianshu.com/p/637d462262ec 來源:简书 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。1、Tomcat的目录层次结构
bin: 存放启动和关闭Tomcat的脚本文件
conf: 存放Tomcat服务器的各种配置文件
lib: 存放tomcat服务器支撑的jar包
logs: 存放Tomcat的日志文件
temp: 存放Tomcat运行时产生的临时文件
webapps:web应用虽在目录,即供外界访问的web资源的存放目录
work: Tomcat的工作目录
2、JavaWeb应用的组成结构
|----html、jsp、css、js等文件,根目录下的文件外界可以直接访问
|----WEB-INF目录
|---------classes目录(java类)
|---------lib目录(java类运行所需的jar包)
|---------web.xml(web应用的配置文件)
WEB-INF 这个目录下的文件外界无法直接访问,由web服务器负责调用
3、JavaWeb应用的发布
开放式目录方式:
打包war方式: 使用 Jar -cvf *.war .
4、Tomcat的Server.xml文件
Tomcat本身由一系列可配置的组件构成,其中核心组件是Servlet容器组件,它是所有其他Tomcat组件的顶层容器。每个组件都可以在Tomcat安装目录/conf/server.xml文件中进行配置,每个Tomcat组件在server.xml文件中对应一种配置元素。
server.xml被称为Tomcat的主配置文件或全局配置文件,它完成两个任务:
(1)提供Tomcat组件的初始配置
(2)说明Tomcat的结构,含义,使Tomcat通过实例化组件完成启动及构建自身。
server.xml中描述的重要元素有 Server ,Service ,Connector ,Engine ,Host ,Context .
结构如下:
Tomcat-配置及原理
它们的用处是:
Server:
顶层元素,整个配置文件的根元素,表示整个Servlet容器或者Tomcat服务器包含多个Listener,一个GlobalNamingResources和一个Service
Service:
一组Connector和一个Engine的集合,这组Connector共用一个Engine来处理所有Connector收到的请求,负责处理所获得到的客户请求
Listener组:
监听器,用来管理Tomcat生命周期和全局资源
GlobalNamingResources:
配置系统的JNDI(Java Naming and Directory Interface)
Connector组:
连接器,代表外部客户之间的接口,将在一个指定的接口上侦听客户请求,并将获得的请求交给进行处理,然后把处理结果返回给客户
Engine:
引擎,处理中的所有客户请求,具体来说,获得一个交给的请求后,把这个请求匹配到某个上进行处理,如果没有找到合适的来进行处理,则把这个请求交给一个默认虚拟主机处理。
Host组:
虚拟主机,处理一个特定主机的请求,一般来说,每个虚拟主机都可以配置一个到多个Web应用,每个Web应用对应一个,获得的请求最终匹配到某个上,由它进行处理。
Context组:
Web应用组,每个Web应用由一个或多个Servlet组成,当获得一个请求后,将映射/conf/web.xml文件中的元素,匹配一个Servlet类进行处理并返回。当一个Web应用被初始化的时候,它将用自己的ClassLoader对象载入web.xml中定义的每个Servlet类。
我们启动Tomcat,在浏览器中输入:http://localhost:8080/ 会打开Tomcat的默认页面。实际上,这个页面是在Tomcat安装目录下的:/webapps/root/index.jsp;/webapps是Tomcat服务器用来存放Web应用的目录,每个Web应用都将在这建立各自的子目录,刚装好的Tomcat服务器虚拟主机的默认目录是/webapps/ROOT,所以默认会打开这个目录下的文件。流程如下:
在/conf目录下的web.xml配置文件中有如下配置:
index.html
index.htm
index.jsp
这里正是用来配置首页的,Tomcat将按顺序找出标签中的内容作为首页。而在我们的目录下,它只找到了index.jsp,所以会显示它;
但我们不能将所有的Web程序都放在ROOT里。所以我们需要更改Tomcat的虚拟目录;
要设置虚拟路径,需要在server.xml文件的中的Web应用添加一个子元素,实际上是配置了一个Web应用的物理存放地址到Tomcat虚拟路径的过程,使得Tomcat能够正确找到Web应用的物理存放路径;
步骤:
1)在server.xml的中加上如下代码:
2)我们把写好的Web应用中的所有文件放到下面的目录中:D:/myapp/test
3)重启Tomcat,在浏览器中输入:http://localhost:8080/test 即可测试
web.xml
Tomcat目录下/conf 可为不同的应用程序配置不同的上下文环境;用来对Servlet进行映射;
一个Web应用的根目录下的/WEB-INF目录中也有一个web.xml,当部署一个Web应用时,总是先加载/conf/web.xml,然后才加载自己Web应用的/WEB-INF/web.xml文件;但处理过程中,总是先使用自己的web.xml配置文件,如果无法处理,才把它交给Tomcat的web.xml文件。
当用户在浏览器中输入一个JSP文件地址:
http://localhost:8080/test/index.jsp
提交的请求最终由一个具体的Servlet来进行处理。我们请求传递的过程如下:
1)请求首先到达商品为8080的,然后把该请求交给引擎处理;
2)将这个请求匹配到某个去处理,因为这里默认处理的是localhost,所以请求传递到name属性是localhost的。
3)根据地址串中的子目录为"test",获知能够处理该请求的Servlet存放在虚拟目录为"test"的Web应用中,于是通过查找元素,找到path="test" 的,然后根据中的物理路径"docBase"的属性值查找Web应用的物理地址;
4)服务器根据对应的Web应用的“WEB_INF/web.xml”配置文件,查找能够处理index.jsp的servlet;
Tomcat-配置及原理
如上图所示:
connector负责接收客户请求,并向客户返回响应结果.在同一个service中,多个connector共享同一个Engine,同一个Engine可以有多个Host,一个Host可以有多个context;一个context对应一个web项目.在运行时,一个Tomcat会给每个context生成一个ServletContext类的实例.
http://localhost:8080/test/index.jsp
提交的请求最终由一个具体的Servlet来进行处理。我们请求传递的过程如下
请求首先到达商品为8080的,然后把该请求交给引擎处理;
将这个请求匹配到某个去处理,因为这里默认处理的是localhost,所以请求传递到name属性是localhost的。
根据地址串中的子目录为"test",获知能够处理该请求的Servlet存放在虚拟目录为"test"的Web应用中,于是通过查找元素,找到path="test" 的,然后根据中的物理路径"docBase"的属性值查找Web应用的物理地址;
服务器根据对应的Web应用的“WEB_INF/web.xml”配置文件,查找能够处理index.jsp的servlet;
5、Tomcat配置优化
1 ,增加JVM堆内存大小
通过修改conf 目录下的 catalina.sh文件
JAVA_OPTS="-Djava.awt.headless=true -Dfile.encoding=UTF-8
-server -Xms1024m -Xmx1024m
-XX:NewSize=512m -XX:MaxNewSize=512m -XX:PermSize=512m
-XX:MaxPermSize=512m -XX:+DisableExplicitGC"
-Xms – 指定初始化时化的栈内存
-Xmx – 指定最大栈内存
在重启你的Tomcat服务器之后,这些配置的更改才会有效。
2,maxThreads 连接数限制
maxThreads 是 Tomcat 所能接受最大连接数。一般设置不要超过8000以上,如果你的网站访问量非常大可能使用 运行多个Tomcat实例的方法。
maxThreads 配置要结合 JVM -Xmx 参数调整,也就是要考虑内存开销。
maxThreads 客户请求最大线程数
minSpareThreads 初始化时创建的 socket 线程数
maxSpareThreads 连接器的最大空闲 socket 线程数
3,压缩
压缩会增加Tomcat负担,最好采用Nginx + Tomcat 或者 Apache + Tomcat 方式,压缩交由Nginx/Apache 去做。
compression 打开压缩功能
compressionMinSize 启用压缩的输出内容大小,这里面默认为2KB
compressableMimeType 压缩类型
4,安全配置
1,当Tomcat完成安装后你首先要做的事情如下:首次安装完成后立即删除webapps下面的所有代码
rm -rf /srv/apache-tomcat/webapps/*
注释或删除 tomcat-users.xml 所有用户权限,看上去如下:
# cat conf/tomcat-users.xml
2, 隐藏版本信息
隐藏Tomcat版本信息
vim $CATALINA_HOME/conf/server.xml
connectionTimeout="20000"
redirectPort="8443"
maxThreads="8192"
minSpareThreads="64"
maxSpareThreads="128"
acceptCount="128"
enableLookups="false"
server="Neo App Srv 1.0"/>
运行 http://localhost:8080/
服务器信息已经被改为 Server: Neo App Srv 1.0
3, 应用程序安全
关闭war自动部署 unpackWARs="false" autoDeploy="false"。防止被植入木马等恶意程序
关闭 reloadable="false" 也用于防止被植入木马
6、Tomcat配置优化后实例
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"/>
一组Connector和一个Engine的集合,这组Connector共用一个Engine来处理所有Connector收到的请求,
负责处理所获得到的请求
-->
protocol="HTTP/1.1"
URIEncoding="UTF-8"
minSpareThreads="25"
maxSpareThreads="75"
enableLookups="false"
disableUploadTimeout="true"
connectionTimeout="20000"
acceptCount="300"
maxThreads="300"
maxProcessors="1000"
minProcessors="5"
useURIValidationHack="false"
redirectPort="8443"
server="Homeat App Srv 1.0"
/>
Tomcat 配置详解/优化方案
最新推荐文章于 2020-11-20 18:02:42 发布