云计算百科
云计算领域专业知识百科平台

web应用服务器tomcat

web应用服务器tomcat

什么是tomcat

Tomcat 是一个开源的 Java Web 应用服务器,由 Apache 软件基金会 开发和维护。它主要用于运行由 Java 编写的 Web 应用程序。Tomcat 可以理解和执行 Java Servlet 和 JavaServer Pages (JSP),这些技术允许开发人员编写能够动态生成网页内容的程序。

Tomcat的功能和特点

  • Servlet 容器:Tomcat 的核心功能是作为一个 Servlet 容器。Servlet 是运行在 Web 服务器上的 Java 程序,它可以接收来自 Web 客户端的请求,并生成响应。Tomcat 高效地执行 Servlet 处理,使其成为开发和部署 Java Web 应用的首选环境。
  • JSP 支持:Tomcat 支持 JavaServer Pages (JSP),这是一种帮助软件开发人员创建动态网页的技术。通过 JSP,开发者可以将 Java 代码嵌入到 HTML 页面中,服务器在发送 HTML 响应给客户端之前,先在服务器上执行这些 Java 代码。
  • 高扩展性和灵活性:Tomcat 的架构支持灵活的扩展,通过添加组件和调整配置可以满足各种复杂程度的应用需求。此外,Tomcat 还支持轻松集成各种插件和工具,如数据库连接池、日志管理工具等。
  • 安全性:Tomcat 提供了多种配置选项来增强 Web 应用的安全性,包括 SSL/TLS 支持、请求过滤、用户认证机制等。
  • Tomcat的应用场景

  • 教育和学习:Tomcat 是学习 Java Web 开发的绝佳工具。许多教育机构和在线课程都使用 Tomcat 来教授 Web 开发技术。
  • 开发和测试环境:开发人员使用 Tomcat 来开发和测试 Web 应用程序,确保它们在部署到生产环境的更大服务器之前正常工作。
  • 中小型企业:对于不需要复杂业务逻辑处理的企业网站,Tomcat 提供了一个经济高效的解决方案。
  • 综上所述,Tomcat 既是一种工具,也是一种技术。作为工具,它是一个开源的 Java Web 应用服务器,提供了运行和管理 Java Web 应用的环境。作为技术,它实现了多个 Java EE 规范,如 Servlet 和 JSP,支持开发和部署动态 Web 应用

    1.tomcat的简单安装

    上传所需软件包至Linux,也可以直接去官网下载(Apache Tomcat® – Welcome!)

    image-20250730105824263

    在安装之前我们需要先搭建Java环境

    [root@tomcatA ~]# yum install java-1.8.0-openjdk.x86_64 -y#安装
    [root@tomcatA ~]# java -version#查看版本

    image-20250730110203600

    解压安装tomcat

    [root@tomcatA ~]# tar zxf apache-tomcat-9.0.107.tar.gz -C /usr/local/
    [root@tomcatA ~]# cd /usr/local/
    [root@tomcatA local]# ll
    total 0
    drwxr-xr-x 9 root root 220 Jul 30 10:54 apache-tomcat-9.0.107
    drwxr-xr-x. 2 root root 6 Aug 10 2021 bin
    drwxr-xr-x. 2 root root 6 Aug 10 2021 etc
    drwxr-xr-x. 2 root root 6 Aug 10 2021 games
    drwxr-xr-x. 2 root root 6 Aug 10 2021 include
    drwxr-xr-x. 2 root root 6 Aug 10 2021 lib
    drwxr-xr-x. 3 root root 17 Jul 8 11:58 lib64
    drwxr-xr-x. 2 root root 6 Aug 10 2021 libexec
    drwxr-xr-x. 2 root root 6 Aug 10 2021 sbin
    drwxr-xr-x. 5 root root 49 Jul 8 11:58 share
    drwxr-xr-x. 2 root root 6 Aug 10 2021 src
    [root@tomcatA local]# mv apache-tomcat-9.0.107/ tomcat
    total 0
    drwxr-xr-x. 2 root root 6 Aug 10 2021 bin
    drwxr-xr-x. 2 root root 6 Aug 10 2021 etc
    drwxr-xr-x. 2 root root 6 Aug 10 2021 games
    drwxr-xr-x. 2 root root 6 Aug 10 2021 include
    drwxr-xr-x. 2 root root 6 Aug 10 2021 lib
    drwxr-xr-x. 3 root root 17 Jul 8 11:58 lib64
    drwxr-xr-x. 2 root root 6 Aug 10 2021 libexec
    drwxr-xr-x. 2 root root 6 Aug 10 2021 sbin
    drwxr-xr-x. 5 root root 49 Jul 8 11:58 share
    drwxr-xr-x. 2 root root 6 Aug 10 2021 src
    drwxr-xr-x 9 root root 220 Jul 30 10:54 tomcat

    启动

    [root@tomcatA local]# cd tomcat/bin/
    [root@tomcatA bin]# ./startup.sh
    [root@tomcatA bin]# ss -lntup | grep java
    tcp LISTEN 0 100 *:8080 *:* users: (("java",pid=29765,fd=57))
    tcp LISTEN 0 1 [::ffff:127.0.0.1]:8005 *:* users: (("java",pid=29765,fd=66))
    [root@tomcatA bin]#

    image-20250730110436186

    浏览器测试IP访问

    image-20250730111224128

    2.制作tomcat启动文件

    脚本启动不方便我们想做开机自启

    1.生成tomcat主配置文件指向Java

    [root@tomcatA ~]# vim /usr/local/tomcat/conf/tomcat.conf
    JAVA_HOME=/etc/alternatives/jre

    2.生成启动文件

    [root@tomcatA ~]# 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

    image-20250730112430761

    3.创建指定的用户并修改权限

    [root@tomcatA ~]# useradd -s /sbin/nologin -M tomcat
    [root@tomcatA ~]# chown tomcat.tomcat /usr/local/tomcat/ -R

    4.启动服务(如果之前是启动的需要停止再启动)

    [root@tomcatA ~]# cd /usr/local/tomcat/bin/
    [root@tomcatA bin]# ./shutdown.sh
    Using CATALINA_BASE: /usr/local/tomcat
    Using CATALINA_HOME: /usr/local/tomcat
    Using CATALINA_TMPDIR: /usr/local/tomcat/temp
    Using JRE_HOME: /usr
    Using CLASSPATH: /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
    Using CATALINA_OPTS:
    [root@tomcatA bin]# systemctl enable –now tomcat.service
    Created symlink /etc/systemd/system/multi-user.target.wants/tomcat.service → /usr/lib/systemd/system/tomcat.service.

    image-20250730112313241

    3.tomcat单体主机

    环境:

    两台Linux,一台安装tomcat,一台安装nginx

    编辑nginx配置文件

    [root@Nginx ~]# vim /etc/nginx/conf.d/vhosts.conf
    server{
    listen 80;
    server_name ch.org;
    location ~ \\.jsp$ {
    proxy_pass http://192.168.1.61:8080;
    }
    }

    重载使配置生效

    接下来对tomcat主机,上传测试文件,将其放置在指定位置(在默认/root下没有访问权限)

    [root@tomcatA ~]# cp test.jsp /usr/local/tomcat/webapps/ROOT/

    在浏览器进行访问测试

    image-20250730120537589

    成功,但是只有一台,无法支撑大量访问

    4.tomcat负载均衡

    在上一个实验基础上新增一台tomcat

    修改nginx主机配置文件

    [root@Nginx ~]# vim /etc/nginx/conf.d/vhosts.conf
    upstream tomcat {
    server 192.168.1.61:8080;
    server 192.168.1.62:8080;
    }
    server{
    listen 80;
    server_name ch.org;
    location ~ \\.jsp$ {
    #proxy_pass http://192.168.1.61:8080;
    proxy_pass http://tomcat;
    }
    }

    在浏览器进行访问测试

    image-20250730121143523

    成功,但是这样还是不够人性化,一提交就会转到另一主机

    我们添加一个cookie让会话能够保持

    5.基于cookie的会话绑定

    编辑nginx主机配置文件

    [root@Nginx ~]# vim /etc/nginx/conf.d/vhosts.conf
    upstream tomcat {
    hash $cookie_JSESSIONID;#这里是因为我们在test.jsp文件中指定的id是JSESSIONID
    server 192.168.1.61:8080;
    server 192.168.1.62:8080;
    }
    server{
    listen 80;
    server_name ch.org;
    location ~ \\.jsp$ {
    #proxy_pass http://192.168.1.61:8080;
    proxy_pass http://tomcat;
    }
    }

    image-20250730121506337

    在浏览器进行访问测试

    在同一浏览器一直刷新,由于JSESSIONID不会变那么会话就一直向同一台后端。

    image-20250730121713217

    在用户提交数据时,如果后端一台tomcat挂机后会导致前置输入的数据丢失,为了解决这个问题,我们需要引入memcache

    架构图

    image-20250730145311605

    memcache的安装

    [root@tomcatA ~]# yum install memcached -y

    我们采用的时将数据缓存到对端后的memcache,所以需要打开IP的访问

    [root@tomcatA ~]# vim /etc/sysconfig/memcached
    PORT="11211"
    USER="memcached"
    MAXCONN="1024"
    CACHESIZE="64"
    OPTIONS="-l 0.0.0.0,::1"

    查看是否修改成功

    [root@tomcatA ~]# systemctl enable –now memcached.service
    [root@tomcatA ~]# netstat -nltupea |grep memcache

    image-20250730145853336

    由于tomcat本身是不支持的,所以我们需要一个插件让其能够调用功能

    6.tomcat的session共享

    这个是msm(memcached session manager)提供将Tomcat的session保持到memcached可以实现高可用。

    项目早期托管在google code,目前在Github,网站链接: https://github.com/magro/memcached-session-manager

    [root@tomcatA ~]# unzip jar.zip
    [root@tomcatA ~]# cd jar/
    [root@tomcatA jar]# cp * /usr/local/tomcat/lib/#复制到tomcat的库目录下

    image-20250730150242637

    然后对tomcat进行相关配置

    [root@tomcatA ~]# vim /usr/local/tomcat/conf/context.xml
    <Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"
    memcachedNodes="n1:192.168.1.61:11211,n2:192.168.1.62:11211"
    failoverNodes="n1"
    requestUriIgnorePattern=".*\\.(ico|png|gif|jpg|css|js)$"
    transcoderFactoryClass="de.javakaffee.web.msm.serializer.kryo.KryoTranscoderFactory"
    />
    [root@tomcatB ~]# vim /usr/local/tomcat/conf/context.xml
    <Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"
    memcachedNodes="n1:192.168.1.61:11211,n2:192.168.1.62:11211"
    failoverNodes="n2"
    requestUriIgnorePattern=".*\\.(ico|png|gif|jpg|css|js)$"
    transcoderFactoryClass="de.javakaffee.web.msm.serializer.kryo.KryoTranscoderFactory"
    />

    #memcachedNodes="n1:192.168.1.61:11211,n2:192.168.1.62:11211"表示memcache节点
    #由于我们的memcache设置是向对端的写入, failoverNodes="n1"表示在down后访问本机的memcache

    image-20250730151225581

    以上对tomcatB进行相同配置

    对nginx进行配置

    [root@Nginx ~]# vim /etc/nginx/conf.d/vhosts.conf
    upstream tomcat {
    hash $cookie_JSESSIONID;
    server 192.168.1.61:8080;
    server 192.168.1.62:8080;
    }
    server{
    listen 80;
    server_name ch.org;
    location ~ \\.jsp$ {
    #proxy_pass http://192.168.1.61:8080;
    proxy_pass http://tomcat;
    }
    }

    访问测试

    先输入几个数据,现在是192.168.1.61,然后我们把它停了

    image-20250730151646150

    [root@tomcatA ~]# systemctl stop tomcat.service

    继续在浏览器输入数据

    image-20250730152222368

    添加的数据还在,测试成功

    赞(0)
    未经允许不得转载:网硕互联帮助中心 » web应用服务器tomcat
    分享到: 更多 (0)

    评论 抢沙发

    评论前必须登录!