企业级WEB应用服务器TOMCAT

目录

一 、WEB技术

1.1 HTTP协议和B/S 结构

1.2 前端三大核心技术

1.2.1 HTML

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

1.2.3 JavaScript

二、WEB框架

2.1 web 资源和访问

三 、tomcat的功能介绍

3.1 安装 Tomcat

3.1. 环境搭建准备

3.2tomcat的文件结构和组成

3.3生成tomcat的启动文件

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

 4.1 常见部署方式介绍

4.2 利用 nginx 反向代理实现

4.3 实现tomcat中的负载均衡

五 、Memcached

5.1 Memcached简介

5.2 memcached 操作命令

5.3 memcached的安装与启动

六、 session 共享服务器

6.1 msm安装配置


、WEB技术

1.1 HTTP协议和B/S 结构

  • 操作系统有进程子系统,使用多进程就可以充分利用硬件资源。进程中可以多个线程,每一个线程可以被CPU调度执行,这样就可以让程序并行的执行。这样一台主机就可以作为一个服务器为多个客户端提供计算服务。
  • 客户端和服务端往往处在不同的物理主机上,它们分属不同的进程,这些进程间需要通信。跨主机的进程间通信需要使用网络编程。最常见的网络编程接口是Socket。
  • Socket称为套接字,本意是插座。也就是说网络通讯需要两端,如果一端被动的接收另一端请求并提供计算和数据的称为服务器端,另一端往往只是发起计算或数据请求,称为客户端。
  • 这种编程模式称为Client/Server编程模式,简称C/S编程。开发的程序也称为C/S程序。C/S编程往往使用传输层协(TCP/UDP),较为底层,比如:QQ,迅雷, 云音乐, 云盘, foxmail,xshell等
  • 1990年HTTP协议和浏览器诞生。在应用层使用文本跨网络在不同进程间传输数据,最后在浏览器中将服务器端返回的HTML渲染出来。由此,诞生了网页开发。
  • 网页是存储在WEB服务器端的文本文件,浏览器发起HTTP请求后,到达WEB服务程序后,服务程序根据URL读取对应的HTML文件,并封装成HTTP响应报文返回给浏览器端。
  • 起初网页开发主要指的是HTML、CSS等文件制作,目的就是显示文字或图片,通过超级链接跳转到另一个HTML并显示其内容。
  • 后来,网景公司意识到让网页动起来很重要,傍着SUN的Java的名气发布了JavaScript语言,可以在浏览器中使用JS引擎执行的脚本语言,可以让网页元素动态变化,网页动起来了。
  • 最早出现了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文件,是由格式标签和数据组成

<!DOCTYPE html>
 <html lang="en">
 <head>
 <meta charset="UTF-8">
 <title>首页</title>
 </head>
 <body>
 <h1>云原生</h1>
 </body>
 </html>
  • 超文本需要显示,就得有软件能够呈现超文本定义的排版格式,例如显示:图片、表格,显示字体的大小、颜色,这个软件就是浏览器。

  • 超文本的诞生是为了解决纯文本不能格式显示的问题,是为了好看,但是只有通过网络才能分享超文本的内容,所以制定了HTTP协议.

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核心技术,得到了几乎主流浏览器支持。

二、WEB框架

2.1 web 资源和访问

PC 端或移动端浏览器访问

  • 从静态服务器请求HTML、CSS、JS等文件发送到浏览器端,浏览器端接收后渲染在浏览器上从图片服务器请求图片资源显示

  • 从业务服务器访问动态内容,动态内容是请求后有后台服务访问数据库后得到的,最终返回到浏览器端

手机 App 访问

  • 内置了HTML和JS文件,不需要从静态WEB服务器下载 JS 或 HTML。为的就是减少文件的发送,现代前端开发使用的JS文件太多或太大了

  • 有必要就从图片服务器请求图片,从业务服务器请求动态数据

  • 客户需求多样,更多的内容还是需要由业务服务器提供,业务服务器往往都是由一组服务器组成。

三 、tomcat的功能介绍

  • 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 的正式版本已经更新到 9.0.x 版本,但当前企业中主流版本为 8.x 和 7.x

  • 官网:

Apache Tomcat® - Welcome!

  • 官网文档:

Apache Tomcat 8 (8.5.100) - Documentation Index

  • 帮助文档:

Apache Tomcat Home - Apache Tomcat - Apache Software Foundation

FAQ - Apache Tomcat - Apache Software Foundation

3.1 安装 Tomcat

3.1. 环境搭建准备
  • 主机配置

    准备三台主机

    tomcat1-txy 172.25.254.10

    tomcat2-txy 172.25.254.20

    一台Nginx作为调度器 172.25.254.115 nginx- node1

  • 环境安装

    安装java环境 ----jdk

#查看jdk版本
[root@tomcat1-txy ~]# dnf search java

#安装
[root@tomcat1-txy ~]# dnf install java-1.8.0-openjdk.x86_64 -y

#查看环境
[root@tomcat1-txy ~]# ll /etc/alternatives/jre_openjdk/
总用量 184
-rw-r--r-- 1 root root   1522  1月 13  2024 ASSEMBLY_EXCEPTION
drwxr-xr-x 2 root root    188  8月 22 13:37 bin
drwxr-xr-x 9 root root   4096  8月 22 13:37 lib
-rw-r--r-- 1 root root  19274  1月 13  2024 LICENSE
-rw-r--r-- 1 root root 158253  1月 13  2024 THIRD_PARTY_README
[root@tomcat1-txy ~]#

#官网下载
https://tomcat.apache.org/download-90.cgi

  • 装tomcat
#安装tomcat
#导入安装包到虚拟主机
[root@tomcat1-txy ~]# ls
anaconda-ks.cfg  apache-tomcat-9.0.93.tar.gz

#解压安装
[root@tomcat1-txy ~]# tar zxf apache-tomcat-9.0.93.tar.gz -C /usr/local/
[root@tomcat1-txy ~]# cd /usr/local/
[root@tomcat1-txy local]# ls
apache-tomcat-9.0.93  bin  etc  games  include  lib  lib64  libexec  sbin  share  src

#设置软连接,方便后续操作
[root@tomcat1-txy local]# ln -s apache-tomcat-9.0.93 tomcat1
[root@tomcat1-txy local]# ls
apache-tomcat-9.0.93  bin  etc  games  include  lib  lib64  libexec  sbin  share  src  tomcat
[root@tomcat1-txy local]# cd tomcat/
[root@tomcat1-txy tomcat]# ls
bin           conf             lib      logs    README.md      RUNNING.txt  webapps
BUILDING.txt  CONTRIBUTING.md  LICENSE  NOTICE  RELEASE-NOTES  temp         work
[root@tomcat1-txy tomcat]#

#运行

[root@tomcat1-txy ~]# cd /usr/local/tomcat/bin/
[root@tomcat1-txy bin]# ls -n

[root@tomcat1-txy 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-jul                      i.jar
Using CATALINA_OPTS:
Tomcat started.

#查看端口
[root@tomcat1-txy bin]# netstat -anltupe | grep java
tcp6       0      0 127.0.0.1:8005          :::*                    LISTEN      0          82                      442      30166/java
tcp6       0      0 :::8080                 :::*                    LISTEN      0          82                      430      30166/java
[root@tomcat1-txy bin]#

#访问

3.2tomcat的文件结构和组成

目录结构

#目录 说明
-----------------------------------------
bin 服务启动、停止等相关程序和文件
conf 配置文件
lib  库目录
logs  日志目录
webapps  应用程序,应用部署目录,相当于nginx的默认发布目录
work jsp  编译后的结果文件,建议提前预热访问

#查看tomcat相关目录和文件
[root@tomcat1-txy bin]# ls /usr/local/tomcat1/
bin           conf             lib      logs    README.md      RUNNING.txt  webapps
BUILDING.txt  CONTRIBUTING.md  LICENSE  NOTICE  RELEASE-NOTES  temp         work

3.3生成tomcat的启动文件

#生成tomcat的主配置文件

[root@tomcat1-txy conf]# vim tomcat.conf
[root@tomcat1-txy conf]# cat tomcat.conf
JAVA_HOME=/etc/alternatives/jre_openjdk

#启动文件

[root@tomcat1-txy ~]# 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-txy ~]# vim /usr/bin/tomcat

#!bin/bash
case $1 in
    start)
    /usr/local/tomcat1/bin/startup.sh
    ;;
    stop)
    /usr/local/tomcat/bin/shutdown.sh
    ;;
esac

[root@tomcat1-txy conf]# chmod +x /usr/bin/tomcat

[root@tomcat1-txy conf]# vim /lib/systemd/system/tomcat.service     ExecStart=/usr/local/tomcat start    ExecStop=/usr/local/tomcat stop


[root@tomcat1-txy ~]# useradd -s /sbin/nologin -M tomcat1
[root@tomcat1-txy ~]# systemctl daemon-reload
[root@tomcat1-txy ~]# ps aux | grep tomcat1
root        1726  0.0  0.1   6636  2304 pts/0    S+   13:32   0:00 grep --color=auto tomcat1
[root@tomcat1-txy ~]# cd
[root@tomcat1-txy ~]# ls /usr/local/tomcat/ -ld
drwxrwxrwx 9 root root 220  8月 22 20:04 /usr/local/tomcat/
[root@tomcat1-txy ~]# chown -R tomcat.tomcat /usr/local/tomcat/

[root@tomcat1-txy ~]# systemctl daemon-reload
[root@tomcat1-txy ~]# systemctl enable --now tomcat
[root@tomcat1-txy ~]# systemctl status tomcat.service


#在主机20上完成10的操作

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

 4.1 常见部署方式介绍

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

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

    • LNMT:Linux + Nginx + MySQL + Tomcat

    • LAMT :Linux + Apache(Httpd)+ MySQL + Tomcat

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

    • LNMT :Linux + Nginx + MySQL + Tomcat

  • 多级代理

    • LNNMT :Linux + Nginx + Nginx + MySQL + Tomcat

4.2 利用 nginx 反向代理实现

  • 利用nginx反向代理功能,实现图中的代理功能,将用户请求全部转发至指定的同一个tomcat主机

  • 利用nginx指令proxy_pass 可以向后端服务器转发请求报文,并且在转发时会保留客户端的请求报文中的host首部

  • 默认发文件
[root@tomcat1-txy ~]# ls
anaconda-ks.cfg  apache-tomcat-9.0.93.tar.gz  test.jsp
[root@tomcat1-txy ~]# cp test.jsp /usr/local/tomcat/webapps/ROOT/
[root@tomcat1-txy ~]#


[root@tomcat2-txy ~]# ls
anaconda-ks.cfg  apache-tomcat-9.0.93.tar.gz  test.jsp
[root@tomcat2-txy ~]# cp test.jsp /usr/local/tomcat/webapps/ROOT/
[root@tomcat2-txy ~]#



[root@nginx conf.d]# vim vhost.conf 
[root@nginx conf.d]# cat vhost.conf 
upstream tomcat {
	ip_bash;
	server 172.25.254.10:8080;
	server 172.25.254.20:8080;
}
server {
	listen *:80;
	server_name www.txy.org;
	root	/data/web/html;
	index	index.html;
 
	location ~ \.jsp$ {
		#proxy_pass http://172.25.254.10:8080;
		#proxy_pass http://172.25.254.20:8080;
		proxy_pass http://tomcat
	}
}

[root@nginx conf.d]# 
[root@nginx conf.d]# vim vhost.conf 
[root@nginx conf.d]# cat vhost.conf 
server {
	listen *:80;
	server_name www.txy.org;
	root	/data/web/html;
	index	index.html;
 
	location ~ \.jsp$ {
		proxy_pass http://172.25.254.10:8080;
		proxy_pass http://172.25.254.20:8080;
	}
}
[root@nginx conf.d]# nginx -t
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
[root@nginx conf.d]# nginx -s reload

4.3 实现tomcat中的负载均衡

  • 动态服务器的问题,往往就是并发能力太弱,往往需要多台动态服务器一起提供服务。如何把并发的压 力分摊,这就需要调度,采用一定的调度策略,将请求分发给不同的服务器,这就是Load Balance负载 均衡。
  • 当单机Tomcat,演化出多机多级部署的时候,一个问题便凸显出来,这就是Session。而这个问题的由 来,都是由于HTTP协议在设计之初没有想到未来的发展。
[root@nginx conf.d]# vim vhost.conf 
[root@nginx conf.d]# cat vhost.conf 
upstream tomcat {
	ip_bash;
	server 172.25.254.10:8080;
	server 172.25.254.20:8080;
}
server {
	listen *:80;
	server_name www.txy.org;
	root	/data/web/html;
	index	index.html;
 
	location ~ \.jsp$ {
		#proxy_pass http://172.25.254.10:8080;
		#proxy_pass http://172.25.254.20:8080;
		proxy_pass http://tomcat
	}
}

 、Memcached

5.1 Memcached简介

  1. Memcached 只支持能序列化的数据类型,不支持持久化,基于Key-Value的内存缓存系统memcached 虽然没有像redis所具备的数据持久化功能,比如RDBAOF都没有,但是可以通过做集群同步的方式, 让各memcached服务器的数据进行同步,从而实现数据的一致性,即保证各memcached的数据是一样 的,即使有任何一台 memcached 发生故障,只要集群中有一台 memcached 可用就不会出现数据丢 失,当其他memcached 重新加入到集群的时候,可以自动从有数据的memcached 当中自动获取数据并提供服务。
  2. Memcached 借助了操作系统的 libevent 工具做高效的读写。libevent是个程序库,它将Linuxepoll、BSD类操作系统的kqueue等事件处理功能封装成统一的接口。即使对服务器的连接数增加,也能发挥高性能。memcached使用这个libevent库,因此能在LinuxBSDSolaris等操作系统上发挥其高性能
  3. Memcached 支持最大的内存存储对象为1M,超过1M的数据可以使用客户端压缩或拆分报包放到多个key中,比较大的数据在进行读取的时候需要消耗的时间比较长,memcached 最适合保存用户的 session实现session共享
  4. Memcached存储数据时, Memcached会去申请1MB的内存, 把该块内存称为一个slab, 也称为一个page
  5. Memcached 支持多种开发语言,包括:JAVA,C,Python,PHP,C#,Ruby,Perl
  6. Memcached 官网:http://memcached.org

5.2 memcached 操作命令

五种基本 memcached 命令执行最简单的操作。

命令和操作包括: 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

5.3 memcached的安装与启动

[root@tomcat1-txy ~]# yum install memcached -y
[root@tomcat1-txy ~]# vim /etc/sysconfig/memcached
[root@tomcat1-txy ~]# cat /etc/sysconfig/memcached
PORT="11211"
USER="memcached"
MAXCONN="1024"
CACHESIZE="64"
OPTIONS="-l 0.0.0.0,::1"        # 修改此处
 
[root@tomcat1-txy ~]# systemctl start memcached.service 
[root@tomcat1-txy ~]# dnf install telnet -y
[root@tomcat1-txy ~]# 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
STORED
get key1
VALUE key1 0 2
ll
END
quit
Connection closed by foreign host.

六、 session 共享服务器

  • msmmemcached session manager)提供将Tomcatsession保持到memcached可以实现高可用。
  • 项目早期托管在google code,目前在Github
  • github网站链接: https://github.com/magro/memcached-session-manager
  • 支持Tomcat 6.x7.x8.x9.x
  • TomcatSession管理类,Tomcat版本不同
  1. memcached-session-manager-2.3.2.jar
  2. memcached-session-manager-tc9-2.3.2.jar
  • Session数据的序列化、反序列化类
  1. 官方推荐kyro
  2. webappWEB-INF/lib/
  • 驱动类
  1. memcached(spymemcached.jar)
  2. Redis(jedis.jar)

6.1 msm安装配置

注意:

t1 m1 部署可以在一台主机上, t2 m2 部署也可以在同一台。
当新用户发请求到 Tomcat1 , Tomcat1 生成 session 返回给用户的同时 , 也会同时发给 memcached2 备份。即Tomcat1 session 为主 session memcached2 session 为备用 session ,使用 memcached 相当于备份了一份Session
如果 Tomcat1 发现 memcached2 失败 , 无法备份 Session memcached2, 则将 Sessoin 备份存放在
memcached1
# 下载相关jar包

[root@tomcat1-txy ~]# cd jar/    
[root@tomcat1-txy iar]# ls
asm-5.2.jar                          memcached-session-manager-tc9-2.3.2.jar  reflectasm-1.11.9.jar
kryo-3.0.3.jar                       minlog-1.3.1.jar                         spymemcached-2.12.3.jar
kryo-serializers-0.45.jar            msm-kryo-serializer-2.3.2.jar
memcached-session-manager-2.3.2.jar  objenesis-2.6.jar
[root@tomcat1-txy iar]# 
[root@tomcat1-txy iar]# cp *.jar /usr/local/tomcat/lib/
[root@tomcat1-txy iar]# cd /usr/local/tomcat/lib/


#修改tomcat配置
[root@tomcat1-txy ~]# 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@ka1 ~]# systemctl restart tomcat


# 修改nginx配置

[root@nginx conf.d]# vim vhost.conf 
[root@nginx conf.d]# cat vhost.conf 
upstream tomcat {
	hash $cookie_JSESSIONID;
	server 172.25.254.10:8080;
	server 172.25.254.20:8080;
}
 
server {
	listen *:80;
	server_name www.txy.org;
	root	/data/web/html;
	index	index.html;
 
	location ~ \.jsp$ {
		proxy_pass http://tomcat;
	}
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值