一 ,web知识 简介
(一)web技术
1,http协议和 B/S (Browser/Server)结构
最早出现了CGl (Common Gateway Interface)通用网关接口,通过浏览器中输入URL直接映射到一个服务器端的脚本程序执行,这个脚本可以查询数据库并返回结果给浏览器端。这种将用户请求使用程序动态生成的技术,称为动态网页技术。先后出现了ASP、PHP、JSP等技术,这些技术的使用不同语言编写的程序都运行在服务器端,所以称为WEB后端编程。有一部分程序员还是要编写HTML、CSS、JavaScript,这些代码运行在浏览器端,称为WEB前端编程。合起来称为Browser/Server编程,即B/S编程。
2,前端三大核心技术
HTML css javascript
(二)web架构
1,web资源和访问
PC端或移动端浏览器访问
从静态服务器请求HTML、CSS、JS等文件发送到浏览器端,浏览器端接收后渲染在浏览器上从图片服务器请求图片资源显示 从业务服务器访问动态内容,动态内容是请求后有后台服务访问数据库后得到的,最终返回到浏览器端
手机 App访问
内置了HTML和]S文件,不需要从静态WEB服务器下载JS或HTML。为的就是减少文件的发送,现代前端开发使用的文件太多或太大了有必要就从图片服务器请求图片,从业务服务器请求动态数据 客户需求多样,更多的内容还是需要由业务服务器提供,业务服务器往往都是由一组服务器组成。
2, 后台应用架构
2.1 具体解释
单体应用:一个项目都在一个机器上
微服务:商品、订单、支付、库存、登录、注册等等 分别部署在不同机器
2.1 微服务的优缺点
优点
- 每个服务足够内聚,足够小,代码容易理解。这样能聚焦一个只当的业务功能或业务需求。
- 开发简单、开发效率提高,一个服务可能就是专业的只干一件事,微服务能够被小团队单独开发,这个小团队可以是2到5人的开发人员组成
- 微服务是松耦合的,是有功能意义的服务,无论是在开发阶段或部署阶段都是独立的。
- 微服务能使用不同的语言开发
- 易于和第三方集成,微服务运行容易且灵活的方式集成自动部署,通过持续集成工具,如: Jenkins、Hudson、Bamboo·微服务易于被一个开发人员理解、修改和维护,这样小团队能够更关注自己的工作成果,无需通过合作才能体现价值。微服务允许你利用融合最新技术。微服务只是业务逻辑的代码,不会和HTML/CSS或其他界面组件混合,即前后端分离·每个微服务都有自己的存储能力,可以有自己的数据库,也可以有统一数据库
- 缺点
- 微服务把原有的一个项目拆分成多个独立工程,增加了开发、测试、运维、监控等的复杂度
- 微服务架构需要保证不同服务之间的数据一致性,引入了分布式事务和异步补偿机制,为设计和开发带来一定挑战·开发人员和运维需要处理分布式系统的复杂性,需要更强的技术能力
- 微服务适用于复杂的大系统,对于小型应用使用微服务,进行盲目的拆分只会增加其维护和开发成本
(三) 同步 异步
1,同步
交互式网页,用户提交了请求,就是想看到查询的结果。服务器响应到来后是一个全新的页面内容,哪怕URL不变,整个网页都需要重新渲染。例如,用户填写注册信息,只是2次密码不一致,提交后,整个注册页面重新刷新,所有填写项目重新填写(当然有办法让用户减少重填)。这种交互非常不友好。从代价的角度看,就是为了注册的一点点信息,结果返回了整个网页内容,不但浪费了网络带宽,还需要浏览器重新渲染网页,太浪费资源了,影响了用户体验和感受。上面这些请求的过程,就是同步过程,用户发起请求,页面整个刷新,直到服务器端响应的数据到来并重新渲染。
2,异步
Ajax通过在后台与服务器进行少量数据交换,可以使网页实现异步更新。这意味着可以在不重新加载整个网页的情况下,对网页的某部分进行更新。Javascript通过调用浏览器内置的WEB API中的XMLHttpRequest对象实现Ajax技术。早期Aijax结合数据格式XML,目前更多的使用)SON。利用AAX可实现前后端开发的彻底分离,改变了传统的开发模式。
二 ,Java 简介
(一)java 组成
1,Java包含下面部分,
- 语言、语法规范。关键字,如: if、for、class等
- 源代码source code
- 依赖库,标准库(基础).I第三方库(针对某些应用)。底层代码太难使用且开发效率低,封装成现成的库
- JVM虚拟机。将源代码编译为中间码即字节码后,再运行在JVM之上
java程序写好后,使用java的编译器,编译成字节码(二进制文件),运行在java虚拟机上,在编译成 各个系统的的执行文件
2,架构图
(二)java实现动态网页功能
1,servelt
本质是一段java程序:原理就是在java程序中嵌入 html语言
在Servlet中最大的问题是,HTML输出和java代码混在一起,如果网页布局要调整,Java源代码就需要随之进行调整,对于开发人员来说就是噩梦。
2,jsp
JSP本质是提供一个HTML模板,也就是在网页中预留以后填充的空,后续将Java程序运行生成的数据对HTML进行填空就可以了。如果网页布局需要调整!JAVA源代码不需要很大的调整
不过最终JSP还需要先转换为Servlet的源代码,java文件(Tomcat中使用asper转换),只不过这个转换过程无需人工完成是通过工具自动实现的然后再编译成.class文件,最后才可以在JVM中运行。
优点:架构简单,比较适合小型项目开发
缺点:JSP职责不单一,职责过重,不便于维护
3,jdk
包含下面:
jvm(java 的虚拟机)
jre 是库 提供一些第三方功能·
jar 打包工具
javac 编译
4,JVM 的各种版本
参考链接:
https://en.wikipedia.org/wiki/List_of_Java_virtual_machines
https://en.wikipedia.org/wiki/Comparison_of_Java_virtual_machines
4.1 OpenJDK
默认安装了
4.2 Oracle JDK
相对来说,Oracle jDK具有更好的响应能力和JVM性能,更加稳定。
5,安装oracle官方 JDK
5.1官方下载链接
#注意需要注册登录后,才能下载JDK
https://www.oracle.com/java/technologies/javase/javase-jdk8-downloads.html
5.2 Oracle JDK 的 rpm安装
命令集合:
[root@node2 data]#yum install jdk-8u291-linux-x64.rpm -y [root@node2 data]#yum history info 6 安装 jdk1.8-2000:1.8.0_291-fcs.x86_64 @/jdk-8u291-linux-x64 [root@node2 data]#rpm -ql jdk1.8-2000:1.8.0_291-fcs #查看文件列表 [root@node2 data]#find / -name javac /usr/java/jdk1.8.0_291-amd64/bin/javac [root@centos7 ~]#vim /etc/profile/jdk.sh [root@centos7 ~]#cat /etc/profile.d/jdk.sh export JAVA_HOME=/usr/java/default export PATH=$JAVA_HOME/bin:$PATH #以下两项非必须项 export JRE_HOME=$JAVA_HOME/jre export CLASSPATH=$JAVA_HOME/lib/:$JRE_HOME/lib/
步骤1
步骤2 找到自己装的
步骤3 如何调整环境变量 即用我们自己装的
写到开机自启文件里面
这里的 default 是什么意思 yum安装的,自动做软连接 叫default 指向真实文件
步骤4 刷新环境变量
注意:懒惰模式匹配,匹配到 第一个 不往下匹配了 写脚本时把新定义的路径放前面
运行脚本用 . 或者source 会改变当前环境变量 bash不会改变当前环境变量
5.3 Oracle JDK的二进制文件安装
步骤1 二进制包一般是别人给你的 拿过来解压就可以了
步骤2 去到解压的目录 做软连接 方便后面写
步骤3 写开机自启文件
注意 路径正确
路径匹配 懒惰模式
如果环境变量还没变 就exit 退出重进
三, tomcat 基础功能
(一)tomcat 简介
Tomcat服务器是一个免费的开放源代码的Web 应用服务器,属于轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试JSP 程序的首选。对于一个初学者来说,可以这样认为,当在一台机器上配置好Apache 服务器,可利用它响应HTML(标准通用标记语言下的一个应用)页面的访问请求。际上Tomcat是Apache 服务器的扩展,但运行时它是独立运行的,所以当你运行tomcat 时,它实际上作为一个与Apache 独立的进程单独运行的诀窍是,当配置正确时,Apache 为HTML页面服务,而Tomcat 实际上运行JSP 页面和Servlet。另外,Tomcat和IIS等Web服务器一样,具有处理HTML页面的功能,另外它还是一个Servlet和JSP容器,独立的Servlet容器是Tomcat的默认模式。不过,Tomcat处理静态HTML的能力不如Apache服务器,善于处理动态资源。
(二)安装 tomcat
1, yum 安装
CentOS 7 的yum源的tomcat版本老旧,而CentOS8 yum源里无tomcat
不推荐
2,二进制安装 Tomcat
目前比较主流的Tomcat是8.5.X版本,推荐从Apache官网下载二进制tomcat包进行安装,此为生产常用方式
2.1 安装tomcat
步骤1 解压
步骤2 方面管理 把tomcat 移到/usr/local/ 并改名
2.2 启动 tomcat
2.3 关闭 tomcat
3, 把 tomcat 交给system 管理
3.1 新建tomcat用户
3.2 修改属主和属组
看到 tomcat 的属主数组 是root 需要改成tomcat
注意 -R 全部改
3.3 手写 system 文件
[Unit] Description=Tomcat After=syslog.target network.target [Service] Type=forking ExecStart=/usr/local/tomcat/bin/startup.sh ExecStop=/usr/local/tomcat/bin/shutdown.sh RestartSec=3 PrivateTmp=true User=tomcat Group=tomcat [Install] WantedBy=multi-user.targe
3.4 刷新配置文件 启动!
注意! tomcat 在java 虚拟机上 所以进程里过滤不到
四 tomcat配置文件介绍
(一)安装目录下 文件介绍
1,tomcat 文件夹下
目录名字 | 功能 |
bin | 存放启动和关闭 Tomcat 的脚本文件,比较常用的是 catalina.sh、startup.sh、shutdown.sh 三个文件 |
conf | 存放 Tomcat 服务器的各种配置文件,比较常用的是 server.xml、context.xml、tomcat-users.xml、web.xml 四个文件。 |
lib | 存放 Tomcat 服务器的 jar 包,一般不作任何改动,除非连接第三方服务,比如 redis,那就需要添加相对应的 jar 包 |
logs | 存放 Tomcat 日志 catalina.out |
temp | 存放 Tomcat 运行时产生的文件 |
webapps | 存放项目资源的目录 |
work | Tomcat 工作目录,一般清除 Tomcat 缓存的时候会使用到(升级版本时注意要删除里面的缓存) |
生产环境 work 相关:升级版本时注意要删除里面的缓存
预热: 我先生成缓存 减少客户等待时间
2,conf子目录
文件名 | 说明 |
server.xml | 主配置文件 全局生效 |
web.xml | 每个webapp只有“部署"后才能被访问,它的部署方式通常由web.xml进行定义,其存放位置为WEB-INF/目录中;此文件为所有的webapps提供默认部署相关的配置,每个web应用也可以使用专用配置文件,来覆盖全局文件 |
context.xml | 用于定义所有web应用均需加载的Context配置,此文件为所有的webapps提供默认配置,每个web应用也可以使用自已专用的配置,它通常由专用的配置文件context.xml来定义,其存放位置为WEB-INF/目录中,覆盖全局的文件 |
tomcat-users.xml | 用户认证的账号和密码文件 |
catalina.policy | 当使用security选项启动omcat时,用于为tomcat设置安全策略 |
catalina.properties | Tomcat环境变量的配置,用于设定类加载器路径,以及一些与JVM调优相关参数 |
logging.properties | Tomcat日志系统相关的配置,可以修改日志级别和日志路径等 |
注意配置文件对于大小写敏感 |
3,logs 子目录
catalina.2020-07-14.log | #tomcat服务日志 |
catalina.out | #tomcat服务日志 |
host-manager.2020-07-14.log | #host manager管理日志 |
localhost.2020-07-14.log | #默认主机日志 |
localhost_access_log.2020-07-14.txt | #默认主机访问日志 |
manager.2020-07-14.log | #manager 管理日志 |
五 ,组件
(一)组件分层和分类
1,顶级组件
Server,代表整个Tomcat容器,一台主机可以启动多tomcat 实例 ,需要确保端口不要产生冲突
2,服务类组件
Service,实现组织Engine和Connector,建立两者之间关联关系, service 里面只能包含一个Engine
3,连接器组件
Connector,有HTTP(默认端口8080/tcp)、HTTPS(默认端口8443/tcp)、AJP(默认端口8009/tcp)协议的连接器,AJP(Apache Jserv protocol)是一种基于TCP的二进制通讯协议。
4,容器类
Engine、Host(虚拟主机)、Context(上下文件,解决路径映射)都是容器类组件,可以嵌入其它组件,内部配置如何运行应用程序。
5,内嵌类
可以内嵌到其他组件内,valve、logger、realm、loader、manager等。以logger举例,在不同容器组件内分别定义。
6,集群类组件
listener、cluster
(二)架构图
1,画图表示
2,文字表示
首先开启 tomcat进程, 会有 server 产生 ,
然后产生 一个 service管理组件 管理 所有其他组件的
用户发送请求httpd 请求过来
connector 连接器(默认监听)接收到此请求, 会转交给 engine (引擎)
engine (引擎) 会处理请求, 遍历 host (虚拟主机) 会交给 客户访问的host, 如果找不到交给默认的 host 会根据 上下文 context (上下文) 映射关系 去找相对应的文件
找到文件后, 交给 JSP 生成代码, 再交给 servlet 生成 html
原路返回 反馈给用户
3, 表格表示
名称 | 说明 |
server | 服务器,Tomcat运行的进程实例,一个Server中可以有多个service,但通常就一个 |
service | 服务,用来组织Engine(引擎)和Connector(连接器,端口)的对应关系,一个service中只有一个Engine |
connector | 连接器,负责客户端的HTTP、HTTPS、AJP等协议连接。一个Connector只属于某一个Engine |
Engine | 即引擎,用来响应并处理用户请求。一个Engine上可以绑定多个Connector |
Host | 即虚拟主机,可以实现多虚拟主机,例如使用不同的主机头区分 |
Context | 应用的上下文,配置特定url路径映射和目录的映射关系: url => directory |
(三)核心组件
1,Tomcat启动一个Server进程。可以启动多个Server,即tomcat的多实例, 但一般只启动一个
2,创建一个Service提供服务。可以创建多个Service,但一般也只创建一个
2.1每个Service中,是Engine和其连接器Connector的关联配置
3,可以为这个Service提供多个连接器Connector,这些Connector使用了不同的协议,绑定了不同 的端口。其作用就是处理来自客户端的不同的连接请求或响应
4,Service 内部还定义了Engine,引擎才是真正的处理请求的入口,其内部定义多个虚拟主机Host
4.1Engine对请求头做了分析,将请求发送给相应的虚拟主机
4.2如果没有匹配,数据就发往Engine上的defaultHost缺省虚拟主机
4.3Engine上的缺省虚拟主机可以修改
5, Host 定义虚拟主机,虚拟主机有name名称,通过名称匹配
6, Context 定义应用程序单独的路径映射和配置
7,引擎:一般而言,引擎是一个程序或一套系统的支持部分。常见的程序引擎有游戏引擎、搜索引擎、杀毒引擎等
(四)tomcat 处理请求过程
1, 文字解释
- 假设来自客户的请求为: http://localhost:8080/test/index.jsp 浏览器端的请求被发送到服务端端口8080,Tomcat进程监听在此端口上。通过侦听的HTTP/1.1Connector获得此请求。
- Connector把该请求交给它所在的Service的Engine来处理,并等待Engine的响应
- Engine获得请求192.168.91.100:8080/test/index.jsp,遍历它所有虚拟主机Host
- Engine匹配到名为localhost的Host。如果匹配不到,就把请求交给该Engine中的defaultHost处理. localhost Host获得请求/test/index.jsp,匹配它所拥有的所有Context
- Host匹配到路径为/test的Context
- path=/test的Context获得请求index.jsp,在它的mapping table中寻找对应的servlet
- Context匹配到URLPATTERN为*.jsp的Sservlet,对应于]spServlet类构造HtpServletRequest对象和HttpServletResponse对象,作为参数调用)spSer let的doGet或doPost方法。
- Context把执行完了之后的HttpServletResponse对象返回给Host
- Host把HttpServletResponse对象返回给Engine
- Engine把HttpServletResponse对象返回给Connector
- Connector把HttpServletResponse对象返回给浏览器端
2,架构图
通常意义上的 Web 服务器接受请求后,只是单纯地响应静态资源,如 HTML 文件,图片 文件等,不能在后端进行一定的处理操作。 T
omcat 是 Apache 下的一个子项目,它具备 Web 服务器的所有功能,不仅可以监听接受请求并响应静态资源,而且可以在后端运行特定规范 的 Java 代码 Servlet,同时将执行的结果以 HTML 代码的形式反回客户端。
3, Tomcat核心的组件
Tomcat 由一系列的组件构成,其中核心的组件有三个:
3.1Web 容器
完成 Web 服务器的功能。(https请求)
负责底层的HTTP协议
3.2 Servlet 容器
名字为 catalina,用于处理 Servlet 代码。(具体的任务)
由catalina脚本帮忙处理的servlet代码,主要处理后端逻辑业务 catalina实际处理的是Servlet代码,而Servlet代码是由Java编写的
3.3 JSP 容器
用于将 JSP 动态网页翻译成 Servlet 代码。
JSP:在正常的html标签中嵌入一些java代码 这些JSP最终会被翻译成Servlet代码被执行 主要提供提供前端页面展示<% %>
小结:tomcat就是一个容器,在这个容器中有三大核心组件: WEB、Servlet 和JSP,所以Tomcat是极其轻量级别的,核心组件都是支持基本运行的组件 TIPS:
多实例:
多实例就是在一台服务器上同时开启多个不同的服务端口,同时运行多个服务进程,这些服务进程通过不同的socket监听不同的服务端口来提供服务
六 ,磁盘文件 和访问的url对应关系
(一) tomcat 和httpd 对比
如图所示
test 和root 是同级的 项目
(二)实机演示
即 在tomcat 访问 ip地址 默认去 webapps/ROOT/ 找
访问 ip地址/test/ 去webapps/ 下 和ROOT 同级的项目 test目录下找
七, 主页文件的优先级
(一)配置文件规定
vim /usr/local/tomcat/conf/web.xml
#此文件末尾定义了优先级,可以在站点的目录下配置
优先级顺序为 index.html index.htm index.jsp
(二)修改 test 项目的 文件格式优先级
1, 找到 ROOT 项目的子配置文件
2, 复制过来 给test 项目 做模板
3, 把 查看属主数组 改成tomcat
4, 编辑 test 项目的子配置文件 依葫芦画瓢 把文件优先级顺序调整一下
5, 查看主页面
6, 重启 tomcat 并查看 修改成功
八 ,打包jar包实际操作
(一)常见压缩包格式
- .war:WebApp打包,类zip格式文件,通常包括一个应用的所有资源,比如jsp,html,配置文件等
- .jar:EJB类文件的打包压缩类zip格式文件,,包括很多的class文件, 网景公司发明
- .rar:资源适配器类打包文件,目前已不常用
- .ear:企业级WebApp打包,目前已不常用
(二) 配置文件
传统应用开发测试后,通常打包为war格式,这种文件部署到Tomcat的webapps目录下,并默认会自动
#conf/server.xml中文件配置 <Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true">
unpackWARs 自动解压
autoDeploy 自动部署
(三)示例
1,假设我有新上市的一款软件app1 里面会有 html 和jsp 两个文件
2,压缩app1 为 war 格式 压缩包
3,把 war 包 移到主站点
4, 查看 自动解压 自动部署