java web server

第一节 http协议
一、回顾
在这里插入图片描述

1、OSI体系结构分为7层:物理层、链路层、网路层、传输层、会话层、表示层、应用层。

2、TCP/IP的体系结构分为4层:网络接口层(物理层、链路层)、网际层(网络层IP)、传输层(UDP/TCP)、应用层(会话层、表示层、应用层)

3、原理体系结构:物理层、链路层、网络层、传输层、应用层(会话层+表示层+应用层)

OSI七层协议体系结构:优点:概念清楚,理论完整,缺点但是复杂而不实用

TCP/IP协议族四层,缺点:太简单,但被广泛使用,

结合上面两个的优缺点,就有了5层协议的原理体系结构,即简洁又能把概念描述清楚。

二、应用层

1、概念

位于计算机网络体系结构的最上层,前面四层做的所有事情就是为了他服务,他也是设计和建立计算机网络的最终目的,通俗的讲,就是我们开发的应用软件,就处于这一层,比如,QQ,浏览器访问网页,等等你看得到的应用软件都是在这一层,但是这些软件在运行的过程中,也需要依靠一些特定的协议才能完成相应的功能,比如浏览器通过网址访问网页,其中是如何做到的,这就是我们所要学习的东西。

2、应用层中的应用软件分两种。客户/服务器和P2P体系结构

客户/服务器(client/server)

这种类型,就是我们很熟悉的客户端,服务器模型,客户端请求服务器,服务器响应客户端这样的一种方式进行“交流”

P2P

也称为对等体系结构。P2P相当于每个人的电脑度可以当服务器,也可以当客户端,不单单限制于只能客户端访问服务器,你自己的计算机可以去访问别人的计算机上的内容,别的同样可以访问你计算机上的内容,这样达到一种共享的状态。

三、应用层协议的举例。

1、DNS协议

Domain Name System 域名系统。也可以叫做域名解析协议。在我们在浏览器访问网页的时候,通常度是用我们所熟悉的一连串有意义的英文字符标识,比如www.baidu.com、www.sohu.com等。 但是我们学了前面的知识,计算机并不是通过这些字符串去找到对应的计算机,而是通过32位的二进制,也就是我们的IP地址来找。所以就有了DNS协议。他的作用就是将域名解析成对应的IP地址。因为让我们人去记那些IP地址,很难记得住,所以就想办法让IP地址转变为了现在的域名,在进行访问的时候,只需要将域名解析为对应的IP地址就行了,这个域名也很有讲究,其中分为好多层域名,是独一无二的。这里不细讲这个,只要我们知道,域名通过DNS能找到对应的IP地址就行了

DNS协议是如何工作的呢?

1、通过域名访问网页

2、计算机会先将域名发送到一个解析域名的服务器上

2.1 在其服务器上有很多服务器,能解析各种各样的域名,比如有专门解析.org的,解析.com的,解析.net的。等等,最主要的有一个根域名服务器,

2.2 域名解析(在服务器上查找IP地址)的过程有两种算法,迭代查询,递归查询。一般是两种查询的结合

2.3 本机计算机找到其中一台解析域名的服务器(可能是.com),如果没有找到对应的IP地址,那么就会去找根域名服务器,根域名服务器知道所有的子服务器,所以他肯定知道该域名所对应的IP地址在那个子服务器中,所以告诉第一次查询的服务器要他去另一台服务器上找,找到了,就将其返回给计算机,以后在有另一台计算机也通过这个域名访问,那么第一台服务器会有原来的域名IP地址的缓存,就不用去找根服务器了。

3、找到了,就能找到我们要访问的服务器了。
        在这里插入图片描述

2、http协议

统一资源定位符URL。

URL:统一资源定位符,通过下面格式,可以看出,就是用来定位我们所需要资源在服务器上的位置。

格式:<协议>://<主机>:<端口>/<路径>

协议:http

主机:域名/IP地址,原理度一样,到头来还是会转换为IP地址,通过这个才能找到目标服务器

端口: 在传输层需要使用的,访问目的主机的哪个端口号。

路径:精准的定位我们所需要的资源位置、

平常会省略协议和端口号,因为这些度是默认的,在访问主页时,路径也会省略。比如www.baidu.com这个默认进入百度的主页 完整写法 http://www.baidu.com:80/index.htm

超文本传送协议HTTP。

作用:怎样向服务器请求文档、服务器怎么把文档传送给浏览器,通俗点讲,就是我们想服务器访问网页资源时,服务器如何把网页上的东西传给我们。

客户端向服务器:请求报文    服务器向客户端:响应报文

什么意思呢?在通过URL访问你服务器时,就会发送一个请求报文,告诉服务器需要哪些东西,服务器知道后,返回一个响应报文给客户端,其中就会带有一些网页信息。就是通过这个来达到传送网页资源的目的,现在来具体看看,请求报文和响应报文的格式。

格式度一样,内容不一样,格式都市

请求行            响应行

请求头部           响应体

请求数据           响应数据

请求报文格式
在这里插入图片描述

响应报文格式
              
在这里插入图片描述

通过访问www.solu.com来看看我们发送的请求报文和响应报文是什么样的

请求报文:

在这里插入图片描述

1、GET /http://www.sohu.com HTTP/1.1 请求行,只不过这里被分开了,请求的方式 URL 版本

2、Host:主机名 www.solu.com

3、User-Agent:使用什么代理服务器,这里就是FireFox,也就是火狐

4、Accept:能接收的数据类型有哪些

5、Accept-Language:表示用户希望优先想得到的版本,一次排列下去,先是中文,再是英文

6、Accept-Encoding:通知服务端可以发送的数据压缩格式

7、Cookie:浏览器端的一个技术,在服务器上记录用户信息,但是也会在浏览器中保存一份。

8、Connection:连接的方式,有两种,非持续连接和持续连接,非持续连接,一次请求/响应就对应一个TCP连接,接到了响应该连接就关闭,然后在发送请求就在建立TCP连接,持续连接就相反,这里使用的是持续连接

9、Upgrade-Insecure-Requests:该指令用于让浏览器自动升级请求从http到https,用于大量包含http资源的http网页直接升级到https而不会报错.简洁的来讲,就相当于在http和https之间起的一个过渡作用,这个可以放一放,不懂没关系。

以上2到9就是请求头部,由于一般请求报文度不会有请求数据的,所以在9后面就没有内容了,一般如果想要发送数据过去度会通过在域名后面加?然后将数据创送过去

响应报文
在这里插入图片描述

这其中就来简单看看响应行中的状态码把,响应体中内容太多,一下子讲解不清楚

状态码由三位数字组成,可以分为5大类共33种

1xx:表示通知信息的,比如请求收到了或正在进行处理

2xx:表示成功,也就是服务器接收到了你的请求,并成功处理了,一般最喜欢看到的就是200了

200:这次请求成功了。

3xx:表示重定向,服务器告诉浏览器要完成请求你必须采取进一步的行动,也就是去访问另一个网页,

4xx:表示客户的差错,比如请求中有错误的语法或不能完成

404错误:就是找不到资源,就是你的URL写的有错误,使定位不到正确的资源

5xx:服务器的差错,如服务器失效,或者内部出现异常不能完成你的请求

500错误:就是服务器写的代码中有问题。

还有很多中状态码,有兴趣的可以百度查一查。

第二节 web server
Web Server中文名称叫网页服务器或web服务器。WEB服务器也称为WWW(WORLD WIDE WEB)服务器,主要功能是提供网上信息浏览服务。

Web服务器可以解析(handles)HTTP协议。当Web服务器接收到一个HTTP请求(request),会返回一个HTTP响应(response),例如送回一个HTML页面。为了处理一个请求(request),Web服务器可以响应(response)一个静态页面或图片,进行页面跳转(redirect),或者把动态响应(dynamic response)的产生委托(delegate)给一些其它的程序例如CGI脚本,JSP(JavaServer Pages)脚本,servlets,ASP(Active Server Pages)脚本,服务器端(server-side)JavaScript,或者一些其它的服务器端(server-side)技术。无论它们的目的如何,这些服务器端(server-side)的程序通常产生一个HTML的响应(response)来让浏览器可以浏览。

2.1 servlet
Servlet(Server Applet)是Java Servlet的简称,称为小服务程序或服务连接器,用Java编写的服务器端程序,主要功能在于交互式地浏览和修改数据,生成动态Web内容。
狭义的Servlet是指Java语言实现的一个接口,广义的Servlet是指任何实现了这个Servlet接口的类,一般情况下,人们将Servlet理解为后者。Servlet运行于支持Java的应用服务器中。从原理上讲,Servlet可以响应任何类型的请求,但绝大多数情况下Servlet只用来扩展基于HTTP协议的Web服务器。
 Servlet是sun公司提供的一门用于开发动态web资源的技术。
  Sun公司在其API中提供了一个servlet接口,用户若想用发一个动态web资源(即开发一个Java程序向浏览器输出数据),需要完成以下2个步骤:
  1、编写一个Java类,实现servlet接口。
  2、把开发好的Java类部署到web服务器中。
  按照一种约定俗成的称呼习惯,通常我们也把实现了servlet接口的java程序,称之为Servlet
Servlet 架构
下图显示了 Servlet 在 Web 应用程序中的位置。

Servlet 架构
在这里插入图片描述

Servlet 的主要功能在于交互式地浏览和修改数据,生成动态 Web 内容。这个过程为:
客户端发送请求至服务器端;
服务器将请求信息发送至 Servlet;
Servlet 生成响应内容并将其传给服务器。响应内容动态生成,通常取决于客户端的请求;
服务器将响应返回给客户端。
servelet接收http请求,对请求转换后调用具体的业务应用接口处理,这个业务接口不是由servelet实现,而是用户自己实现,如restful架构中的REST接口(@GET、@POST等)。

2.2 Tomcat和Jetty
许多Web服务器软件都不能直接支持Servlet。为了支持Servlet,通常要单独开发程序,这种程序一般称为服务器小程序容器(Servlet Container),有时也叫做服务器小程序引擎(Servlet Engine)。它是Web服务器或应用程序服务器的一部分,它在Servlet的生命周期内包容和管理Servlet,是一个实时运行的外壳程序。运行时由Web服务器软件处理一般请求,并把Servlet调用传递给“容器”来处理。
Tomcat 是Web应用服务器,是一个Servlet/JSP容器. Tomcat 作为Servlet容器,负责处理客户请求,把请求传送给Servlet,并将Servlet的响应传送回给客户.
Jetty是类似于Tomcat的webserver/servlet容器,与Tomcat的重要区别如下:
相对Tomcat而言,Jetty更轻量;
jetty更灵活,体现在其可插拔性和可扩展性,更易于开发者对Jetty本身进行二次开发,定制一个适合自身需求的Web Server。相比之下,重量级的Tomcat原本便支持过多特性,要对其瘦身的成本远大于丰富Jetty的成本;
当支持大规模企业级应用时,Jetty也许便需要扩展,在这场景下Tomcat便是更优的。

Tomcat和Jetty只是一个平台,web服务的,是为servlet和jsp的运行提供一个运行环境,也帮助实现了servlet。

第三节 微服务架构
将一个服务拆分为多个子模块,一个模块对应一个微服务,即一个web server服务器。
目前构建微服务的技术比较多,如Dropwizard、spring boot2等
Dropwizard:
一个简洁的RESTful Web框架,所有服务通过REST接口方式提供,Dropwizard跨越了开发库与框架的界限,旨在为Web应用所需的功能提供高性能、可靠的实现。Dropwizard将这些功能抽象为可重用的开发库,因此应用程序可以保持精简与专注,从而大大减少产品面世的时间以及维护负担。它集成了:
Jetty HTTP库;
REST库;–Jersey RESTful 框架是开源的RESTful框架, 实现了JAX-RS (JSR 311 & JSR 339) 规范。它扩展了JAX-RS 参考实现, 提供了更多的特性和工具, 可以进一步地简化 RESTful service 和 client 开发。如:提供注解 @GET、 @POST、 @PUT 、@Path、 @QueryParam等
Jackson JSON库;–Java Json解析器。Jackson可以轻松的将Java对象转换成json对象和xml文档,同样也可以将json、xml转换成Java对象。
Metrics度量库;
Guava;
Logback 和 slf4j ;–日志管理工具
Hibernate Validator;
Apache HttpClient 和 Jersey ;
JDBI;–为Java关系数据库提供了最直接的方式交互。
Liquibase;
Freemarker 和 Mustache;
Joda Time。–完整强大的时间日期处理开发库。
dropwizard构造的一个web server对应一个微服务,各个微服务对外以一个服务的方式提示(即对外只暴露一个地址,基于网关实现)

spring相关不在做详细介绍

猜你喜欢

转载自blog.csdn.net/u014207606/article/details/83584831