Tomcat基础《一》----WEB技术

1.1WEB技术

操作系统有进程子系统,使用多进程就可以充分利用硬件资源。进程中可以多个线程,每一个线程可以
被CPU调度执行,这样就可以让程序并行的执行。这样一台主机就可以作为一个服务器为多个客户端提
供计算服务。

客户端和服务端往往处在不同的物理主机上,它们分属不同的进程,这些进程间需要通信。跨主机的进
程间通信需要使用网络编程。最常见的网络编程接口是Socket。

Socket称为套接字,本意是插座。也就是说网络通讯需要两端,如果一端被动的接收另一端请求以提供
计算和数据的称为服务器端,另一端往往只是发起计算或数据的请求,称为客户端。

这种编程模式称为Client/Server编程模式,简称C/S编程。开发的程序也称为C/S程序。CS编程往往使
用传输层协议(TCP/UDP),较为底层。

到1980年TCP/IP协议研发成功。1984年,美国国防部将ARPA在内的所有军事网络全部使用TCP/IP协
议。同年域名系统和DNS服务器诞生。IBM、AT&T、DEC等公司陆续也加入到TCP/IP阵营。1989年,
加州大学伯克利分校在BSD中加入TCP/IP协议,产生了广泛的影响。微软从Windows 95开始支持。

1990年,HTML、基于TCP协议的HTTP协议、浏览器诞生。在应用层使用文本跨网络在不同进程间传输
数据,最后在浏览器中将服务器端返回的HTML渲染出来。由此,诞生了网页开发。

网页是存储在WEB服务器端的文本文件,浏览器发起HTTP请求后,到达WEB服务程序后,服务程序根
据URL读取对应的HTML文件,并封装成HTTP响应报文返回给浏览器端。

起初网页开发主要指的是HTML、CSS等文件制作,目的就是显示文字或图片,通过超级链接跳转到另
一个HTML并显示其内容。
后来,网景公司意识到让网页动起来很重要,傍着SUN的Java的名气发布了JavaScript语言,可以在浏
览器中使用JS引擎执行的脚本语言,可以让网页元素动态变化,网页动起来了。

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

1.1.1HTML

HTML(HyperText Markup Language)超文本标记语言,它不同于编程语言。
超文本就是超出纯文本的范畴,例如描述文本的颜色、大小、字体等信息,或使用图片、音频、视频等非文本内容。

HTML由一个个标签组成,这些标签各司其职。有的提供网页信息,有的负责图片,有的负责网页布
局。

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>首页</title>
</head>
<body>
<h1>马哥教育欢迎您</h1>
</body>
</html>

超文本需要显示,就得有软件能够呈现超文本定义的排版格式,例如显示图片、表格,显示字体的大
小、颜色,这个软件就是浏览器。

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

如今,HTML依然是互联网中展示数据最主要的方式,广泛的应用在PC端和移动端。

1.1.2CSS(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.1.3浏览器

1980年代,Tim Berners-Lee为CERN(欧洲核子研究中心,当时欧洲最大的互联网节点)设计基于超
文本思想的ENQUIRE项目,以促进科研人员之间的信息共享和更新。1989年3月他编写了
《Information Management: A Proposal》一文,并构建基于Internet的Hypertext系统,并在CERN
开发了World Wide Web项目,打造了世界上第一个网站,于1991年8月6日正式上线。2019年是WWW
的第三十年。

Tim Berners-Lee于1990年发明了第一个浏览器,还发明了HTTP协议。1994年MIT他创建了W3C。
W3C万维网联盟,负责万维网持续发展。他提出W3C的标准应该基于无专利权、无版税。
Marc Andreessen于1993年发明了Mosaic浏览器。并看到了这个技术的前景,不久后他成立自己的公司——网景Netscape。1994发布了Netscape
Navigator浏览器,席卷全球。1995年微软发布IE,开启第一次浏览器大战,最终后来居上。
1999年网景被AOL收购,收购后不久,Netscape公开了浏览器代码,并创建了Mozilla组织。Mozilla组
织使用Gecko引擎重写浏览器。
Mozilla组织使用Gecko引擎发布了几款浏览器,最终于2004年更名为Firefox浏览器。第二次浏览器大
战开始了。
2003年5月,网景被解散。
AOL于2007年12月宣布停止支持Netscape浏览器。
Apple的Safari于2003发布第一个测试版。
2008年Google的Chrome浏览器带着 V8 引擎横空出世。
2008年IE占据浏览器市场份额的75%,FF占近20%,如今2019 年Chrome占据市场份额近70%。
浏览器内两大核心:渲染引擎和JS引擎

1.1.4JavaScript

Javascript 简称JS,是一种动态的弱类型脚本解释性语言,和HTML、CSS并称三大WEB核心技术,得到
了几乎主流浏览器支持。
1994年,网景Netscape公司成立并发布了Netscape Navigator浏览器,占据了很大的市场份额,网景
意识到WEB需要动态,需要一种技术来实现。
1995年9月网景浏览器2发布测试版本发布了LiveScript,随即在12月的测试版就更名为JavaScript。同
时期,微软推出IE并支持JScript、VBScript,与之抗衡。
1997年,网景、微软、SUN、Borland公司和其他组织在ECMA确定了ECMAScript语言标准。JS就成为
ECMAScript标准的实现之一。
2008年后随着chrome浏览器的V8引擎发布。
V8 JS引擎不是解释执行,而是本地编译,在V8引擎做了很多优化,JS程序在其上运行堪比本地二进制程序。
V8引擎使用C++开发,可以嵌入到任何C++程序中。基于它,2009年Nodejs诞生,提供了大量的库供程
序员使用。从此,便可以在服务器端真正大规模使用JavaScript编程了。也就是说JavaScript也真正称为
了服务器端编程语言了。
在这里插入图片描述
v8引擎详解

1.1.5静态网页技术

早期的HTML设计之初,只能HTML,里面可以显示文字、图片,使用CSS来控制颜色、字体大小等。再
后来引入了JavaScript就可以是网页可以人机交互、可以让元素动起来。但这都不是内容的动态变化。

1.1.6动态网页技术

网页的内容是后端根据用户从浏览器端提交的请求不同,通过后台的程序将内容临时拼凑好,生成
HTML,返回到浏览器端,通过浏览器端渲染呈现。常见的有ASP和DotNet、JSP、PHP、Nodejs等。
动态是即时生成的响应文件页面

2.1开发语言

语言:人与人交流的沟通表达方式
计算机语言:人与计算机之间交互沟通的语言

2.1.1语言分类

面向机器语言
机器指令或对应的助记符,与自然语言差异太大
汇编语言

面向过程语言
做一件事情,排出个步骤,第一步干什么,第二步干什么,如果出现情况A,做什么处理,如
果出现了情况B,做什么处理
问题规模小,可以步骤化,按部就班处理
C语言

面向对象语言
一种认识世界、分析世界的方法论。将万事万物抽象为各种对象
类是抽象的概念,是万事万物的抽象,是一类事物的共同特征的集合
对象是类的具象,是一个实体
问题规模大,复杂系统
按照与自然语言的差异分类

低级语言
机器语言、汇编语言都是面向机器的语言,都是低级语言。不同机器是不能通用的,不同的
机器需要不同的机器指令或者汇编程序

高级语言
接近自然语言和数学语言的计算机语言

2.2.2常见语言

C语言
面向过程编程,只有函数
操作系统编程、单片机编程等领域
Unix之父Dennis Ritchie基于B语言创建

C++语言
底层高性能开发
面向对象,学习难度极大,目前标准发展有点乱

Java
WEB开发领域第一,延伸领域极多,库丰富
大数据领域生态完整

Python
入门门槛低,非专业程序员容易接受,他们有丰富的专业知识,但计算机专业知识不够
Python简洁的语法,不需要让他们关注背后的细节,可以让他们较容易的掌握并开始编程
运维开发使用最广泛语言
数据科学、AI

Javascript
网景公司发明的动态脚本语言,前端开发第一语言
JavaScript才是目前 前后端通吃的全栈语言
前端执行的JS代码,需要从服务器端发送到浏览器端,在浏览器端使用JS引擎执行

Go
B语言之父、Unix之父Ken Thompson亲自参与设计
静态编译型语言,但结合了动态解释性语言的特点,例如GC
充分利用多核,适合高并发场景
云生态最重要的语言

3.1WEB架构

后端资源分类:

1.静态资源
图片:一旦创建好,图片文件不再改变。图片数目多,占用磁盘空间多,一般使用单独的图片服务器
HTML、CSS、JavaScript:这些文本是文本的,前端工程师可以修改这些文件,但修改次数较少,一段时间都不变

2.动态资源
内容由后台程序动态生成,比如查询数据库后,将查询结果生成为HTML
PC端或移动端浏览器访问
从静态服务器请求HTML、CSS、JS等文件发送到浏览器端,浏览器端接收后渲染在浏览器上,这些文件
都是文本,可压缩后传输
从图片服务器请求图片资源显示
从业务服务器访问动态内容,动态内容是请求后有后台服务访问数据库后得到的,最终返回到浏览器端
在这里插入图片描述
WEB App访问
内置了HTML和JS文件,不需要从静态WEB服务器下载JS或HTML。为的就是减少文件的发送,现代前端
开发使用的JS文件太多或太大了
有必要就从图片服务器请求图片,从业务服务器请求动态数据
客户需求多样,更多的内容还是需要由业务服务器提供,业务服务器往往都是由一组服务器组成。

后台应用架构
单体架构
JSP、Servlet
不管项目多么大,都打包成一个jar、war部署
服务器有开源的tomcat、jetty。商用的有Jboss、weblogic、websphere、glassfish商用的

Dubbo
分布式服务框架
将单体程序分解成多个功能服务模块,模块间使用Dubbo框架提供的高性能RPC通信
阿里开源贡献给了ASF,目前已经是Apache的顶级项目
内部协调使用Zookeeper,实现服务注册、服务发现。有服务治理

Spring cloud 微服务
将单体应用拆分为粒度更小的单一功能服务

RPC通信
需要更高的运维水平,服务太多了需要服务治理
不同的应用架构,部署方式也有不同。

4.1Java

4.1.1历史

Java原指的是印度尼西亚的爪哇岛,人口众多,盛产咖啡、橡胶等。
Java语言最早是在1991年开始设计的,期初叫Oak项目,它初衷是跑在不同机顶盒设备中的。
1993网景公司成立。Oak项目组很快他们发现了浏览器和动态网页技术这个巨大的市场,转向WEB方向。并首先发布了可以让网页动起来的Applet技术(浏览器中嵌入运行Java字节码的技术)。
在1995年,一杯爪哇岛咖啡成就了Java这个名字。
Sun公司第一个Java公开版本1.0发布于1996年。口号是“一次编写,到处运行”(Write once,Runanywhere),跨平台运行。
1999年,SUN公司发布了第二代Java平台(Java2)。
2009年4月20日,Oracle甲骨文公司宣布将以每股9.50美元,总计74亿美金收购SUN(计算机系统)公司。2010年1月成功收购。
2010年,Java创始人之一的James Gosling离开了Oracle,去了Google。
2010年8月13日,Oracle在加利福尼亚地方法院起诉Google侵犯版权和专利权。Oracle声称Google侵犯了Java 37个API和部分专利。地方法院的陪审团认为未侵犯专利,且API无版权。
2016年5月26日,地方法院二审陪审团认定未侵犯版权,对37个JAVA API的重新实现受到合理使用的保护。
2017年Oracle上诉美国联邦巡回上诉法院,2018年3月27日,判决Oracle胜诉,Google应赔偿近90亿美金。
2019年1月Google想让美国最高法院撤销联邦法院裁决。谷歌表示裁决是“对软件业的毁灭性一击”。现任特朗普政府支持Oracle公司,但微软、Mozilla、红帽支持Google。目前案件已经受理,并将审理。
此案如果Oracle胜诉,将在美国形成判例,将深远广泛影响软件业。例如POSIX接口,是商用系统UNIX的兼容接口规范。

4.1.2组成

Java包含下面部分:

  1. 语言、语法规范。关键字if、for、class等等
  2. 编写源代码source code
  3. 依赖库,标准库、第三方库。底层代码太难使用且开发效率低,封装成现成的库
  4. JVM虚拟机。字节码运行在JVM之上

在这里插入图片描述
由于操作系统ABI(应用程序二进制接口)不一样,采用编译方式,需要为不同操作系统编译二进制程序。
1995年,Java发布Applet技术,Java程序在后台编译成字节码,发送到浏览器端,在浏览器中运行一个
Applet程序,这段程序是运行在另外一个JVM进程中的。这技术慢慢被淘汰。
但是这种在客户端运行Java代码的技术,会有很大的安全问题。1997年CGI技术发展起来,动态网页技
术开始向后端开发转移,在后端将动态内容组织好,拼成HTML发回到浏览器端。

4.1.3Java动态网页技术

servlet
本质就是一段Java程序。这段程序可以用很多种高级语言来编写。
通过URL路径来找到对应的文件。

import java.io.*;        #调用的包或者库
import javax.servlet.*;
import javax.servlet.http.*;
public class HelloWorld extends HttpServlet {   #定义一个类
private String message;
public void init() throws ServletException
{
message = "Hello World";
	}
public void doGet(HttpServletRequest request,  #doGET 用GET方式来调用函数 request
HttpServletResponse response)                  #response 响应报文
throws ServletException, IOException
	{
response.setContentType("text/html");   #设置一个网页类型  在响应报文头部
PrintWriter out = response.getWriter();  #往缓冲区写 往外写
out.println("<h1>" + message + "</h1>");  #写的内容  返回响应的内容
	} 
public void destroy()
	{
	}
}

在Servlet中最大的问题是,HTML输出和Java代码混在一起,如果网页布局要调整,就是个噩梦。

4.1.4jsp(Java Server Pages)

提供一个HTML,把它变成一个模板,也就是在网页中预留以后填充的空,以后就变成了填空了。
目的是美工和程序员并行工作

<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>jsp例子</title>
</head>
<body>
后面的内容是服务器端动态生成字符串,最后拼接在一起
<%
out.println("你的 IP 地址 " + request.getRemoteAddr());
%>       # <%内容%>需要填空的内容模板
</body>
</html>

JSP是基于Servlet实现,JSP将表现和逻辑分离,这样页面开发人员更好的注重页面表现力更好服务客户。
JSP 先转换为 Servlet的源代码.java文件(Tomcat中使用Jasper转换),然后再编译成.class文件,最后
就可以在JVM中运行了。

4.1.5JDK

JDK全称Java Development ToolKit,是Java语言开发工具包。JDK是整个JAVA的核心,包括了Java运行环境(Java Runtime Envirnment),一堆Java工具(javac/java/jdb等)和Java基础的类库(即Java API 包括rt.jar)。

最主流的JDK是Sun公司发布的JDK,除了Sun之外,还有很多公司和组织都开发了属于自己的JDK。IBM公司开发了属于自己的JDK,国内淘宝也开发了属于自己的JDK,各个组织开发自己的JDK都是为了在某些方面得到一些提高,以适应自己的需求。

JDK是用于构建在 Java 平台上发布的应用程序、applet 和组件的开发环境。它不提供具体的开发软件,它提供的是无论你用何种开发软件写Java程序都必须用到的类库和Java语言规范。
在这里插入图片描述

JRE:它是Java Runtime Environment缩写,指Java运行时环境, 包含 JVM + Java核心类库

JDK:它是Java Development Kit,即 Java 语言的软件开发工具包。
在这里插入图片描述

JDK也就是常说的J2SE,在1999年,正式发布了Java第二代平台,发布了三个版本:
J2SE:标准版,适用于桌面平台
J2EE:企业版,适用于企业级应用服务器开发
J2ME:微型版,适用于移动、无线、机顶盒等设备环境
2005年,Java的版本又更名为JavaSE、JavaEE、JavaME。
Servlet、Jsp都包含在JavaEE规范中。
JDK7、JDK8、JDK11是LTS(Long Term Suppot)
在这里插入图片描述
JDK协议是JRL(JavaResearch License)协议

4.1.6OpenJDK

OpenJDK是Sun公司采用GPL v2协议发布的JDK开源版本,于2009年正式发布。
在这里插入图片描述

https://openjdk.java.net/projects/jdk6/

OpenJDK 7是基于JDK7的beta版开发,但为了也将Java SE 6开源,从OpenJDK7的b20构建反向分支开
发,从中剥离了不符合Java SE 6规范的代码,发布OpenJDK 6。所以OpenJDK6和JDK6没什么关系。

OpenJDK使用GPL v2可以用于商业用途。

4.1.7安装JDK

在Centos中,可以使用yum安装openjdk。

# yum install java-1.8.0-openjdk
# java -version
openjdk version "1.8.0_212"
OpenJDK Runtime Environment (build 1.8.0_212-b04)
OpenJDK 64-Bit Server VM (build 25.212-b04, mixed mode)

本次使用Oracle官网的JDK 8的rpm安装

# yum install jdk-8u191-linux-x64.rpm
# java
# java -version
java version "1.8.0_191"
Java(TM) SE Runtime Environment (build 1.8.0_191-b12)
Java HotSpot(TM) 64-Bit Server VM (build 25.191-b12, mixed mode)

安装目录为/user/java下

4.1.8Java全局配置

# ll /usr/java
lrwxrwxrwx 1 root root 16 1月 13 01:22 default -> /usr/java/latest
drwxr-xr-x 8 root root 258 1月 13 01:22 jdk1.8.0_191-amd64
lrwxrwxrwx 1 root root 28 1月 13 01:22 latest -> /usr/java/jdk1.8.0_191-amd64
# vi /etc/profile.d/jdk.sh
export JAVA_HOME=/usr/java/default
export PATH=$JAVA_HOME/bin:$PATH
# . /etc/profile.d/jdk.sh
[root@centos7mini ~]#which java
/usr/java/default/bin/java
[root@centos7mini ~]#java -version
java version "1.8.0_191"
Java(TM) SE Runtime Environment (build 1.8.0_191-b12)
Java HotSpot(TM) 64-Bit Server VM (build 25.191-b12, mixed mode)
[root@centos7mini ~]#

注意安装的时候只找适合的版本,不要用最新版本
JDK安装完成之后就可以使用JAVA的基本操作了
之后就可以直接部署Tomcat

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值