一、WEB 技术基础

1 HTTP 协议与 B/S 结构

  1. C/S 与 B/S 对比:C/S 基于 TCP/UDP 的 Socket 编程,如 QQ、Xshell;B/S 基于应用层 HTTP 协议,通过浏览器渲染 HTML,是主流 WEB 开发模式。
  2. 动态网页技术:从静态 HTML 发展而来,通过 CGI、ASP、PHP、JSP 实现服务端动态生成内容,衍生前端(HTML/CSS/JS,浏览器运行)和后端(JSP/PHP 等,服务端运行)开发分工。


 

2 前端三大核心技术

HTML超文本标记语言,定义网页结构和内容非编程语言,由标签组成,浏览器负责渲染
CSS层叠样式表,美化网页CSS3 模块化,存在浏览器兼容问题
JavaScript实现网页动态交互ECMAScript 为标准,V8 引擎推动 Node.js 诞生,成为唯一前后端通用语言

3 同步与异步交互

  1. 同步:请求后整页刷新,资源浪费、体验差,如传统表单提交。

  2. 异步:基于 Ajax 技术(核心为 XMLHttpRequest),局部更新网页,前后端彻底分离,目前主流数据格式为 JSON(替代早期 XML)。

二、WEB 应用架构

1 资源访问流程

  • PC / 移动端浏览器:从静态服务器获取 HTML/CSS/JS,图片服务器获取图片,业务服务器获取动态数据(需访问数据库)。

  • 手机 App:内置 HTML/JS 文件,仅按需请求图片和动态数据,减少网络传输。

2 主流架构对比

(1)单体架构

特点:所有功能整合在一个工程,单进程部署,Java 实现为 JSP/Servlet 打包成 war/jar。

优点:开发、测试、部署简单,可水平复制扩展 + 负载均衡。

缺点:耦合度高,单个模块故障可能导致全站不可用,迭代需整体重启,不适用于大型项目。

常用 WEB 服务器:开源(Tomcat、Jetty、Glassfish)、商用(WebLogic、WebSphere、Jboss)。

(2)微服务架构

特点:SOA 子集,按业务拆分为独立小服务,单服务只做一件事,独立部署、独立数据库,通过 HTTP/RESTful API 通信。

优点:内聚性高、松耦合,支持多语言开发,团队垂直划分(按业务),易于迭代和集成第三方工具。

缺点:开发 / 测试 / 运维复杂度提升,需解决分布式事务和数据一致性,小型项目使用会增加成本。

常用框架:Dubbo(Java RPC 框架,依赖 Zookeeper)、Spring Cloud(完整微服务解决方案,超集 Dubbo)。
 

三、Tomcat 核心基础

1 Tomcat 简介

  • 免费开源轻量级 WEB 应用服务器,处理 HTML,是Servlet/JSP 容器,适用于中小型系统、低并发场景。
  • 仅实现 Java EE 规范中 Servlet/JSP 相关类库,为不完整实现;企业主流版本为 7.x/8.x,最新正式版 9.x。
  • 核心组件:Catalina(Servlet 容器)、Jasper(JSP 引擎)。
  • 官方地址:http://tomcat.apache.org/
     

2 Tomcat 安装与启动(Linux 环境)

1.下载安装包

[root@RS1 ~]# wget https://dlcdn.apache.org/tomcat/tomcat-9/v9.0.115/bin/apache-tomcat-9.0.115.tar.gz

2.部署tomcat

[root@RS1 local]# yum install java-1.8.0-openjdk.x86_64 -y
[root@RS1 ~]# tar zxf apache-tomcat-9.0.115.tar.gz  -C /usr/local
[root@RS1 ~]# cd /usr/local/
[root@RS1 local]# ls
bin  etc  games  include  lib  lib64  libexec  sbin  share  src  tomcat-9.0-doc
[root@RS1 local]# mv apache-tomcat-9.0.115/ tomcat
[root@RS1 local]# cd tomcat/
[root@RS1 tomcat]# ls
bin           conf             lib      logs    README.md      RUNNING.txt  webapps
BUILDING.txt  CONTRIBUTING.md  LICENSE  NOTICE  RELEASE-NOTES  temp         work
 
 
 
[root@RS1 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@RS1 bin]# netstat -antlupe | grep 8080
tcp6       0      0 :::8080                 :::*                    LISTEN      0          139291     10372/java

3制作tomcat的启动脚本

[root@RS1 bin]# vim /usr/local/tomcat/conf/tomcat.conf
JAVA_HOME=/etc/alternatives/jre
[root@RS1 bin]# 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@RS1 bin]# useradd  -s /sbin/nologin -M tomcat
 
[root@RS1 bin]# chown  tomcat.tomcat /usr/local/tomcat/ -R
[root@RS1 bin]# systemctl daemon-reload
[root@RS1 bin]# systemctl enable --now tomcat
[root@RS1 bin]# netstat -antlupe | grep java
tcp6       0      0 127.0.0.1:8005          :::*                    LISTEN      1000       139979     10682/java
tcp6       0      0 :::8080                 :::*                    LISTEN      1000       140563     10682/java

.验证:

浏览器输入服务器IP:8080,出现 Tomcat 默认页面即安装成功

3 tomcat的文件结构和组成

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

四、Nginx与tomcat的整合

1 常见部署模式

Standalone Tomcat:单独运行,直接接收请求,不推荐(无静态资源处理、并发能力弱)。

单机反向代理:Nginx 处理静态资源,动态 JSP 请求转发至 Tomcat(LNMT:Linux+Nginx+MySQL+Tomcat)。

多机反向代理:Nginx 做负载均衡,将请求分发至多台 Tomcat,提升并发能力。

多级代理:LNNMT,多层 Nginx 转发,适用于大型分布式架构。

2.单体架构

[root@Nginx conf.d]# cd /usr/local/nginx/conf/conf.d/
[root@Nginx conf.d]# vim vhosts.conf
server {
    listen 80;
    server_name app.timinglee.org;
    location ~* \.jsp$ {
        proxy_pass http://172.25.254.10:8080;
    }
}
 
[root@RS1 ~]# cp test.jsp  /usr/local/tomcat/webapps/ROOT/
[root@RS1 ~]# scp test.jsp  root@172.25.254.20:/usr/local/tomcat/webapps/ROOT/
 
[root@Nginx conf.d]# nginx  -s reload
 
 
#在windows中设定app.timinglee.org的解析
#在浏览器中访问 app.timinglee.org/test.jsp

测试: 

3.tomcat负载均衡

[root@Nginx conf.d]# vim vhosts.conf
upstream tomcat {
    hash $cookie_JSESSIONID;
    server 172.25.254.10:8080;
    server 172.25.254.20:8080;
}
server {
    listen  80;
    server_name app.timinglee.org;
    location ~* \.jsp$ {
        proxy_pass http://tomcat;
    }
}
[root@Nginx conf.d]# nginx  -s reload
 
#在windows浏览器中访问 app.timinglee.org/test.jsp;
#在windows的另外一个浏览器中访问 app.timinglee.org/test.jsp;

测试

五、Memcached 基础与 Session 共享

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

1.tomcat加载模块

[root@RS1 ~]# unzip jar.zip
[root@RS1 ~]# cd jar/
[root@RS1 jar]# cp * /usr/local/tomcat/
[root@RS1 jar]# scp * root@172.25.254.20:/usr/local/tomcat/lib/

2.安装memcache

[root@RS1 jar]# dnf install memcached
[root@RS2 ~]# dnf install memcached -y
 
[root@RS1 ~]# vim /etc/sysconfig/memcached
[root@RS2 ~]# vim /etc/sysconfig/memcached
 
PORT="11211"
USER="memcached"
MAXCONN="1024"
CACHESIZE="64"
OPTIONS="-l 0.0.0.0,::1"
 
[root@RS1+2 ~]# netstat -antluple | grep memcached
tcp        0      0 0.0.0.0:11211           0.0.0.0:*               LISTEN      988        142615     35756/memcached
tcp6       0      0 ::1:11211               :::*                    LISTEN      988        142616     35756/memcached


3.配置tomcat
[root@RS1 ]#  vim /usr/local/tomcat/conf/context.xml
 
<Context>
 
    <!-- Default set of monitored resources. If one of these changes, the    -->
    <!-- web application will be reloaded.                                   -->
    <WatchedResource>WEB-INF/web.xml</WatchedResource>
    <WatchedResource>WEB-INF/tomcat-web.xml</WatchedResource>
    <WatchedResource>${catalina.base}/conf/web.xml</WatchedResource>
 
    <!-- Uncomment this to disable session persistence across Tomcat restarts -->
    <!--
    <Manager pathname="" />
    -->
   <Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"
    memcachedNodes="n1:172.25.254.10:11211,n2:172.25.254.20:11211"
    failoverNodes="n1"
    requestUriIgnorePattern=".*\.(ico|png|gif|jpg|css|js)$"
    transcoderFactoryClass="de.javakaffee.web.msm.serializer.kryo.KryoTranscoderFactory"
    />
 
</Context>
 
[root@RS2 ]#  vim /usr/local/tomcat/conf/context.xml
 
<Context>
 
    <!-- Default set of monitored resources. If one of these changes, the    -->
    <!-- web application will be reloaded.                                   -->
    <WatchedResource>WEB-INF/web.xml</WatchedResource>
    <WatchedResource>WEB-INF/tomcat-web.xml</WatchedResource>
    <WatchedResource>${catalina.base}/conf/web.xml</WatchedResource>
 
    <!-- Uncomment this to disable session persistence across Tomcat restarts -->
    <!--
    <Manager pathname="" />
    -->
   <Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"
    memcachedNodes="n1:172.25.254.10:11211,n2:172.25.254.20:11211"
    failoverNodes="n2"
    requestUriIgnorePattern=".*\.(ico|png|gif|jpg|css|js)$"
    transcoderFactoryClass="de.javakaffee.web.msm.serializer.kryo.KryoTranscoderFactory"
    />
 
</Context>
[root@RS1 ~]#  systemctl restart tomcat.service
[root@RS2 ~]#  systemctl restart tomcat.service

测试

在一个浏览器中访问,提交数据后关闭当前服务器10

跳转到20上后在提交查看数据是否还在

更多推荐