TOMCAT全解

目录

一 、WEB技术简介

HTTP协议

B/S 结构

前端三大核心技术简介

HTML

CSS

JavaScript

二 、WEB框架

web资源和访问

后台应用架构

三、tomacat的介绍

四、tomcat的部署

tomcat的反向代理

 tomcat的负载均衡

 memcached的安装与启动

 tomcat的session会话保持


 、WEB技术简介

HTTP协议

基本介绍:
• HTTP:超文本传输协议,是从万维网服务器传输超文本到本地浏览器的传送协议
• HTTP是一种应用层协议,是基于TCP/IP通信协议来传送数据的,其中 HTTP1.0、HTTP1.1、HTTP2.0 均为 TCP 实现,HTTP3.0 基于 UDP 实现。现主流使用 HTTP1.0 和 HTTP3.0
• 协议:为了是数据在网络源头到达目的,网络通信的参与方必须遵守相同的规则,这套规则曾为协议,他的最终体现为在网络上传输的数据报的格式 ,通俗的来讲协议就是要保证网络通信的双方,能够互相对接,互相联系的暗号。

工作过程:
当我们在浏览器输入一个网址,此时浏览器就会给对应的服务器发送一个HTTP请求,对应的服务器收到这个请求之后,经过计算就会返回一个HTTP响应,并且当我们访问一个网站的时候,可能涉及到不止一次的HTTP请求和相应的交互过程。
HTTP协议的特点:一发一收,一问一答。

B/S 结构

B/S架构,即浏览器/服务器架构,是一种网络架构模式,将系统功能实现的核心部分集中到服务器上,简化了系统的开发、维护和使用。客户端只需要安装一个浏览器,通过Web服务器与数据库服务器进行数据交互。B/S架构利用了Web浏览器技术和Internet协议,实现了异构系统的连接和信息的共享。

B/S架构的分层:

第一层表现层:主要完成用户和后台的交互及最终查询结果的输出功能。

第二层逻辑层:主要是利用服务器完成客户端的应用逻辑功能。

第三层数据层:主要是接受客户端请求后独立进行各种运算。

前端三大核心技术简介

HTML

HTML(全称为“超文本标记语言”)是一种用于创建Web页面的标记语言。它是Web开发的基础,允许开发者定义页面的结构、内容和样式。HTML使用一些标记或“标签”来描述文本和媒体内容的结构和格式,这些标签可以指示网页浏览器如何显示内容,包括标题、段落、列表、超链接、图像、音频、视频等等。HTML还可以与其他Web技术(如CSS和JavaScript)结合使用,以实现更复杂和交互性的Web应用程序。

CSS

CSS通常称为CSS样式表或层叠样式表(级联样式表),主要用于设置HTML页面中的文本内容(字体、大小、对齐方式等)、图片的外形(宽高、边框样式、边距等)以及版面的布局等外观显示样式。
CSS以HTML为基础,提供了丰富的功能,如字体、颜色、背景的控制及整体排版等,而且还可以针对不同的浏览器设置不同的样式。

JavaScript

JavaScript是一门跨平台、面向对象的脚本语言(不需要编译,直接解释运行即可),来控制网页的行为,它能使网页可交互。

 、WEB框架

web资源和访问

Web 资源的类型

  • 静态资源

定义:指内容不随时间变化而变化的资源。 例子:HTML 文件、CSS 样式表、JavaScript 文件、图像文件(如 JPEG、PNG)、音频文件、视频文件等。

特点:一旦创建,在没有人为修改的情况下,每次访问都返回相同的内容。

  • 动态资源

定义:其内容是根据特定的请求动态生成的资源。

例子:由服务器端脚本(如 PHP、Python、Java 等语言编写的服务器端程序)生成的网页内容。 特点:每次请求可能会得到不同的响应,因为资源的生成取决于请求的参数、用户身份、数据库状态等多种因素。

Web 资源的访问方式

  • 通过浏览器访问 :这是最常见的方式。用户在浏览器的地址栏中输入 URL(统一资源定位符),浏览器向服务器发送请求,服务器返回相应的 Web 资源,浏览器解析并显示这些资源。 例如,当你在浏览器中输入一个网站的地址,如 “www.example.com”,浏览器会向该网站的服务器发送请求,获取 HTML、CSS、JavaScript 等资源,并将其渲染成用户可以看到的网页。
  • 通过 API 访问 :许多 Web 应用程序提供 API(应用程序编程接口),允许其他程序以编程的方式访问其资源。 例如,一个天气应用程序可能提供一个 API,让其他开发者可以获取特定地区的天气信息。开发者可以使用编程语言(如 Python、Java、JavaScript 等)发送 HTTP 请求到该 API 的端点,获取以 JSON 或 XML 格式返回的天气数据。
  • 命令行工具访问 有些工具可以通过命令行界面访问 Web 资源。例如,使用 “curl” 命令可以发送 HTTP 请求并获取资源的内容。 比如,在命令行中输入 “curl https://www.example.com”,会返回该网站的 HTML 内容。

影响 Web 资源访问的因素

  • 网络连接: 稳定的网络连接是确保顺利访问 Web 资源的基础。如果网络速度慢或不稳定,可能会导致资源加载缓慢或失败。 例如,在网络拥堵的情况下,下载大文件或访问视频流可能会变得非常缓慢。
  • 服务器性能 :服务器的处理能力、内存、存储等性能因素会影响对 Web 资源的响应速度。 如果服务器负载过高,可能会导致响应时间延长,甚至无法响应请求。
  • 安全性设置 :防火墙、代理服务器、HTTPS 加密等安全设置可能会限制对某些 Web 资源的访问。 例如,一些公司的网络可能会设置防火墙,阻止员工访问特定类型的网站。
  • 资源权限 :Web 资源可能具有不同的访问权限设置。例如,某些网页可能需要用户登录才能访问,或者某些 API 可能需要授权才能使用。 如果没有正确的权限,用户将无法访问相应的资源。

后台应用架构

单体架构

传统架构(单机系统),一个项目一个工程:比如商品、订单、支付、库存、登录、注册等等,统
一部署,一个进程all in one的架构方式,把所有的功能单元放在一个应用里。然后把整个应用部署到一台服务器上。
如果负载能力不行,将整个应用进行水平复制,进行扩展,然后通过负载均衡实现访问。
Java 实现: JSP Servlet ,打包成一个 jar war 部署易于开发和测试: 也十分方便部署 ; 当需要扩展时,只需要将 war 复制多份,然后放到多个服务器上,再做个负载均衡就可以了。
如果某个功能模块出问题,有可能全站不可访问,修改 Bug 后、某模块功能修改或升级后,需要停
掉整个服务,重新整体重新打包、部署这个应用 war 包,功能模块相互之间耦合度高 , 相互影响 , 不适合当今互联网业务功能的快速迭代。
特别是对于一个大型应用,我们不可能吧所有内容都放在一个应用里面,我们如何维护、如何分工
合作都是问题。如果项目庞大,管理难度大web应用服务器:开源的 tomcat jetty glassfish 。商用的有 weblogic websphere Jboss

微服务 

属于 SOA Service Oriented Architecture )的子集。
微服务化的核心就是将传统的一站式应用,根据业务拆分成一个一个的服务,彻底去掉耦合,每一
个微服务提供单个业务功能,一个服务只做一件事。每个服务都围绕着具体业务进行构建,并且能
够被独立地部署到生产环境、类生产环境等。
从技术角度讲就是一种小而独立的处理过程,类似与进程的概念,能够自行单独启动或销毁微服务架构(分布式系统),各个模块/ 服务,各自独立出来, " 让专业的人干专业的事 " ,独立部署。分布式系统中,不同的服务可以使用各自独立的数据库。
服务之间采用轻量级的通信机制(通常是基于 HTTP RESTful API )。
微服务设计的思想改变了原有的企业研发团队组织架构。传统的研发组织架构是水平架构,前端、
后端、 DBA 、测试分别有自己对应的团队,属于水平团队组织架构。而微服务的设计思想对团队的
划分有着一定的影响,使得团队组织架构的划分更倾向于垂直架构,比如用户业务是一个团队来负
责,支付业务是一个团队来负责。但实际上在企业中并不会把团队组织架构拆分得这么绝对,垂直
架构只是一种理想的架构。
微服务的实现框架有多种,不同的应用架构,部署方式也有不同。

三、tomacat的介绍

Tomcat 服务器是一个免费的开放源代码的 Web 应用服务器,属于轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,Tomcat 具有处理 HTML 页面的功能,它还是一个 Servlet 和JSP容器。
起始于 SUN 公司的一个 Servlet 的参考实现项目 Java Web Server ,开发者是 James Duncan Davidson, 在1999 年,将项目贡献给了 apache 软件基金会( ASF ),和 ASF 现有的项目 JServ 合并,并开源成为顶级项目。
Tomcat 仅仅实现了 Java EE 规范中与 Servlet JSP 相关的类库,是 JavaEE 不完整实现。
1999 年发布初始版本是 Tomcat 3.0 ,实现了 Servlet 2.2 JSP 1.1 规范。
Tomcat 4.x 发布时,内建了 Catalina Servlet 容器)和 Jasper JSP engine )等。
当前 Tomcat 的正式版本已经更新到 10.0.x 版本,但当前企业中主流版本为 8.x 7.x。
官网 :
http://tomcat.apache.org/
官网文档 :
https://tomcat.apache.org/tomcat-8.5-doc/index.html
帮助文档 :
https://cwiki.apache.org/confluence/display/tomcat/
https://cwiki.apache.org/confluence/display/tomcat/FAQ

四、tomcat的部署

常见部署方式

  • standalone模式,Tomcat单独运行,直接接受用户的请求,不推荐。
  • 反向代理,单机运行,提供了一个Nginx作为反向代理,可以做到静态由nginx提供响应,动态jsp代理给Tomcat LNMTLinux + Nginx + MySQL + Tomcat ;LAMTLinux + ApacheHttpd+ MySQL + Tomcat
  • 前置一台Nginx,给多台Tomcat实例做反向代理和负载均衡调度,Tomcat上部署的纯动态页面更 适合 LNMTLinux + Nginx + MySQL + Tomcat
  • 多级代理 LNNMTLinux + Nginx + Nginx + MySQL + Tomcat

 安装tomcat

安装3个主机,分别为nginx、tomcat-node1、tomcat-node2

在两台tomcat主机上安装java环境

yum install java-1.8.0-openjdk.x86_64 -y

[root@tomcat-node1 ~]# ll /etc/alternatives//jre_openjdk/
总用量 184
-rw-r--r-- 1 root root   1522  8月 30  2022 ASSEMBLY_EXCEPTION
drwxr-xr-x 2 root root    188  8月 22 09:19 bin
drwxr-xr-x 9 root root   4096  8月 22 09:19 lib
-rw-r--r-- 1 root root  19274  8月 30  2022 LICENSE
-rw-r--r-- 1 root root 157063  8月 30  2022 THIRD_PARTY_README

 在两台tomcat主机上安装软件包并启动tomcat

[root@tomcat-node1 ~]# tar zxf apache-tomcat-9.0.93.tar.gz -C /usr/local/
[root@tomcat-node1 ~]# cd /usr/local/
[root@tomcat-node1 local]# ls
apache-tomcat-9.0.93  etc    include  lib64    sbin   src
bin                   games  lib      libexec  share
[root@tomcat-node1 local]# ln -s apache-tomcat-9.0.93 tomcat
[root@tomcat-node1 local]# cd tomcat/
[root@tomcat-node1 tomcat]# ls
bin           CONTRIBUTING.md  logs       RELEASE-NOTES  webapps
BUILDING.txt  lib              NOTICE     RUNNING.txt    work
conf          LICENSE          README.md  temp
[root@tomcat-node1 tomcat]# cd bin/
[root@tomcat-node1 bin]# ls
bootstrap.jar                 configtest.sh     shutdown.sh
catalina.bat                  daemon.sh         startup.bat
catalina.sh                   digest.bat        startup.sh
catalina-tasks.xml            digest.sh         tomcat-juli.jar
ciphers.bat                   makebase.bat      tomcat-native.tar.gz
ciphers.sh                    makebase.sh       tool-wrapper.bat
commons-daemon.jar            setclasspath.bat  tool-wrapper.sh
commons-daemon-native.tar.gz  setclasspath.sh   version.bat
configtest.bat                shutdown.bat      version.sh
[root@tomcat-node1 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.

网页测试: 

生成tomcat的启动文件 

[root@tomcat-node1 conf]# vim tomcat.conf
[root@tomcat-node1 conf]# vim /lib/systemd/system/tomcat.service

 使/usr/bin/tomcat具备可执行的权限

[root@tomcat-node1 conf]# vim /usr/bin/tomcat
[root@tomcat-node1 conf]# chmod +x /usr/bin/tomcat
[root@tomcat-node1 conf]# tomcat start
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@tomcat-node1 conf]# vim /lib/systemd/system/tomcat.service

 生成启动文件

[root@tomcat-node1 conf]# useradd -s /sbin/nologin -M tomcat
[root@tomcat-node1 conf]# chown -R tomcat.tomcat /usr/local/tomcat/
[root@tomcat-node1 conf]# systemctl daemon-reload
[root@tomcat-node1 conf]# systemctl enable --now tomcat
Created symlink /etc/systemd/system/multi-user.target.wants/tomcat.service → /usr/lib/systemd/system/tomcat.service.

tomcat的反向代理

利用 nginx 反向代理功能,实现图中的代理功能,将用户请求全部转发至指定的同一个 tomcat 主机。
利用 nginx 指令 proxy_pass 可以向后端服务器转发请求报文 , 并且在转发时会保留客户端的请求报文中的host首部,最终在浏览器上测试。
[root@tomcat-node1 ~]# ls
anaconda-ks.cfg  apache-tomcat-9.0.93.tar.gz  test.jsp
[root@tomcat-node1 ~]# cp test.jsp /usr/local/tomcat/webapps/ROOT/
[root@tomcat-node1 ~]# scp test,jsp root@172.25.254.20:/usr/local/tomcat/webapps/ROOT/

nginx代理配置

[root@nginx-node1 ~]# vim /usr/local/nginx/conf.d/vhosts.conf
[root@nginx-node1 ~]# nginx -s reload

 

 tomcat的负载均衡

使用源地址哈希算法

[root@nginx-node1 ~]# vim /usr/local/nginx/conf.d/vhosts.conf
[root@nginx-node1 ~]# nginx -s reload

测试:在不同的浏览器测试www.zf.org/test.jsp

memcached的安装与启动

[root@tomcat-node1 ~]# dnf install memcached -y

相关参数

set、add、replace、get、delete
#前三个命令是用于操作存储在 memcached 中的键值对的标准修改命令,都使用如下所示的语法:
command <key> <flags> <expiration time> <bytes>
<value>
#参数说明如下:
command set/add/replace
key key 用于查找缓存值
flags 可以包括键值对的整型参数,客户机使用它存储关于键值对的额外信息
expiration time 在缓存中保存键值对的时间长度(以秒为单位,0 表示永远)
bytes 在缓存中存储的字节数
value 存储的值(始终位于第二行)
#增加key,过期时间为秒,bytes为存储数据的字节数
add key flags exptime bytes
[root@tomcat-node1 ~]# vim /etc/sysconfig/memcached
[root@tomcat-node1 ~]# systemctl start memcached.service 
[root@tomcat-node1 ~]# netstat -antlupe | grep memcached
tcp        0      0 0.0.0.0:11211           0.0.0.0:*               LISTEN      977        77335      33552/memcached     
tcp6       0      0 ::1:11211               :::*                    LISTEN      977        77336      33552/memcached  

使用telnet测试

[root@tomcat-node2 ~]# yum install telnet -y
[root@tomcat-node2 ~]# telnet 172.25.254.20 11211
Trying 172.25.254.20...
Connected to 172.25.254.20.
Escape character is '^]'.
add key1 0 20 2
ll
STOREO
get key1
VALUE key1 0 2
ll
END

 tomcat的session会话保持

2台tomcat主机传输相关软件包

[root@tomcat-node1 ~]# cd jar/
[root@tomcat-node1 jar]# ls
asm-5.2.jar                memcached-session-manager-2.3.2.jar      msm-kryo-serializer-2.3.2.jar  spymemcached-2.12.3.jar
kryo-3.0.3.jar             memcached-session-manager-tc9-2.3.2.jar  objenesis-2.6.jar
kryo-serializers-0.45.jar  minlog-1.3.1.jar                         reflectasm-1.11.9.jar

将spymemcached.jar、memcached-session-manage等相关的jar文件都放到Tomcat的lib目录下

[root@tomcat-node1 jar]# cp *.jar /usr/local/tomcat/lib/
[root@tomcat-node1 jar]# cd /usr/local/tomcat/lib/
[root@tomcat-node1 lib]# ls
annotations-api.jar       jasper.jar                               servlet-api.jar          tomcat-i18n-ko.jar
asm-5.2.jar               jaspic-api.jar                           spymemcached-2.12.3.jar  tomcat-i18n-pt-BR.jar
catalina-ant.jar          jsp-api.jar                              tomcat-api.jar           tomcat-i18n-ru.jar
catalina-ha.jar           kryo-3.0.3.jar                           tomcat-coyote-ffm.jar    tomcat-i18n-zh-CN.jar
catalina.jar              kryo-serializers-0.45.jar                tomcat-coyote.jar        tomcat-jdbc.jar
catalina-ssi.jar          memcached-session-manager-2.3.2.jar      tomcat-dbcp.jar          tomcat-jni.jar
catalina-storeconfig.jar  memcached-session-manager-tc9-2.3.2.jar  tomcat-i18n-cs.jar       tomcat-util.jar
catalina-tribes.jar       minlog-1.3.1.jar                         tomcat-i18n-de.jar       tomcat-util-scan.jar
ecj-4.20.jar              msm-kryo-serializer-2.3.2.jar            tomcat-i18n-es.jar       tomcat-websocket.jar
el-api.jar                objenesis-2.6.jar                        tomcat-i18n-fr.jar       websocket-api.jar
jasper-el.jar             reflectasm-1.11.9.jar                    tomcat-i18n-ja.jar

修改tomcat配置 ,其可内容参考官方网址:https://github.com/magro/memcached-session-manager/wiki/SetupAndConfiguration

[root@tomcat-node1 lib]# vim /usr/local/tomcat/conf/context.xml
[root@tomcat-node1 lib]# systemctl restart tomcat
[root@tomcat-node2 lib]# vim /usr/local/tomcat/conf/context.xml
[root@tomcat-node2 lib]# systemctl restart tomcat

 修改nginx配置

[root@nginx-node1 ~]#  vim /usr/local/nginx/conf.d/vhosts.conf

 

 测试:

关闭172.25.254.10 的tomcat服务

  • 14
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值