Web应用服务器Tomcat

一、tomcat

Tomcat是Java语言开发的,Tomcat服务器是一个免费的开放源代码的Web应用服务器,是Apache软件基金会的Jakarta项目中的一个核心项目,由Apache、Sun和其他一些公司及个人共同开发而成。Tomcat属于轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试JSP程序的首选。一般来说,Tomcat虽然和Apache或者Nginx这些Web服务器一样,具有处理HTML页面的功能,然而由于其处理静态HTML的能力远不及Apache或者Nginx,所以Tomcat通常是作为一个Servlet和JSP容器,单独运行在后端。


同步
交互式网页,用户提交了请求,就是想看到查询的结果。服务器响应到来后是一个全新的页面内容,哪怕URL 不变,整个网页都需要重新渲染。例如,用户填写注册信息,只是 2 次密码不一致,提交后,整个注册页面重新刷新,所有填写项目重新填写( 当然有办法让用户减少重填 ) 。这种交互非常不友好。从代价的角度看,就是为了注册的一点点信息,结果返回了整个网页内容,不但浪费了网络带宽,还需要浏览器重新渲染网页,太浪费资源了,影响了用户体验和感受。上面这些请求的过程,就是同步过程,用户发起请求,页面整个刷新,直到服务器端响应的数据到来并重新渲染。
异步
传统的网页如果需要更新内容,必需重载整个网页面。 Ajax 的出现,改变这一切,同时极大的促进了Javascript的发展。 Ajax 即 "Asynchronous Javascript And XML" (异步 JavaScript 和 XML ),是指一种创建交互式、快速动态网页应用的网页开发技术,最早起源于1998 年微软的 Outlook Web Access 开发团队。Ajax 通过在后台与服务器进行少量数据交换, 可以使网页实现异步更新。这意味着可以在不重新加载整个网页的情况下,对网页的某部分进行更新。Javascript 通过调用浏览器内置的 WEB API 中的XMLHttpRequest 对象实现 Ajax 技术。早期 Ajax 结合数据格式 XML ,目前更多的使用 JSON 。利用 AJAX 可实现前后端开发的彻底分离,改变了传统的开发模式。

安装

1.安装jdk

bash 复制代码
[root@tomcat-node1 ~]# yum install -y java-1.8.0-openjdk.x86_64

2.解压tomcat

bash 复制代码
[root@tomcat-node1 ~]# tar -zxvf apache-tomcat-9.0.93.tar.gz -C /usr/local/

3.设置软连接

bash 复制代码
[root@tomcat-node1]# cd /usr/local
[root@tomcat-node1 local]# ln -s apache-tomcat-9.0.93 tomcat

4.开启tomcat

bash 复制代码
[root@tomcat-node1 ~]# /usr/local/tomcat/bin/startup.sh

5.生成tomcat主配置文件

bash 复制代码
[root@tomcat-node1 ~]# vim /usr/local/tomcat/conf/tomcat.conf
JAVA_HOME=/etc/alternatives/jre_openjdk

6.创建用户

bash 复制代码
[root@tomcat-node1 ~]# useradd -s /sbin/nologin -M tomcat

7.生成启动文件

bash 复制代码
# 修改权限
[root@tomcat-node1 ~]# chown -R tomcat.tomcat /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 

8.重启tomcat

bash 复制代码
[root@tomcat-node1 ~]# systemctl restart tomcat

另一台主机同上

bash 复制代码
[root@tomcat-node2 ~]# yum install -y java-1.8.0-openjdk.x86_64
[root@tomcat-node2 ~]# tar -zxvf apache-tomcat-9.0.93.tar.gz -C /usr/local/
[root@tomcat-node2 ~]# vim /usr/local/tomcat/conf/tomcat.conf
JAVA_HOME=/etc/alternatives/jre_openjdk
[root@tomcat-node2 ~]# useradd -s /sbin/nologin -M tomcat
[root@tomcat-node2 ~]# vim /usr/local/tomcat/conf/tomcat.conf
JAVA_HOME=/etc/alternatives/jre_openjdk
# 修改权限
[root@tomcat-node2 ~]# chown -R tomcat.tomcat /usr/local/tomcat/
[root@tomcat-node2 ~]# 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-node2 ~]# systemctl daemon-reload 
[root@tomcat-node2 ~]# systemctl restart tomcat

二、反向代理实现Tomcat

2.1 常见部署方式

准备一台安装好nignx的服务器

2.2 Nginx反向代理

反向代理单台web服务器

bash 复制代码
[root@nginx-node1 ~]# vim /usr/local/nginx/conf.d/vhost.conf 
server {
    listen *:80;
    server_name www.lm.org;
    root /data/wb/html;
    index index.html;
    location ~ \.jsp$ {
        proxy_pass http://172.25.254.10:8080;
    }
}
[root@nginx-node1 ~]# systemctl restart nginx

2.3 负载均衡

1.ip_hash

bash 复制代码
[root@nginx-node1 ~]# vim /usr/local/nginx/conf.d/vhost.conf 
upstream tomcat {
    ip_hash;
    #hash $cookie_JSESSIONID;
    server 172.25.254.10:8080;
    server 172.25.254.20:8080;
}
server {
    listen *:80;
    server_name www.lm.org;
    root /data/wb/html;
    index index.html;
    location ~ \.jsp$ {
        proxy_pass http://tomcat;
    }
}
[root@nginx-node1 ~]# systemctl restart nginx

源地址哈希,后端服务器不会改变

2.cookie哈希

bash 复制代码
[root@nginx-node1 ~]# vim /usr/local/nginx/conf.d/vhost.conf 
upstream tomcat {
    #ip_hash;
    hash $cookie_JSESSIONID;
    server 172.25.254.10:8080;
    server 172.25.254.20:8080;
}
server {
    listen *:80;
    server_name www.lm.org;
    root /data/wb/html;
    index index.html;
    location ~ \.jsp$ {
        proxy_pass http://tomcat;
    }
}
[root@nginx-node1 ~]# systemctl restart nginx

三、session 共享服务器

msm
msm ( memcached session manager )提供将 Tomcat 的 session 保持到 memcached 可以实现高可用。项目早期托管在google code, 目前在 Github github网站链接 : https://github.com/magro/memcached-session-manager
部署:

1.解压

bash 复制代码
[root@tomcat-node1 ~]# tar -zxvf apache-tomcat-9.0.93.tar.gz -C /usr/local/

2.复制

bash 复制代码
[root@tomcat-node1 ~]# cp test.jsp /usr/local/tomcat/webapps/
[root@tomcat-node1 ~]# scp test.jsp root@172.25.254.20:/usr/local/tomcat/webapps/
root@172.25.254.20's password: 
test.jsp                                                         100%  968   409.9KB/s   00:00  
  1. 修改tomcat

172.25.254.10

bash 复制代码
[root@tomcat-node2 ~]# vim /usr/local/tomcat/conf/context.xml
    <Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"
      memcachedNodes="m1:172.25.254.10:11211,m2:172.25.254.20:11211"
      failoverNodes="m1"
      requestUriIgnorePattern=".*\.(ico|png|gif|jpg|css|js)$"
      transcoderFactoryClass="de.javakaffee.web.msm.serializer.kryo.KryoTranscoderFactory"
    />
[root@tomcat-node1 ~]# systemctl restart tomcat.service

172.25.254.20

bash 复制代码
[root@tomcat-node2 ~]# vim /usr/local/tomcat/conf/context.xml
<Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"
      memcachedNodes="m1:172.25.254.10:11211,m2:172.25.254.20:11211"
      failoverNodes="m2"
      requestUriIgnorePattern=".*\.(ico|png|gif|jpg|css|js)$"
      transcoderFactoryClass="de.javakaffee.web.msm.serializer.kryo.KryoTranscoderFactory"
    />
[root@tomcat-node2 ~]# systemctl restart tomcat.service

4.下载

bash 复制代码
[root@tomcat-node2 ~]# yum install -y memcached

bash 复制代码
[root@tomcat-node1 ~]# yum install -y memcached

测试

  1. 在两台 tomcat 都开启的情况下:
  2. 在 n1 被停止后继续提交信息看是否可以读取到之前的会话信息
相关推荐
葡萄城技术团队1 分钟前
在 Java 中优化 MySQL 查询以提升性能
java·开发语言·mysql
杀死那个蝈坦5 分钟前
短链接生成-基于布隆过滤器和唯一索引
java·数据库·微服务·oracle·rocketmq
慕白Lee5 分钟前
Java foreach在lambda的foreach遍历中退出操作(lambda foreach break)
java
winfield8218 分钟前
Java 中大量闲置 MySQL 连接的解决方案(从根因到落地)
java·mysql
moxiaoran575311 分钟前
Java开发中VO的使用
java·开发语言
计算机毕设指导611 分钟前
基于微信小程序图像识别的智能垃圾分类系统【源码文末联系】
java·spring boot·mysql·微信小程序·小程序·分类·maven
LJianK117 分钟前
前后端接口常见传参
java·spring
独自破碎E19 分钟前
消息队列如何保证消息的有效性?
java·开发语言·rocketmq·java-rocketmq
38242782720 分钟前
使用 webdriver-manager配置geckodriver
java·开发语言·数据库·爬虫·python
骚戴27 分钟前
2025企业级架构演进:重构 Java/Python 的 RAG 与 Agent 系统的六种核心策略
java·人工智能·大模型·llm·api