企业级WEB应用服务器——TOMCAT

一、WEB技术

1.1、HTTP协议和B/S 结构

最早出现了CGI(Common Gateway Interface)通用网关接口,通过浏览器中输入URL直接映射到一个 服务器端的脚本程序执行,这个脚本可以查询数据库并返回结果给浏览器端。这种将用户请求使用程序 动态生成的技术,称为动态网页技术。先后出现了ASP、PHP、JSP等技术,这些技术的使用不同语言编 写的程序都运行在服务器端,所以称为WEB后端编程。有一部分程序员还是要编写HTML、CSS、 JavaScript,这些代码运行在浏览器端,称为WEB前端编程。合起来称为Browser/Server编程,即B/S编 程。

1.2、前端三大核心技术

1.2.1、HTML

HTML(HyperText Markup Language)超文本标记语言,它不同于一般的编程语言。超文本即超出纯 文本的范畴,例如:描述文本颜色、大小、字体等信息,或使用图片、音频、视频等非文本内容。 HTML由一个个的标签(标记)组成,这些标签各司其职,有的提供网页信息,有的负责文字,有的图片,有的负责网页布局,所以一个HTML文件,是由格式标签和数据组成。

1.2.2、CSS(Cascading Style Sheets)层叠样式表

HTML本身为了格式化显示文本,但是当网页呈现大家面前的时候,需求HTML提供更多样式能力。这使 得HTML变得越来越臃肿。这促使了CSS的诞生。

  • 1994年,W3C成立,CSS设计小组所有成员加入W3C,并努力研发CSS的标准,微软最终加入
  • 1996年12月发布CSS 1.0
  • 1998年5月发布CSS 2.0

CSS 3采用了模块化思想,每个模块都在CSS 2基础上分别增强功能。所以,这些模块是陆续发布的。 不同厂家的浏览器使用的引擎,对CSS的支持不一样,导致网页布局、样式在不同浏览器不一样。因此, 想要保证不同用户使用不同浏览器看到的网页效果一直非常困难。

1.2.3、JavaScript

Javascript 简称JS,是一种动态的弱类型脚本解释性语言,和HTML、CSS并称三大WEB核心技术,得到 了几乎主流浏览器支持。

  • 同步

交互式网页,用户提交了请求,就是想看到查询的结果。服务器响应到来后是一个全新的页面内容,哪 怕URL不变,整个网页都需要重新渲染。

  • 异步

传统的网页如果需要更新内容,必需重载整个网页面。Ajax的出现,改变这一切,同时极大的促进了 Javascript的发展。Ajax即"Asynchronous Javascript And XML"(异步 JavaScript 和 XML),是指一种 创建交互式、快速动态网页应用的网页开发技术,最早起源于1998年微软的Outlook Web Access开发团 队。Ajax 通过在后台与服务器进行少量数据交换, 可以使网页实现异步更新。这意味着可以在不重新加 载整个网页的情况下,对网页的某部分进行更新。Javascript 通过调用浏览器内置的WEB API中的 XMLHttpRequest 对象实现Ajax 技术。早期Ajax结合数据格式XML,目前更多的使用JSON。利用AJAX可 实现前后端开发的彻底分离,改变了传统的开发模式。

AJAX是一种技术的组合,技术的重新发现,而不是发明,但是它深远的影响了整个WEB开发。

三、Tomcat的功能介绍

3.1、安装 Tomcat

与Java耦合性较高,所以需要先安装Java

1.安装java环境

root@tomcat1 \~\]# yum install java-1.8.0-openjdk -y

2.安装并启动tomcat

root@tomcat2 \~\]# tar zxf apache-tomcat-9.0.93.tar.gz -C /usr/local/ \[root@tomcat2 \~\]# cd /usr/local/ \[root@tomcat2 local\]# ls apache-tomcat-9.0.93 etc include lib64 sbin src bin games lib libexec share \[root@tomcat2 local\]# ln -s apache-tomcat-9.0.93 tomcat \[root@tomcat2 local\]# cd tomcat/ \[root@tomcat2 tomcat\]# ls bin CONTRIBUTING.md logs RELEASE-NOTES webapps BUILDING.txt lib NOTICE RUNNING.txt work conf LICENSE README.md temp \[root@tomcat2 tomcat\]# cd bin/ \[root@tomcat2 bin\]# ./startup.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: Tomcat started.

查看端口

root@tomcat2 bin\]# netstat -antlupe \| grep java tcp6 0 0 :::8080 :::\* LISTEN 0 67735 34185/java tcp6 0 0 127.0.0.1:8005 :::\* LISTEN 0 67747 34185/java

3.2、生成tomcat的启动文件

1.生成tomcat的主配置文件

root@tomcat1 \~\]# vim /usr/local/tomcat/conf/tomcat.conf \[root@tomcat1 \~\]# cat /usr/local/tomcat/conf/tomcat.conf JAVA_HOME=/etc/alternatives/jre_openjdk

2.生成启动文件

root@tomcat1 \~\]# useradd -s /sbin/nologin -M tomcat \[root@tomcat1 \~\]# chown -R tomcat.tomcat /usr/local/tomcat/ \[root@tomcat1 \~\]# 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@tomcat1 \~\]# systemctl daemon-reload \[root@tomcat1 \~\]# systemctl enable --now tomcat

四、结合反向代理实现tomcat部署

4.1、常见部署方式介绍

1、standalone

Tomcat单独运行,直接接受用户的请求,不推荐。

2、单机反向代理

提供了一个Nginx作为反向代理,可以做到静态由nginx提供响应,动态jsp代 理给Tomcat

LNMT:Linux + Nginx + MySQL + Tomcat LAMT:Linux + Apache(Httpd)+ MySQL + Tomcat

3、反向代理多机

前置一台Nginx,给多台Tomcat实例做反向代理和负载均衡调度,Tomcat上部署的纯动态页面更 适合

LNMT:Linux + Nginx + MySQL + Tomcat

4、反向代理多机多级

LNNMT:Linux + Nginx + Nginx + MySQL + Tomcat

4.2、利用 nginx 反向代理实现

利用nginx反向代理功能,实现图中的代理功能,将用户请求全部转发至指定的同一个tomcat主机 利用nginx指令proxy_pass 可以向后端服务器转发请求报文,并且在转发时会保留客户端的请求报文中的 host首部。

root@nginx \~\]# vim /usr/local/nginx/conf.d/vhosts.conf server { listen 80; server_name www.timingzpy.org; root /data/web/html; index index.html; location \~ \\.jsp$ { proxy_pass http://172.25.254.10:8080; } }

测试:

4.3、实现tomcat中的负载均衡

当单机Tomcat,演化出多机多级部署的时候,一个问题便凸显出来,这就是Session。而这个问题的由 来,都是由于HTTP协议在设计之初没有想到未来的发展。

4.3.1、HTTP的无状态,有连接和短连接

  • 无状态:指的是服务器端无法知道2次请求之间的联系,即使是前后2次请求来自同一个浏览器,也 没有任何数据能够判断出是同一个浏览器的请求。后来可以通过cookie、session机制来判断。
  • 有连接:是因为它基于TCP协议,是面向连接的,需要3次握手、4次断开。
  • 短连接:Http 1.1之前,都是一个请求一个连接,而Tcp的连接创建销毁成本高,对服务器有很大的 影响。所以,自Http 1.1开始,支持keep-alive,默认也开启,一个连接打开后,会保持一段时间 (可设置),浏览器再访问该服务器就使用这个Tcp连接,减轻了服务器压力,提高了效率。

4.3.2、tomcat负载均衡实现

upstream tomcat {

ip_hash;

server 172.25.254.10:8080;

server 172.25.254.20:8080;

}

server {

listen *:80;

server_name www.timingzpy.org;

root /data/web/html;

index index.html;

location ~ \.jsp$ {

proxy_pass http://tomcat;

}

}

测试:

源地址hash,不同浏览器会访问到一个后端浏览器上,除非这个down掉。

为了解决这样的状况,可以对cookie进行hash,保证session不丢失

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.timingzpy.org;

root /data/web/html;

index index.html;

location ~ \.jsp$ {

proxy_pass http://tomcat;

}

}

测试:

五、Memcached

5.1、Memcached简介

Memcached 只支持能序列化的数据类型,不支持持久化,基于Key-Value的内存缓存系统memcached。但是可以通过做集群同步的方式, 让各memcached服务器的数据进行同步,从而实现数据的一致性,即保证各memcached的数据是一样 的,即使有任何一台 memcached 发生故障,只要集群中有一台 memcached 可用就不会出现数据丢 失,当其他memcached 重新加入到集群的时候,可以自动从有数据的memcached 当中自动获取数据并 提供服务。

Memcached 支持最大的内存存储对象为1M,超过1M的数据可以使用客户端压缩或拆分报包放到多个 key中,比较大的数据在进行读取的时候需要消耗的时间比较长,memcached 最适合保存用户的 session实现session共享

Memcached存储数据时, Memcached会去申请1MB的内存, 把该块内存称为一个slab, 也称为一个page

Memcached 支持多种开发语言,包括:JAVA,C,Python,PHP,C#,Ruby,Perl等 Memcached

官网:http://memcached.org/

5.2、memcached的安装与启动

root@tomcat1 \~\]# yum install memcached -y \[root@tomcat1 \~\]# vim /etc/sysconfig/memcached PORT="11211" USER="memcached" MAXCONN="1024" CACHESIZE="64" OPTIONS="-l 0.0.0.0,::1" \[root@tomcat1 \~\]# systemctl enable --now memcached.service \[root@tomcat1 \~\]# netstat -antlupe \| grep memcached tcp 0 0 0.0.0.0:11211 0.0.0.0:\* LISTEN 980 38395 3903/memcached tcp6 0 0 ::1:11211 :::\* LISTEN 980 38396 3903/memcached

5.3、memcached 操作命令

五种基本 memcached 命令执行最简单的操作。这些命令和操作包括:set、add、replace、get、delete

#前三个命令是用于操作存储在 memcached 中的键值对的标准修改命令,都使用如下所示的语法:

command set/add/replace

key #key 用于查找缓存值

flags #可以包括键值对的整型参数,客户机使用它存储关于键值对的额外信息

expiration time 在缓存中保存键值对的时间长度(以秒为单位,0 表示永远)

bytes #在缓存中存储的字节数

value 存储的值(始终位于第二行)

#增加key,过期时间为秒,bytes为存储数据的字节数

add key flags exptime bytes

这个没有客户端,只能通过telnet来连接

yum install telnet -y

telnet 172.25.254.10 11211

六、session 共享服务器

6.1、msm 介绍

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

项目早期托管在google code,目前在Github

github网站链接: https://github.com/magro/memcached-session-manager

支持Tomcat的 6.x、7.x、8.x、9.x

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)

6.2、安装

参考链接:https://github.com/magro/memcached-session-manager/wiki/SetupAndConfiguration

配置对端存储 ,session共享,会话保持。

将spymemcached.jar、memcached-session-manage、kyro相关的jar文件都放到Tomcat的lib目录 中,这个目录是 $CATALINA_HOME/lib/ ,对应本次安装就是/usr/local/tomcat/lib。

root@tomcat1 jar\]# cp \*.jar /usr/local/tomcat/lib/

6.3、配置过程

修改tomcat配置

这些添加的内容可以在官方网站上找到

root@tomcat1 \~\]# vim /usr/local/tomcat/conf/context.xml

root@tomcat2 \~\]# vim /usr/local/tomcat/conf/context.xml

修改nginx配置

upstream tomcat {

hash $cookie_JSESSIONID;

server 172.25.254.10:8080;

server 172.25.254.20:8080;

}

server {

listen *:80;

server_name www.timingzpy.org;

root /data/web/html;

index index.html;

location ~ \.jsp$ {

proxy_pass http://tomcat;

}

}

测试:

现在关闭172.25.254.20 的tomcat服务

这样就配置好了

在一个服务器断的时候,在转接另一服务器后,记录依然存在。

相关推荐
高山上有一只小老虎5 分钟前
翻之矩阵中的行
java·算法
火钳游侠19 分钟前
java单行注释,多行注释,文档注释
java·开发语言
曼巴UE522 分钟前
UE FString, FName ,FText 三者转换,再次学习,官方文档理解
服务器·前端·javascript
code bean42 分钟前
【CMake】为什么需要清理 CMake 缓存文件?深入理解 CMake 生成器切换机制
java·spring·缓存
selt7911 小时前
Redisson之RedissonLock源码完全解析
android·java·javascript
RestCloud1 小时前
智能制造的底层基建:iPaaS 如何统一 ERP、MES 与 WMS 的数据流
java·wms·erp·数据传输·ipaas·mes·集成平台
行走的陀螺仪1 小时前
高级前端 Input 公共组件设计方案(Vue3 + TypeScript)
前端·javascript·typescript·vue·组件设计方案
guslegend1 小时前
SpringBoot源码剖析
java
皮卡龙1 小时前
Spring MVC 接收请求参数的核心
java·spring·mvc
一颗不甘坠落的流星2 小时前
【Antd】基于 Upload 组件,导入Json文件并转换为Json数据
前端·javascript·json