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 被停止后继续提交信息看是否可以读取到之前的会话信息
相关推荐
蓝天星空8 分钟前
spring cloud gateway 3
java·spring cloud
罗政13 分钟前
PDF书籍《手写调用链监控APM系统-Java版》第9章 插件与链路的结合:Mysql插件实现
java·mysql·pdf
一根稻草君19 分钟前
利用poi写一个工具类导出逐级合并的单元格的Excel(通用)
java·excel
kirito学长-Java22 分钟前
springboot/ssm网上宠物店系统Java代码编写web宠物用品商城项目
java·spring boot·后端
木头没有瓜36 分钟前
ruoyi 请求参数类型不匹配,参数[giftId]要求类型为:‘java.lang.Long‘,但输入值为:‘orderGiftUnionList
android·java·okhttp
奋斗的老史36 分钟前
Spring Retry + Redis Watch实现高并发乐观锁
java·redis·spring
high201138 分钟前
【Java 基础】-- ArrayList 和 Linkedlist
java·开发语言
老马啸西风1 小时前
NLP 中文拼写检测纠正论文 C-LLM Learn to CSC Errors Character by Character
java
Cosmoshhhyyy1 小时前
LeetCode:3083. 字符串及其反转中是否存在同一子字符串(哈希 Java)
java·leetcode·哈希算法