tomcat是能够解析JSP的动态web-server。
官方网站:http://tomcat.apache.org/
由Apache、Sun 和其他一些公司及个人共同开发而成,所以最新的Servlet 和JSP 规范总是能在Tomcat 中得到体现
servlet:server+applet服务器端的应用程序 解析JSP动态请求
Tomcat 技术先进、性能稳定,最重要的是免费
tomcat运行时需要有java环境
CentOS可以直接安装Java环境的。
yum install -y java
安装tomcat
tomcat有Windows版的,直接配置Java的环境变量直接就能双击启动了。
linux的就比较麻烦。
1、手动配置Java环境变量
[root@ks1 ~]# yum install java -y
[root@ks1 ~]# java -version
openjdk version "1.8.0_232"
OpenJDK Runtime Environment (build 1.8.0_232-b09)
OpenJDK 64-Bit Server VM (build 25.232-b09, mixed mode)
能查但版本就是可以用了。
这个是直接安装的方法,如果jdk包被修改了下载的不能用,就要用jdk包安装,手动配置。
需要在/etc/profile设置环境变量
2、安装tomcat
下载下来的tomcat包解压到/opt目录
[root@ks1 ~]# tar -xf apache-tomcat-9.0.29.tar.gz -C /opt/
添加环境变量
[root@ks1 ~]# vim /etc/profile
export TOMCAT_HOME=/opt/apache-tomcat-9.0.29
export PATH=$JAVA_HOME/bin:$TOMCAT_HOME/bin:$PATH
[root@ks1 ~]# . /etc/profile
重加载配置文件
设置开机自启动
[root@ks1 ~]# vim /etc/rc.local
. /etc/profile
/opt/apache-tomcat-9.0.29/bin/startup.sh
然后赋权限
[root@ks1 ~]# chmod +x /etc/rc.d/rc.local
到这里就已经算是安装完了,测试页也能访问了。
但是Tomcat有3中工作模式:
【1】BIO
bio(blocking I/O),阻塞式I/O操作,表示Tomcat使用的是传统的Java I/O操作(即java.io包及其子包),对于每一个请求都要创建一个线程来进行处理,所以开销较大不适合处理高并发的场景。Tomcat在默认情况下,就是以bio模式运行的。遗憾的是,就一般而言,bio模式是三种运行模式中性能最低的一种。我们可以通过Tomcat Manager来查看服务器的当前状态。
【2】NIO
nio是Java SE 1.4及后续版本提供的一种新的I/O操作方式(即java.nio包及其子包),基于缓冲区、并能提供非阻塞I/O操作的Java API实现,比传统的I/O处理方式(bio)有更高的并发运行性能。是Tomcat8的默认运行模式。
non-blocking IO 需要修改tomcat的配置文件
[root@tomcat1 /opt/apache-tomcat-9.0.29/conf]# vim server.xml
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
改为
<Connector port="8080" protocol="org.apache.coyote.http11.Http11NioProtocol"
connectionTimeout="20000"
redirectPort="8443" />
【3】APR
apr(Apache Portable Runtime/Apache可移植运行库)是Apache HTTP服务器的支持库。从操作系统级别解决异步I/O问题,大幅度提高服务器的并发处理性能,也是Tomcat生产环境运行的首选方式。要tomcat支持apr,必须安装apr和native,这样tomcat才可以利用apache的apr接口,使用操作系统的部分本地操作,从而提升性能。
apache portable running apache可以直接的运行模式
最高效的
这几种模式可以通过日志文件查看是当前是什么模式。
其中APR是高效的但是并不在tomcat的原始包中,要安装额外的几个依赖包才会有。
APR的作用:https://blog.csdn.net/qq_32447301/article/details/80891414
(1)、apr
(2)、apr-util
(3)、tomcat-native.tar.gz(在Tomcat/bin下有相应的tar包)
APR等的地址:http://apr.apache.org/download.cgi
tomcat-native地址:http://tomcat.apache.org/download-native.cgi
安装几个工具包,比如gcc编译器等等
yum install openssl-devel gcc make expat-devel* -y
apr包:
[root@ks1 ~ ]# tar -xf apr-1.7.0.tar.gz
[root@ks1 ~ ]# cd apr-1.7.0
[root@ks1 apr-1.5.2]# ./configure --prefix=/usr/local/apr
//指定安装路径
[root@ks1 apr-1.5.2]# make
[root@ks1 apr-1.5.2]# make install
apr-util包:
[root@ks1 ~ ]# tar -xf apr-util-1.6.1.tar.gz
[root@ks1 ~ ]# cd apr-util-1.6.1
[root@ks1 apr-util-1.5.4]# ./configure --with-apr=/usr/local/apr/
//指定apr的路径
[root@ks1 apr-util-1.5.4]# make
[root@ks1 apr-util-1.5.4]# make install
tomcat-native包:这个包里都是一些类,有这些类才能调用apr的内容。
[root@ks1 ~ ]# tar zxf tomcat-native.tar.gz //这个包就在tomcat包解压后的bin目录下。
[root@ks1 ~ ]# cd tomcat-native-1.2.23-src/native/
[root@ks1 native]# ./configure --with-ssl=/usr/bin --with-apr=/usr/local/apr/ --with-java-home=/etc/alternatives/java_sdk_1.8.0
//后边这个是java的环境变量JAVA_HOME要和echo $JAVA_HOME的一样
[root@ks1 native]# make
[root@ks1 native]# make install
注意:tomcat-native-1.2.23-src/native/,之前的版本要多一层目录jni,新的版本就没有jni直接就是native。反正最终的操作都在navite目录下。
然后在/opt/apache-tomcat-9.0.29/bin/catalina.sh
文件中中加入一行:
就是和startup.sh同一个目录的。
249 if [ -z "$JSSE_OPTS" ] ; then
250 JSSE_OPTS="-Djdk.tls.ephemeralDHKeySize=2048"
251 fi
252 JAVA_OPTS="$JAVA_OPTS $JSSE_OPTS"
253 下边这个254行是添加了,后边的路径写apr的目录
254 JAVA_OPTS="$JAVA_OPTS -Djava.library.path=/usr/local/apr/lib"
//如果不加这一行的话就可能找不到apr的类库
然后修改/opt/apache-tomcat-9.0.29/conf
文件中的protocol属性,讲后边的协议改成这个协议,将工作模式改成apr模式。
<Connector port="8080" protocol="org.apache.coyote.http11.Http11AprProtocol"
connectionTimeout="20000"
redirectPort="8443" />
可以将apr的环境变量添加到/etc/profile
中。
然后重新 启动tomcat服务就可以了。
查一下日志,在logs/catalina.out
27-Nov-2019 15:19:35.021 INFO [main] org.apache.catalina.startup.HostConfig.deployDirectory Deployment of web application directory [/opt/apache-tomcat-9.0.29/webapps/examples] has finished in [432] ms
27-Nov-2019 15:19:35.021 INFO [main] org.apache.catalina.startup.HostConfig.deployDirectory Deploying web application directory [/opt/apache-tomcat-9.0.29/webapps/host-manager]
27-Nov-2019 15:19:35.068 INFO [main] org.apache.catalina.startup.HostConfig.deployDirectory Deployment of web application directory [/opt/apache-tomcat-9.0.29/webapps/host-manager] has finished in [47] ms
27-Nov-2019 15:19:35.074 INFO [main] org.apache.catalina.startup.HostConfig.deployDirectory Deploying web application directory [/opt/apache-tomcat-9.0.29/webapps/manager]
27-Nov-2019 15:19:35.108 INFO [main] org.apache.catalina.startup.HostConfig.deployDirectory Deployment of web application directory [/opt/apache-tomcat-9.0.29/webapps/manager] has finished in [34] ms
27-Nov-2019 15:19:35.114 INFO [main] org.apache.coyote.AbstractProtocol.start Starting ProtocolHandler ["http-apr-8080"]
//看到这个apr-8080就证明OK了。
27-Nov-2019 15:19:35.133 INFO [main] org.apache.catalina.startup.Catalina.start Server startup in [1,068] milliseconds
查看端口能看到3个端口
[root@localhost apache-tomcat-9.0.29]# netstat -antlup | grep java
tcp6 0 0 :::8080 :::* LISTEN 13078/java
tcp6 0 0 127.0.0.1:8005 :::* LISTEN 13078/java
tcp6 0 0 :::8009 :::* LISTEN 12311/java
输入IP和端口就能看到tomcat的测试页。Apr模式就OK了。
如果不行,检查环境变量,java 的环境变量,apr的环境变量tomcat的环境变量。看错误日志,是不是缺失类库,或者找不到什么包什么库。
还不行的话可以直接yum下载apr
yum install apr-devel -y
再重新启动服务,进行测试。
默认端口为:
8080:应用程序使用
8009:容器使用
8005:关闭tomcat时使用
tomcat的配置文件在安装路径的conf目录下。以.xml为结尾。
【1】context.xml
tomcat的环境配置文件
定义了2个资源文件
${catalina.base}/conf/web.xml
||
/opt/apache-tomcat-8.0.50/conf/web.xml
WEB-INF/web.xml
||
/opt/apache-tomcat-8.0.50/webapps/ROOT/WEB-INF/web.xml
【2】web.xml
web应用程序的说明文件
【3】tomcat-users.xml
用户配置文件
【4】server.xml
主配置文件
<Server port="8005" shutdown="SHUTDOWN">
整个配置文件的根元素
<Service name="Catalina">
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
指定tomcat的端口,协议,连接的超时时间(ms),加密端口(?)
connector是连接client与tomcat之间的连接器
<Engine name="Catalina" defaultHost="localhost">
为tomcat处理所有的请求,并且指定默认的虚拟主机是哪个
<Host name="localhost" appBase="webapps"
unpackWARs="true" autoDeploy="true">
name:访问的名字
appBase:默认的访问路径
unpackWARs:当tomcat处于运行状态,如果检测到有新的应用程序(war包)被加载,会自动解压
autoDeploy:当tomcat处于运行状态,会自动发布新的web应用
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
prefix="localhost_access_log" suffix=".txt"
pattern="%h %l %u %t "%r" %s %b" />
访问日志
[root@tomcat1 /opt/apache-tomcat-8.0.50/logs]# less localhost_access_log.2019-11-26.txt
</Host>
虚拟主机
</Engine>
</Service>
</Server>
修改端口信息:
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
修改8080 就好了
这个就是改成8081。
单实例,双war包
实例最简单的可以理解长tomcat,一个机器上一个tomcat就叫单实例。war包就是软件的项目,字节码文件等等。单实例双war包意思就是将2个软件项目部署在同一个tomcat下。
网站的前台 war包
网站的后台 war包
双实例,双war包
每个实例有一个war包,单机双实例,简单来说,一台机器,2个tomcat,每个tomcat一个war包
war包的部署可以直接拷贝到webapp这个目录下,直接将这个目录下所有的东西删掉就好了。不过名字要设置为ROOT,因为tomcat只认这个,有这个才能直接读取。否则的话就要输入目录名访问。
直接在webapp这个目录下就好,可以先将这个目录的内容全部删除在部署。
tomcat的目录结构:
[root@localhost apache-tomcat-9.0.29]# ls
bin conf lib logs README.md RUNNING.txt webapps
BUILDING.txt CONTRIBUTING.md LICENSE NOTICE RELEASE-NOTES temp work