Tomcat

介绍

Tomcat是Apache软件基金会(Apache Software Foundation)的Jakarta 项目中的一个核心项目,由Apache、Sun和其他一些公司及个人共同开发而成。

Tomcat服务器是一个免费的开放源代码的Web应用服务器,属于轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试JSP程序的首选

Tomcat 官网: http://tomcat.apache.orghttp://tomcat.apache.org/

Tomcat安装

Tomcat是java语言编写程序,首先在虚拟机中安装jdk

1.安装jdk的rpm包

root@localhost tmp\]# cd /tmp \[root@localhost tmp\]# rpm -ivh jdk-8u251-linux-x64.rpm

此时:JDK已经被安装在了 /usr/java/jdk1.80_xxx 目录下。

2.配置环境变量

root@localhost java\]# vi /etc/profile 在profile中尾部追加一下3行配置 export JAVA_HOME=/usr/java/default export PATH=$PATH:$JAVA_HOME/bin export CLASSPATH=. //刷新环境变量 \[root@localhost java\]# source /etc/profile 如果刷新环境变量时,有异常信息,大多是配置环境变量的关键字有错

注意:.rpm包如果依赖一些组件,需要我们手动解决安装依赖

3.安装Tomcat

#获取Tomcat压缩包

#解压

root@localhost opt\]# tar xzvf apache-tomcat-8.5.78.tar.gz

Tomcat为java语言编写,不需要编译安装,解压即用

4.启停命令

注意:Tomcat兼容linux和windows系统,其中.bat文件为windows系统可用.sh文件为linux系统可用

5.启动Tomcat

root@localhost bin\]# /opt/apache-tomcat-8.5.78/bin/startup.sh ![](https://i-blog.csdnimg.cn/direct/522a97cb4919486c8ecea425606f7524.png) 6.访问Tomcat #查看Tomcat程序占用端口 \[root@localhost bin\]# netstat -tunlp ![](https://i-blog.csdnimg.cn/direct/ee477088d1904d108834f6fff12102b2.png) #浏览器输入访问地址 http://主机ip:8080 ![](https://i-blog.csdnimg.cn/direct/b26e65f50e84456fbe99ef3bdac88753.png) 7.关闭Tomat > #方法一,运行shutdown.sh脚本 > > \[root@localhost bin\]# /opt/apache-tomcat-8.5.78/bin/shutdown.sh > > #方法二,通过8005端口关闭,此端口只能本机访问 > > \[root@localhost bin\]# telnet 127.0.0.1 8005 #通过telnet连接8005端口 > > Trying 127.0.0.1... > > Connected to 127.0.0.1. > > Escape character is '\^\]'. > > SHUTDOWN #输入SHUTDOWN ## Tomcat项目部署 1.将项目放入tomcat的webapps文件夹中 ![](https://i-blog.csdnimg.cn/direct/dfc8e5ba2d11408082896d0c9fcd87d0.png) ![](https://i-blog.csdnimg.cn/direct/2eddc01bbfd845158eb6ccaf7ce7d3e0.png) 2.开启tomcat \[root@localhost webapps\]# /opt/apache-tomcat-8.5.78/bin/startup.sh 3.访问项目 访问路径为 http://主机ip:8080/项目名/资源名 ## Tomcat主配置文件解析 Tomcat配置文件被存放在conf中,其中最主要的配置文件为server.xml ```html #配置文件示例 ``` #### Server 是整个配置文件的根元素。表示整个Catalina容器。 > #参数信息 > > className:实现了org.apache.catalina.Server接口的类名,默认实现了 org.apache.catalina.core.StandardServer类; > > Port:Tomcat服务器监听用于关闭Tomcat服务器的命令(必须); > > Shutdown:发送到端口上用于关闭Tomcat服务器的命令; #### Connector 连接器,负责接收客户的请求,以及向客户端回送响应的消息 > #参数解析 > > allowTrace:是否允许HTTP的TRACE方法,默认为false; > > emptySessionPath:如果设置为true,用户的所有路径都将设置为/,默认为false; > > enableLookups:调用request、getRemoteHost()执行DNS查询,以返回远程主机的主机名,如果设置为false,则直接返回IP地址; > > maxPostSize:指定POST方式请求的最大量,没有指定默认为2097152; > > protocol:值必须为HTTP1.1,如果使用AJP处理器,该值必须为AJP/1.3; > > proxyName:如这个连接器正在一个代理配置中被使用,指定这个属性,在request.getServerName()时返回; > > redirectPort:如连接器不支持SSL请求,如收到SSL请求,Catalina容器将会自动重定向指定的端口号,让其进行处理; > > scheme:设置协议的名字,在request.getScheme()时返回,SSL连接器设为"https",默认为"http"; > > secure:在SSL连接器可将其设置为true,默认为false; > > URIEncoding:用于解码URL的字符编码,没有指定默认值为ISO-8859-1; > > useBodyEncodingForURI:主要用于Tomcat4.1.x中,指示是否使用在contentType中指定的编码来取代URIEncoding,用于解码URI查询参数,默认为false; > > xpoweredBy:为true时,Tomcat使用规范建议的报头表明支持Servlet的规范版本,默认为false; > > acceptCount:当所有的可能处理的线程都正在使用时,在队列中排队请求的最大数目。当队列已满,任何接收到的请求都会被拒绝,默认值为10; > > bufferSize:设由连接器创建输入流缓冲区的大小,以字节为单位。默认情况下,缓存区大的大小为2048字节; > > compressableMimeType:MIME的列表,默认以逗号分隔。默认值是text/html,text/xml,text/plain; > > compression:指定是否对响应的数据进行压缩。off:表示禁止压缩、on:表示允许压缩(文本将被压缩)、force:表示所有情况下都进行压缩,默认值为off; > > connectionTimeout:设置连接的超时值,以毫秒为单位。默认值为60000=60秒; > > disableUploadTimeOut:允许Servlet容器,正在执行使用一个较长的连接超时值,以使Servlet有较长的时间来完成它的执行,默认值为false; > > maxHttpHeaderSize:HTTP请求和响应头的最大量,以字节为单位,默认值为4096字节; > > maxKeepAliveRequest:服务器关闭之前,客户端发送的流水线最大数目。默认值为100; > > maxSpareThreads:允许存在空闲线程的最大数目,默认值为50; > > minSpareThreads:设当连接器第一次启协创建线程的数目,确保至少有这么多的空闲线程可用。默认值为4; > > port:服务端套接字监听的TCP端口号,默认值为8080(必须); > > socketBuffer:设Socket输出缓冲区的大小(以字节为单位),-1表示禁止缓冲,默认值为9000字节; > > toNoDelay:为true时,可以提高性能。默认值为true; > > threadPriority:设JVM中请求处理线程优先级。默认值为NORMAL-PRIORITY; #### Engine 为特定的Service处理所有的请示。每个Service只能包含一个Engine元素,它负责接收和处理此Service所有的连接器收到的请求,向连接发回响应,并最终显示在客户端。\至少有一个\元素,必须至少有一个\属性的名字与defaultHost指定的名字相匹配。 >  className:实现org.apache.catalina.Engine接口,默认实现类为org.apache.catalina.core.StandardEngine类; > >   defaultHost:默认主机名,值必须与\的name值相匹配; > >   name:指定Engine的逻辑名字(必须); > >   jvmRoute:在负载匀衡中使用的标识符,必须唯一 #### Host 表示一个虚拟主机,为特定的虚拟主机处理所有请求 >   appBase:设定应用程序的基目录,绝对路径或相对于%CATALINA_HOME%的路径名; > >   autoDeploy:指示Tomcat运行时,如有新的WEB程序加开appBase指定的目录下,是否为自动布署,默认值为true; > >   className:实现了org.apache.catalina.Host接口的类,标准实现类为org.apache.catalina.core.StandardHost类; > >   deployOnStartup:Tomcat启动时,是否自动部署appBase属性指定目录下所有的WEB应用程序,默认值为true; > >   name:虚拟主机的网络名(必须); #### context 一个WEB应用程序,处理当前WEB应用程序的所有请求,每一个\必须使用唯一的上下文路径 >   className:实现了org.apache.catalina.Context接口的类,标准实现类org.apache.catalina.core.StandardContext类; > >   cookies:是否将Cookie应用于Session,默认值为true; > >   crossContext:是否允许跨域访问,为true时,在程序内调用ServletContext.getContext()方法将返回一个虚拟主机上其它web程序的请求调度器;默认值为false,调 径用  getContext()返回为null; > >   docBase:绝对路径或相对于Host的appBase 属性的相对路径; > >   privileged:为true,允许Web应用程序使用容器的Servlet; > >   path:指定上下文路径。一个虚拟主机中,上下文路径必须唯一; > >   reloadable:为true,Tomcat运行时,如果WEB-INF/classes和WEB-INF/lib目录中有改变,Tomcat会自动重新加载该WEB应用程序。虽方便,但开销也大,默认值为false,我们在调用可以打开,发布后再关闭; > >   cacheMaxSize:静态资源缓存最大值,以KB为单位,默认值为10240KB; > >   cachingAllowed:是否允许静态资源缓存,默认为true; > >   caseSensitive:默认为true,资源文件名大小写敏感,如果为false大小写不敏感; > >   unpackWAR:默认为true; > >   workDir:为WEB应用程序内部的Servlet指定临时读写的目录路径名。如没有设置,则Tomcat会在%CATALINA_HOME%/work目录下提供一个合适的目录; ```html www.test.com #创建ipress分库,并设置编码为utf8 > > mysql\> create database jpress default character set utf8; > > #创建用户 > > mysql\> grant all on jpress.\* to jpress@'%' identified by '111111'; 2.部署项目 将war包放入tomcat的项目目录 ![](https://i-blog.csdnimg.cn/direct/58ec66322ed443e2a18b6343461eb47a.png) 3.启动tomcat \[root@localhost webapps\]# /opt/apache-tomcat-8.5.78/bin/startup.sh ![](https://i-blog.csdnimg.cn/direct/bd8c54d3c05b49098b88fb51eb85ab76.png) 4.访问项目 ![](https://i-blog.csdnimg.cn/direct/805c92eeaa9a4220a55a9970085ff413.png) 5.配置数据库信息 ![](https://i-blog.csdnimg.cn/direct/263bada716454b9ea38170ac7cdcc863.png) 6.配置网站信息 ![](https://i-blog.csdnimg.cn/direct/a270764b37004cd89d9a790a2074bc6d.png) 7.访问网站,登录 > http://主机ip:8080/jpress-web-newest/admin/login ![](https://i-blog.csdnimg.cn/direct/ed1b082eee0a4df0b51f136950ccb168.png) ![](https://i-blog.csdnimg.cn/direct/98dece84b2584947990e5b543b682237.png) #### 部署当当网--文件夹 1.配置数据库 > # 创建分库 > > mysql\> create database dang; > > # 创建用户 > > mysql\> grant all on dang.\* to dang@'%' identified by '111111'; > > # 导入数据 > > mysql\> use dang > > mysql\> source /opt/dang.sql 2.修改项目中数据库连接配置 > 位置:\\WEB-INF\\classes ![](https://i-blog.csdnimg.cn/direct/7f36ec0fc6ab4e228602e91146108b2e.png) ![](https://i-blog.csdnimg.cn/direct/612f060668444a2fa96947749bcae16b.png) 3.部署项目 ![](https://i-blog.csdnimg.cn/direct/64738dfb5c4f4591b9e910c439d41ef7.png) 4.启动项目 > > ``` > [root@localhost myweb]# /opt/apache-tomcat-8.5.78/bin/startup.sh > ``` 5.访问 > > ``` > http://主机ip:8080/dang/Book/BookFace.do > ``` ### Tomcat优化 #### 安全优化 ##### telnet管理端口保护(强制) | **类别** | **配置内容及说明** | **标准配置** | **备注** | |--------------|-------------------------------------------------------|-------------------------------------------------------------|--------------------------------------------------------------| | telnet管理端口保护 | 1.修改默认的8005管理端口为不易猜测的端口(大于1024);2.修改SHUTDOWN指令为其他字符串; | \ | 1.以上配置项的配置内容只是建议配置,可以按照服务实际情况进行合理配置,但要求端口配置在**8000\~8999**之间 | ##### 降权启动(强制) | **类别** | **配置内容及说明** | **标准配置** | **备注** | |--------|--------------------------------------------------------------------------------------------|----------|---------------------------------------------| | 降权启动 | 1.tomcat启动用户权限必须为非root权限,尽量降低tomcat启动用户的目录访问权限;2.如需直接对外使用80端口,可通过普通账号启动后,配置iptables规则进行转发; | | 避免一旦tomcat 服务被入侵,黑客直接获取高级用户权限危害整个server的安全; | ##### 文件列表访问控制(强制) ![](https://i-blog.csdnimg.cn/direct/6543e4371e914ce68578eba0905ad5e6.png) | **类别** | **配置内容及说明** | **标准配置** | **备注** | |----------|------------------------------------------------|-----------------------------------------------------------------------------------------------------------------|-----------------------------------| | 文件列表访问控制 | 1.conf/web.xml文件中default部分listings的配置必须为false; | \\**listings** \\**false**\\ | false为不列出目录文件,true为允许列出,默认为false; | ##### **起停脚本权限回收(推荐)** | **类别** | **配置内容及说明** | **标准配置或操作** | **备注** | |----------|---------------------------------------------------------------|----------------------------|-----------------------| | 起停脚本权限回收 | 去除其他用户对Tomcat的bin目录下shutdown.sh、startup.sh、catalina.sh的可执行权限; | chmod -R 744 tomcat/bin/\* | 防止其他用户有起停线上Tomcat的权限; | ##### 访问日志格式规范(推荐) conf/server.xml | **类别** | **配置内容及说明** | **标准配置或操作** | **备注** | |----------|--------------------------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|-------------------------------------------------| | 访问日志格式规范 | 开启Tomcat默认访问日志中的Referer和User-Agent记录 | \ | 开启Referer和User-Agent是为了一旦出现安全问题能够更好的根据日志进行问题排查; | #### 性能优化 **上策:优化代码** 该项需要开发经验足够丰富,对开发人员要求较高 **中策:jvm\*** \*优化机制\*\* **垃圾回收机制** **把不需要的内存回收** 优化jvm--优化垃圾回收策略 优化catalina.sh配置文件。在catalina.sh配置文件中添加以下代码 > > ``` > # tomcat分配1G内存模板 > 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"     > ​ > # 重启服务 > su -c '/home/tomcat/tomcat8_1/bin/shutdown.sh' tomcat > su -c '/home/tomcat/tomcat8_1/bin/startup.sh' tomcat > ``` **下策:加足够大的内存** 该项的资金投入较大 **下下策:每天0点定时重启tomcat** 使用较为广泛

相关推荐
a1800793108011 分钟前
软件工程面试题(二十二)
java·面试·软件工程
RainbowSea14 分钟前
4. RabbitMQ 发布确认的配置详细说明
java·消息队列·rabbitmq
robin_suli26 分钟前
Spring事务的传播机制
android·java·spring
青云交27 分钟前
Java 大视界 -- Java 大数据在智能电网电力市场交易数据分析与策略制定中的关键作用(162)
java·大数据·数据分析·交易策略·智能电网·java 大数据·电力市场交易
m0Java门徒33 分钟前
Java 递归全解析:从原理到优化的实战指南
java·开发语言
云徒川43 分钟前
【设计模式】原型模式
java·设计模式·原型模式
张张张3121 小时前
4.2学习总结 Java:list系列集合
java·学习
KATA~1 小时前
解决MyBatis-Plus枚举映射错误:No enum constant问题
java·数据库·mybatis
xyliiiiiL1 小时前
一文总结常见项目排查
java·服务器·数据库
shaoing1 小时前
MySQL 错误 报错:Table ‘performance_schema.session_variables’ Doesn’t Exist
java·开发语言·数据库