tomcat简介
tomcat是apache软件基金会的Jalarta项目中的一个核心项目,由apache、sun(目前已被Oracle收购)和其他一些公司及个人共同开发而成。由于有了sun公司的参与和支持,最新版的servlet和JSP规范总是能在Tomcat中得到体现。因为Tomcat技术先进、性能稳定,而且是开源免费的,因此许多Java开发者得到了部分软件开发商的许可,Tomcat也成为了目前较流行的web应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试JSP程序的首选,和apache等其他web服务器一样,Tomact同样支持HTML页面的处理,只不过能力稍比Apache差。
中间件
中间件是一种独立的系统软件或服务程序,分布式应用软件借助这种软件在不同的技术之间共享资源。中间件位于C/S的操作系统之上,管理计算机资源和网络通信,是连接两个独立应用程序或独立系统的软件。中间件是一类连接软件组件和应用的计算机软件,它包括一组服务。以便于运行在一台或多台机器上的多个软件通过网络进行交互。该技术所提供的互操作性,推动了一致分布式体系架构的演进,该架构通常用于支持并简化那些复杂的分布式应用程序,它包括 web 服务器、事务监控器和消息队列软件。
tomcat三种工作模式
bio(Blocking IO)
:tomcat7版本及之前,同步模型,bio是阻塞式io;对于每一个请求都要创建一个线程来进行处理,开销大,不适合高并发的场景。
nio(New IO)
:Tomcat8版本及以后的工作模式,异步非阻塞;nio1(缺省),nio2可以通过少量的线程处理大量的请求,有更高的并发运行性能。
apr(Apache Portable Runtime)
:从操作系统级别解决异步IO问题,大幅度提高服务器的并发处理性能,是运行高并发的首选模式。
安装tomcat
安装jdk
注意:安装之前先检查系统是否安装了openjdk,如果安装了请先卸载。
[root@localhost local]# tar xf jdk-8u191-linux-x64.tar.gz -C /usr/local/
[root@localhost local]# vim /etc/profile.d/jdk8.sh
export JAVA_HOME=/usr/local/jdk1.8.0_221
export CLASS_PATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/jar/tools.jar:$JAVA_HOME/jre/lib
export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH
[root@localhost local]# source /etc/profile
安装tomcat
[root@localhost apache-tomcat-8.5.54]# tar xf apache-tomcat-8.5.54.tar.gz -C /usr/local/
tomcat启动脚本
#!/bin/bash
JAVA_HOME=/usr/local/jdk1.8.0_191
export JAVA_HOME
CATALINA_HOME=/usr/local/tomcat
export CATALINA_HOME
case "$1" in
start)
echo "Starting Tomcat..."
$CATALINA_HOME/bin/startup.sh
;;
stop)
echo "Stopping Tomcat..."
$CATALINA_HOME/bin/shutdown.sh
sleep 2
echo
echo "Starting TOmcat..."
$CATALINA_HOME/bin/startup.sh
;;
*)
echo "Usage: "$prog {start|stop|restart"
;;
exit 0
如果需要安装多实例只需准备多个路径和多个端口即可:
sed -i.bak 's#8080#8081#g' /app/tomcat81/conf/server.xml
sed -i.bak 's#8005#8006#g' /app/tomcat81/conf/server.xml
sed -i.bak 's#8009#8010#g' /app/tomcat81/conf/server.xml
sed -i.bak 's#8081#8082#g' /app/tomcat82/conf/server.xml
sed -i.bak 's#8006#8007#g' /app/tomcat82/conf/server.xml
sed -i.bak 's#8010#8011#g' /app/tomcat82/conf/server.xml
tomcat启动后会有8005这个端口,这个端口是tomcat的shutdown端口,当连接至该端口输入暗号则会关闭tomcat服务,所以在生产中建议修改该端口号。
tomct的目录结构
bin
:存放tomcat启动和关闭的脚本
conf
:存放tomcat不同的配置文件(server.xml、web.xml)
lib
:包含tomcat使用的jar文件
logs
:存放tomcat执行时的日志文件
logs/catalina.out
:tomcat的日志文件
webapps
:网页发布目录
webapps/ROOT/
:tomcat家目录
work
:存放jsp编译后产生的class文件或servlet文件
temp
:存放tomcat运行时产生的临时文件
配置一个虚拟主机
vim /app/tomcat/conf/server.xml
<Host name="www.tomcatweb.com" appBase="/var/www/html">
<Context path="" docBase="/var/www/html/web1" />
</Host>
效果:
appBase表示指定网站的基本目录
path="“为虚拟目录,如果为空则直接表示IP:8080。
docBase=”"为实际目录,如果是相对路径则基于appBase。
设置tomcat的工作模式为apr
tomcat可以使用apr来提供更好的伸缩性和性能。tomcat native在具体的运行平台上提供了一种优化技术,它本身是基于apr技术来实现的。
在bin目录下有个 tomcat-native.tar.gz文件我们安装一下它,先下载依赖关系
yum -y install apr-devel gcc gcc-c++ make openssl-devel openssl
tar xf tomcat-native.tar.gz -C /usr/local/
cd /usr/local/tomcat-native-1.2.18-src/native/
./configure --with-apr=/usr/ --with-java-home=/usr/local/jdk1.8.0_191 --with-ssl
[root@localhost native]# make && make install
[root@localhost native]# echo"/usr/local/apr/lib">/etc/ld.so.conf
[root@localhost native]# ldconfig
[root@localhost native]# vim /etc/profile.d/jdk8.sh
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/apr/lib
[root@localhost native]# source /etc/profile.d/jdk8.sh
然后
<Connector port="8080" protocol="org.apache.coyote.http11.Http11AprProtocol"
connectionTimeout="20000"
redirectPort="8443" />
引用 apr
[root@localhost native]# vim /usr/local/tomcat/bin/catalina.sh
253 行下面添加:
JAVA_OPTS="$JAVA_OPTS-Djava.library.path=/usr/local/apr/lib"
效果:
重启服务生效
看日志看是否支持 native
cat /usr/local/tomcat/logs/catalina.out | grep Native
配置tomcat管理端
[root@localhost ~]# vim /app/tomcat/conf/tomcat-users.xml
加入以下代码
<role rolename="admin-gui"/>
<role rolename="manager-gui"/>
<user username="tomcat" password="tomcat" roles="manager-gui,admin-gui"/>
效果:
管理端默认只允许本地127.0.0.1才能访问,想要接触该限制只需要配置:
[root@localhost tomcat]# sed -i.bak 's#127#\\d+#g' ./webapps/manager/META-INF/context.xml
[root@localhost tomcat]# sed -i.bak 's#127#\\d+#g' ./webapps/host-manager/META-INF/context.xml