理论部分:
Tomcat是一个开源的Java Servlet容器,也是Apache软件基金会(Apache Software Foundation)的一个项目。它主要用于实现Java Servlet和JavaServer Pages(JSP)技术,是一个轻量级的、高性能的Web服务器和应用服务器。Tomcat不仅支持Java EE规范,还能作为一个完整的应用服务器来运行企业级的Java应用程序。
功能:
-
Servlet和JSP支持:Tomcat能够处理动态网页的生成和交互,支持Java Servlet和JSP技术的实现。
-
HTTP协议支持:提供对HTTP协议的支持,处理HTTP请求和响应,支持静态页面和动态页面的访问。
-
Java EE规范支持:支持Java Persistence API (JPA)、Java Transaction API (JTA)、Java Message Service (JMS)等Java EE规范,可以运行企业级应用程序。
-
跨平台性:基于Java开发,因此可以在多种操作系统上运行,如Windows、Linux、Unix等。
-
灵活和可扩展:支持插件和扩展,可以通过添加额外的组件和功能来满足不同的需求,如连接池、安全认证、负载均衡等。
-
配置和管理:提供简单的架构和丰富的管理和监控工具,便于管理员配置和管理应用程序。
特点:
-
轻量级:相对于其他企业级应用服务器,Tomcat具有较小的内存占用和快速的启动速度。
-
高性能:能够处理大量的并发请求,并具有优秀的响应速度。
-
易于使用:配置简单,易于上手,适合初学者和快速开发需求。
-
开源免费:作为开源项目,Tomcat可以免费下载和使用,降低了开发成本。
优点:
-
丰富的功能:支持Servlet和JSP技术,能够构建功能强大的Web应用程序。
-
高性能:在处理大量并发请求时表现出色,适合高负载场景。
-
跨平台:支持多种操作系统,便于在不同环境下部署和应用。
-
可扩展性:通过插件和扩展支持更多功能,满足企业级应用的需求。
-
丰富的社区支持:作为开源项目,Tomcat拥有庞大的开发者社区,便于获取技术支持和分享经验。
缺点:
-
处理静态文件能力较弱:与Nginx、Apache等服务器相比,Tomcat在处理静态文件(如HTML、图片等)时性能稍逊。
-
配置相对复杂:虽然Tomcat的配置相对简单,但对于初学者来说,仍需要一定的学习和实践才能熟练掌握。
-
安全性问题:由于Tomcat的广泛使用,它也成为了黑客攻击的目标之一,因此需要加强安全配置和防护。
适合场合:
Tomcat适合用于开发和部署较小规模的Web应用程序,如个人网站、简单的企业应用程序和中小型的电子商务网站等。它对于初学者和快速开发需求非常友好,同时也能够满足企业级应用的基本需求。然而,在需要处理大量静态文件或需要更高性能的场景下,可能需要结合其他Web服务器(如Nginx)来共同使用。
实验部分:
、WEB框架
1、 tomcat功能介绍
Tomcat 服务器是一个免费的开放源代码的Web 应用服务器,属于轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,Tomcat 具有处理HTML页面的功能,它还是一个Servlet和JSP容器。
2、安装tomcat
推荐从Apache官网下载源码包直接安装启动
三台主机 tomcat 172.25.254.100 tomcat-node1.timinglee.org 172.25.254.10 tomcat-node2.timinglee.org 172.25.254.20
#在node1、node2 1.安装java环境 [root@tomcat-node1 ~]# yum install java-1.8.0-openjdk.x86_64 -y 2.安装并启动tomcat [root@tomcat-node1 ~]# tar zxf apache-tomcat-9.0.93.tar.gz -C /usr/local/ [root@tomcat-node1 ~]# ln -s /usr/local/apache-tomcat-9.0.93/ /usr/local/tomcat [root@tomcat-node1 ~]# /usr/local/tomcat/bin/startup.sh 3.查看端口 [root@tomcat-node1 ~]# netstat -antlupe | grep java tcp6 0 0 :::8080 :::* LISTEN 0 68636 32887/java 4.访问tomcat 172.25.254.10:8080
3、tomcat的文件结构和组成
目录结构
目录 说明 ------------------------------------------------------- bin 服务启动、停止等相关程序和文件 conf 配置文件 lib 库目录 logs 日志目录 webapps 应用程序,应用部署目录,相当于nginx的默认发布目录 work jsp 编译后的结果文件,建议提前预热访问
查看tomcat相关目录和文件
[root@tomcat-node1 ~]# ls /usr/local/tomcat/ bin conf lib logs README.md RUNNING.txt webapps BUILDING.txt CONTRIBUTING.md LICENSE NOTICE RELEASE-NOTES temp work
4、生成tomcat的启动文件
4.1 生成tomcat的主配置文件
[root@tomcat-node1 ~]# vim /usr/local/tomcat/conf/tomcat.conf JAVA_HOME=/etc/alternatives/jre_openjdk
4.2 生成启动文件
[root@tomcat-node1 ~]# useradd -s /sbin/nologin -M tomcat [root@tomcat-node1 ~]# ls /usr/local/tomcat/ -ld drwxr-xr-x 9 root root 220 Aug 21 11:50 /usr/local/tomcat/ [root@tomcat-node1 ~]# chown -R tomcat.tomcat /usr/local/tomcat/ [root@tomcat-node1 ~]# ls /usr/local/tomcat/ -ld drwxr-xr-x 9 tomcat tomcat 220 Aug 21 11:50 /usr/local/tomcat/ [root@tomcat-node1 ~]# vim /lib/systemd/system/tomcat.service [Unit] Description=Tomcat #After=syslog.target network.target remote-fs.target nss-lookup.target After=syslog.target network.target [Service] Type=forking EnvironmentFile=/usr/local/tomcat/conf/tomcat.conf ExecStart=/usr/local/tomcat/bin/startup.sh ExecStop=/usr/local/tomcat/bin/shutdown.sh PrivateTmp=true User=tomcat Group=tomcat [Install] WantedBy=multi-user.target [root@tomcat-node1 ~]# systemctl daemon-reload [root@tomcat-node1 ~]# systemctl enable --now tomcat
20
二、结合反向代理实现tomcat部署
1、常见部署方式![](https://i-blog.csdnimg.cn/direct/2fcb4359a7ac4075838e5228a7377925.png)
-
standalone模式,Tomcat单独运行,直接接受用户的请求,不推荐。
-
反向代理,单机运行,提供了一个Nginx作为反向代理,可以做到静态由nginx提供响应,动态jsp代理给Tomcat
LNMT:Linux + Nginx + MySQL + Tomcat
LAMT:Linux + Apache(Httpd)+ MySQL + Tomcat
-
前置一台Nginx,给多台Tomcat实例做反向代理和负载均衡调度,Tomcat上部署的纯动态页面更适合
LNMT:Linux + Nginx + MySQL + Tomcat
-
多级代理
LNNMT:Linux + Nginx + Nginx + MySQL + Tomcat
2、利用nginx实现反向代理
-
利用nginx反向代理功能,实现图中的代理功能,将用户请求全部转发至指定的同一个tomcat主机
-
利用nginx指令proxy_pass 可以向后端服务器转发请求报文,并且在转发时会保留客户端的请求报文中的host首部
# node1、node2 [root@tomcat-node1 ~]# cp test.jsp /usr/local/tomcat/webapps/ROOT/ 访问172.25.254.10:8080/test.jsp出现以下内容
3、负载均衡
[root@nginx ~]# vim /usr/local/nginx/conf.d/vhost.conf upstream memcache { server 127.0.0.1:11211; keepalive 512; } upstream tomcat { hash $cookie_JSESSIONID; server 172.25.254.10:8080; server 172.25.254.20:8080; } server { listen *:80; server_name www.timinglee.org; root /data/web/html; index index.html; location ~ \.jsp$ { proxy_pass http://tomcat; } } [root@nginx ~]# nginx -s reload
三、memcached
1、memcached安装和启动
# node1、node2 [root@tomcat-node1 ~]# dnf install memcached -y [root@tomcat-node1 ~]# vim /etc/sysconfig/memcached PORT="11211" USER="memcached" MAXCONN="1024" CACHESIZE="64" OPTIONS="-l 0.0.0.0,::1" [root@tomcat-node1 ~]# systemctl start memcached [root@tomcat-node1 ~]# netstat -antlupe | grep memcache tcp 0 0 0.0.0.0:11211 0.0.0.0:* LISTEN 980 97815 34711/memcached # 测试 [root@tomcat-node2 ~]# dnf install telnet -y [root@tomcat-node2 ~]# telnet 172.254.20 11211
四、session共享服务器
1、msm介绍
-
Tomcat的Session管理类,Tomcat版本不同
memcached-session-manager-2.3.2.jar
memcached-session-manager-tc9-2.3.2.jar
-
Session数据的序列化、反序列化类
官方推荐kyro
在webapp中WEB-INF/lib/下
-
驱动类
memcached(spymemcached.jar)
Redis(jedis.jar)
2、安装和配置过程
# node1\node2 [root@tomcat-node1 ~]# cd jar/ [root@tomcat-node1 jar]# ls asm-5.2.jar minlog-1.3.1.jar kryo-3.0.3.jar msm-kryo-serializer-2.3.2.jar kryo-serializers-0.45.jar objenesis-2.6.jar memcached-session-manager-2.3.2.jar reflectasm-1.11.9.jar memcached-session-manager-tc9-2.3.2.jar spymemcached-2.12.3.jar [root@tomcat-node1 jar]# cp *.jar /usr/local/tomcat/lib/ [root@tomcat-node1 jar]# vim /usr/local/tomcat/conf/context.xml <Manager pathname="" /> --> <Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager" memcachedNodes="n1:172.25.254.10:11211,n2:172.25.254.20:11211" failoverNodes="n1" #在node2写n2 requestUriIgnorePattern=".*\.(ico|png|gif|jpg|css|js)$" transcoderFactoryClass="de.javakaffee.web.msm.serializer.kryo.KryoTranscoderFactory" /> </Context> [root@tomcat-node1 jar]# systemctl stop tomcat.service [root@tomcat-node1 jar]# systemctl start tomcat #测试 在浏览器访问www.timinglee.org/test.jsp 出现20 关闭20 [root@tomcat-node2 jar]# systemctl stop tomcat.service 之前添加的数据还在,并且和新加的数据一起转到node1上