Tomcat安装
官网下载文件
https://archive.apache.org/dist/tomcat/tomcat-7/v7.0.54/bin/
文中CentOS使用apache-tomcat-7.0.54.tar.gz,windows需要注册为服务时下载exe文件。
解压缩
# mkdir /usr/local/tomcat # cd /usr/local/tomcat # tar -zxvf apache-tomcat-7.0.54.tar.gz 生成链接以便版本升级 # ln -s apache-tomcat-7.0.54 server
启动Tomcat
# cd /usr/local/tomcat/apache-tomcat-7.0/bin # ./startup.sh Using CATALINA_BASE: /usr/local/tomcat/server Using CATALINA_HOME: /usr/local/tomcat/server Using CATALINA_TEMDIR: /usr/local/tomcat/server/temp Using JRE_HOME: /usr/java/default Using CLASS_PATH: /usr/local/tomcat/server/bin/bootstrap.jar:/usr/local/tomcat/server/bin/tomcat-juli.jar Tomcat started.
#显示Tomcat started并不代表着启动成功,一定要测试是否启动成功
#ps -ef|grep java #用来查看Tomcat是否启动成功,如果没有成功,到log/catalina.out里面看日志.(例如找不到java环境路径之类的)
开启Tomcat端口
方案一:
iptables命令开端口
# iptables -I INPUT -p tcp --dport 8080 -j ACCEPT
# service iptables save
# service iptables restart
方案二: 直接修改文件/etc/sysconfig/iptables
# vi /etc/sysconfig/iptables -A INPUT -p tcp -m tcp --dport 8080 -j ACCEPT # service iptables restart
Linux下开启/关闭防火墙命令
#1) 永久性生效,重启后不会复原
#开启: chkconfig iptables on
#关闭: chkconfig iptables off
#2) 即时生效,重启后复原
#开启: service iptables start
#关闭: service iptables stop
测试Tomcat是否成功
linux查看端口是否打开 netstat -an | grep 8080 curl ip:port
telnet或者curl时,服务一定要处于监听状态!!!即必须启动Tomcat.
Tomcat启动失败直接导致telnet端口不通,所以一定要先确保tomcat是否启动成功
浏览器查看 在浏览器输入: http://192.168.16.133:8080 如在本机可以输入: http://localhost:8080 出现tomcat的页面表示安装成功.
关闭Tomcat 停止Tomcat # ./shutdown.sh 查看Tomcat是否以关闭 ps -ef|grep java #查看是否关闭 kill -9 pid #强制关闭,不加-9为正常关闭
CentOS7以上开端口需要安装service iptables,详细看这里
systemctl stop firewalld #关闭高级firewalld工具 systemctl mask firewalld yum install iptables-services #安装iptables-services systemctl enable iptables #设置开机启动 systemctl stop iptables systemctl start iptables systemctl restart iptables systemctl reload iptables service iptables save
#开放端口 -A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 8080 -j ACCEPT
报错
apache-tomcat-8.5.57/bin/catalina.sh: line 505: /usr/java/jdk1.8.0_251/jre/bin/java: No such file or directory
出现这个说明jdk的配置环境变量出错了,检查下/usr/java/jdk1.8.0_251/是不是在/etc/profile中配置正确。
apache-tomcat-8.5.57/bin/catalina.sh: /usr/java/jdk1.8.0_251/jre/bin/java: /lib/ld-linux.so.2: bad ELF interpreter: No such file or directory
sudo yum install glibc.i686 #安装glibc底层包
修改Tomcat堆内存和非堆内存
jdk1.7不修改内存会导致内存溢出,例如java.lang.OutOfMemoryError: PermGen space
Xms128m #memoryStart(初始内存大小) Xmx512G #memoryMax(内存最大大小) -XX:PermSize=128M #JVM初始分配的非堆内存(方法区) -XX:MaxPermSize=512M #JVM最大允许分配的非堆内存(方法区),按需分配
linux
进入Tomcat中的/bin/catalina.sh
在catalina.sh中echo"Using CATALINA_BASE"之前的一行添加如下代码:
JAVA_OPTS="-Djava.awt.headless=true -Dfile.encoding=UTF-8 -server -Xms128m -Xmx1024m -XX:NewSize=512m -XX:MaxNewSize=256m -XX:PermSize=128m -XX:MaxPermSize=512m"
windows非安装模式
进入Tomcat中的/bin/catalina.bat
找到set "JAVA_OPTS字样的,在下面新加一行。
set "JAVA_OPTS=-Xms128m -Xmx512m -XX:PermSize=128m -XX:MaxPermSize=512m"
windows安装模式
Tomcatw.exe -> Java选项卡 -> 在Java Options中添加。
-Xms128M -Xmx512M -XX:PermSize=128M -XX:MaxPermSize=512M
点击确定后,不要用Tomcatw.exe的Start启动服务(这样jvisualvm无法找到此进程),使用Tomcat.exe启动进程然后用jvisualvm查看实际的内存大小。
修改Tomcat传输编码
vi ./conf/server.xml
<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" URIEncoding="utf-8" server="unknown"/>
server属性是为了防止http响应出tomcat的详细信息,这样对方会根据tomcat信息找到相应的漏洞进行攻击。
使用指定版本JDK
tomcat使用指定JDK,在bin目录中的setclasspath.bat文件前面添加:
set JAVA_HOME=D:\ProgramFiles_QY\Java\jdk1.7.0_80 set JRE_HOME=D:\ProgramFiles_QY\Java\jre
从tomcat执行中查看
修改Tomcat线程数
Windows Tomcat允许每个进程maxThreads(最大线程数)2000
Linux Tomcat允许每个进程maxThreads(最大线程数)1000
vi ./conf/server.xml
<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" maxThreads="800" acceptCount="1000"/>
maxThreads:tomcat起动的最大线程数,即同时处理的任务个数,默认值为200
acceptCount:当tomcat起动的线程数达到最大时,接受排队的请求个数,默认值为100
情况1:接受一个请求,此时tomcat起动的线程数没有到达maxThreads,tomcat会起动一个线程来处理此请求。
情况2:接受一个请求,此时tomcat起动的线程数已经到达maxThreads,tomcat会把此请求放入等待队列,等待空闲线程。
情况3:接受一个请求,此时tomcat起动的线程数已经到达maxThreads,等待队列中的请求个数也达到了acceptCount,此时tomcat会直接拒绝此次请求,返回connection refused。
- maxIdleTime: 最大空闲时间,超过这个空闲时间,且线程数大于minSpareThreads的,都会被回收,默认值1分钟(60000ms);
- minSpareThreads:最小空闲线程数,任何情况都会存活的线程数,即便超过了最大空闲时间,也不会被回收,默认值4;
- maxSpareThreads:最大空闲线程数,在最大空闲时间(maxIdleTime)内活跃过,此时空闲,当空闲时间大于maxIdleTime则被回收,小则继续存活,等待被调度,默认值50;
- connectionTimeout:网络连接超时,假设设置为0表示永不超时,这样设置隐患巨大,通常可设置为30000ms,默认60000ms。
连接超时
官网:https://tomcat.apache.org/tomcat-9.0-doc/config/http.html
keepAliveTimeout
maxKeepAliveRequests
多开Tomcat
修改端口
修改端口,两个tomcat的下面三种端口不能一样
<!--这里的port不能与第一个Tomcat中server.xml中配置相同,默认为8005--> <Server port="8006" shutdown="SHUTDOWN"> <!--这里的port修改成8081,第一个Tomcat默认的是8080--> <Connector port="8081" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" /> <!--这里的port修改成8010,第一个Tomcat默认的是8009,这是tomcat自带的第二个连接器,它监听8009端口,负责和其他的HTTP服务器建立连接。在把Tomcat与其他HTTP服务器集成时,就需要用到这个连接器。--> <Connector port="8010" protocol="AJP/1.3" redirectPort="8443" />
配置环境变量
分别为两个tomcat配置单独的环境变量
vi /etc/profile,配置环境变量
#配置两个tomcat的环境变量 ##########first tomcat########### CATALINA_BASE=/usr/local/tomcat CATALINA_HOME=/usr/local/tomcat TOMCAT_HOME=/usr/local/tomcat export CATALINA_BASE CATALINA_HOME TOMCAT_HOME ##########first tomcat############ ##########second tomcat########## CATALINA_BASE2=/usr/local/tomcat_2 CATALINA_HOME2=/usr/local/tomcat_2 TOMCAT_HOME2=/usr/local/tomcat_2 export CATALINA_BASE2 CATALINA_HOME2 TOMCAT_HOME2 ##########second tomcat##########
使环境变量生效
source /etc/profile
配置catalina.sh
只配置2号tomcat_2,1号tomcat用默认的环境变量
vim /usr/local/tomcat_2/bin/catalina.sh
#在代码# OS specific support. $var _must_ be set to either true or false.下面增加如下代码
export CATALINA_BASE=$CATALINA_BASE2
export CATALINA_HOME=$CATALINA_HOME2
Tomcat启动后,两个tomcat路径是自己的tomcat目录才可以。
修改文件上传限制
tomcat目录下的/conf/server.xml,为Connector添加maxPostSize参数
maxPostSize="-1"
disableUploadTimeout=true
maxPostSize:参数值“-1”表示不做大小限制。不设置maxPostSize参数意为使用默认的大小,默认2097152bytes,即为2MB。
disableUploadTimeout:允许Servlet容器,正在执行使用一个较长的连接超时值,以使Servlet有较长的时间来完成它的执行,默认值为false。
注意:
tomcat7.0.63之前 给maxPostSize设置小于等于0的值都可表示不限制
tomcat7.0.63及之后 给maxPostSize设置小于0的值可表示不限制
如果在tomcat7.0.63之后设置maxPostSize=“0”,那将会获取不到传输的数据。
配置web管理帐号
修改文件conf/tomcat-users.xml,在<tomcat-users>元素中添加帐号密码,需要指定角色. # vi /usr/local/tomcat/server/conf/tomcat-users.xml <tomcat-users> <user name="admin" password="admin" roles="admin-gui,manager-gui" /> </tomcat-users>
配置web访问端口
可以修改conf目录下的文件server.xml,修改Connector元素(Tomcat的默认端口是8080),需要重新启动Tomcat服务生效.
# vi /usr/local/tomcat/server/conf/server.xml <Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" />
配置AJP端口
AJP(Apache JServ Protocol)是定向包协议。因为性能原因,使用二进制格式来传输可读性文本。WEB服务器通过 TCP连接 和SERVLET容器连接。WEB服务器通过TCP连接和SERVLET容器连接。
tomcat最主要的功能是提供Servlet/JSP容器,尽管它也可以作为独立的Java Web服务器,它在对静态资源(如HTML文件或图像文件)的处理速度,以及提供的Web服务器管理功能方面都不如其他专业的HTTP服务器,如IIS和Apache服务器。因此在实际应用中,常常把Tomcat与其他HTTP服务器集成。对于不支持Servlet/JSP的HTTP服务器,可以通过Tomcat服务器来运行Servlet/JSP组件。
JK插件
Tomcat提供了专门的JK插件来负责Tomcat和HTTP服务器的通信。把JK插件安置在HTTP服务器上。当HTTP服务器接收到客户请求时,它会通过JK插件来过滤URL,JK插件根据预先配置好的URL映射信息,决定是否要把客户请求转发给Tomcat服务器处理。
配置JMX端口
JMX(Java Management Extensions,即Java管理扩展)是一个为应用程序、设备、系统等植入管理功能的框架。JMX可以跨越一系列异构操作系统平台、系统体系结构和网络传输协议,灵活的开发无缝集成的系统、网络和服务管理应用。
Https设置
https://www.cnblogs.com/aeolian/p/11906695.html
Tomcat的目录结构
·bin //存放Tomcat的命令脚本文件
·conf //存放Tomcat服务器的各种配置文件,最主要是server.xml
·lib //存放Tomcat服务器支撑jar包
·logs //存放日志文件
·temp //存放临时文件
·webapps //web应用所在目录,外界访问web资源的存放目录
·work //Tomcat的工作目录
web应用的目录结构
webapp -- web应用所在目录
|--- html, jsp, css, js文件等 -- 这些文件一般在web应用根目录下,根目录下的文件外界可以直接访问.
|--- WEB-INF 目录 -- java类、jar包、web配置文件存在这个目录下,外界无法直接访问,由web服务器负责调用.
|--- classes 目录 -- java类
|--- lib 目录 -- java类运行所需要的jar包
|--- web.xml 文件 -- web应用的配置文件
9.虚拟主机的配置
指定虚拟主机名,修改conf/server.xml,添加<host>元素.
<host name="hostname.domainname" appBase="/webapps">
<Context path="/webapp" docBase="/webapps/webapp"/>
</host>
例:
<host name="www.163.com" appBase="/webapps">
</host>
<host name="mail.163.com" appBase="/mailapps">
</host>
须设置DNS解析(host文件或DNS系统).
10.web应用和虚拟目录的映射.
可以修改xml配置文件的<Context>元素来设置web应用和虚拟目录的映射.
·conf/server.xml //在<host>元素下添加<Context path="/webname" docBase="/webappdir"/>,需要重新启动Tomcat服务生效,不建议使用.
·conf/context.xml //添加<Context>元素所有web应用有效.
·conf/[enginename]/[hostname]/context.xml.default //[enginename]一般是Catalina,主机[hostname]的所有web应用有效.
·conf/[enginename]/[hostname]/ //在目录下任意建一个文件(扩展名xml),文件名即为虚拟目录名.多级目录使用#分割. <Context docBase="/webappdir"/>
//缺省值web应用目录可以定义为ROOT.xml,添加<Context docBase="/webappdir"/>,需重新启动Tomcat服务器.
·META-INF/context.xml //
可以将web应用放在webapps目录下让Tomcat服务器自动映射,适用开发环境,实际运用环境中不用自动映射。
如没有修改配置文件,web应用目录为ROOT时则为默认web应用。
11.web应用首页(welcome file)的配置
修改web应用的配置文件: [webapp]/WEB-INF/web.xml
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
12.tomcat的理论并发值为500(不调用controller等业务,只有请求),实际上并发量300左右
Windows
注册服务
service.bat install tomcat7
删除服务
service.bat install tomcat7 //用tomcat自己的命令 sc delete tomcat7 //或者用sc命令
Tomcat启动后get接收的参数乱码
在Connector中加入URIEncoding="UTF-8"即可。
<Connector port="8080" protocol="HTTP/1.1" URIEncoding="UTF-8" connectionTimeout="20000" redirectPort="8443" />
bat启动控制台显示乱码
打开tomcat文件夹到conf目录下找到logging.properties文件
找到 java.util.logging.ConsoleHandler.encoding = utf-8
更改为 java.util.logging.ConsoleHandler.encoding = GBK
可能遇到情况
若双击start.bat运行不了,查看是否之前安装过安装版。若安装过需要卸载程序、删除服务、删除环境变量(CATALINA_HOME以及path中的部分)、删除注册表
注意不要觉得修改了正确的环境变量路径就好了,一定要把安装版的所有东西删除干净。
Tomcat删除注册表
-
运行regedit ,回车。
-
然后按crtl+f键,在对话框里输入tomcat(或者tomcat的路径),查询。
-
找到正确的tomcat相关均删除。
-
F3按一下就是继续查找。查找完了后重启电脑即可。(服务器的话不好重启可以用安装版)
-
或者重新安装一次,装好后再卸载。不过建议用解压版的。