java web基础

1.客户/服务器模型(C/S)

特点:非对等相互作用,即客户与服务器处于不平等的地位。

表现在:服务器用有客户所不具备的硬件和软件资源以及运算能力,服务器提供服务,客 户请求服务。

客户端与服务器的数量关系

  • 多个客户进程同时访问一个服务器进程(n:1)
  • 一个客户进程同时访问多个服务器提供的服务(1:n ).

客户端与服务器的位置关系

 

 

 

 

客户和服务器运行在同一台机器上———应用于网络应用程序开发测试。
客户和服务器运行在同一个局域网内的不同机器上——局域网文件共享、局域网打印机
客户和服务器运行于广域网不同网络内的机器上——最常见网咯应用程序。

客户与服务器的角色关系

应用程序作为纯粹的客户运行。——例如web浏览器
应用程序作为纯粹的服务器运行。——如具备基本功能的ftp服务器
应用程序同时具备客户和服务器两种角色。
有状态和无状态的服务器
判断依据:服务器或客户本地端是否保存状态信息。
无状态服务器举例:禁用cookie功能的web服务器
有状态服务器举例:网络游戏服务器

循环服务器和并发服务器
循环服务器:通过在单线程内设置循环控制实现对多个客户请求的逐一响应。
并发服务器:通过使请求处理(多线程)和I/O部分重叠达到高性能。

循环服务器和并发服务器的选择取决于对单个客户请求的处理时延。
客户较少、时延较长时考虑并发服务;客户量大、时延较短、请求频繁优先考虑循环服务。

2.浏览器/服务器模型(B/S)

用户通过www浏览器实现,一部分事务逻辑在前端(浏览器)实现,主要事务逻辑在服务端实现。通常以三层架构(表现层、事务逻辑层、数据处理层)部署实施。
B/S模型是特殊的客户/服务器模型,特殊之处在于,客户端软件特质浏览器,使用HTTP协议通信。用同用浏览器实现原来需要复杂专用软件才能实现的客户功能,节约了开发成本。

三层架构:表示层、逻辑层、数据层

客户端表示层。由Web浏览器组成,不存放任何应用程序。
应用服务器层(事务逻辑层)。由一台或多台服务器组成,具有良好的可扩展性。
数据中心层(数据处理层)。有数据库系统组成,用于存放业务数据。
联系
浏览器/服务器(B/S)模型是一种特殊的、具体化的客户/服务器(C/S)模型,其特殊之处是B/S模型的客户端软件特指浏览器,服务器一般是Web服务器,使用HTTP协议通信。其工作过程是C/S模型的具体化、实例化。
二者的本质思想均是基于计算机网络中,不同主机之间软硬件资源、运算能力和信息不均等,为实现资源信息共享,必然形成不对等的通信地位和交互方式。
两种结构对应的软件系统均为分布式网络应用程序系统。
模型组成
客户端程序+服务器程序,如微信客户端版、PC版的网络游戏
Web浏览器+服务器,如微信网页版、网页在线游戏。

3.C/S和B/S比较


工作过程
C/S模型:

1)打开一个通信通道,告知服务器进程所在主机将在某一端口上接受客户请求。
2)等待客户的请求到达该端口。
3)服务器接收到服务请求,处理该请求并发送应答。
4)返回至第2步,等待并处理另一个客户的请求。
5)关闭服务器。
B/S模型:

 

1)用户通过浏览器向Web服务器提出HTTP请求。 
2)Web服务器根据浏览器请求调出相应文件,对相应文件不做处理或加以解释执行后,将纯客户端HTML代码结果返回给浏览器。 
3)浏览器接收到Web服务器发回的页面内容(纯HTML代码),显示给用户。

 

c/s和b/s的优缺点
C/S模型:
优点:

结构简单。
支持分布式、并发环境。有效提高资源的利用率和共享程度。
服务器集中管理资源,有利于权限控制和系统安全。
可扩展性较好。客户和服务器均可单独地升级
传统C/S相比较B/S的局限:
1.不易部署(客户端逐一安装、挑平台)
2.维护困难(客户端需注意更新)

B/S
优点:分布式、易扩展、共享性强
相比较传统的C/S的优势:
1.易部署(各平台自带通用浏览器)
2.容易维护(服务器端改变网页内容可实现所有用户同步更新)
3.页面动态刷新,响应速度明显降低。

4.HTTP协议

定义:http是一个简单的请求-响应协议,它通常运行在TCP之上。它指定了客户端可能发送给服务器什么样的消息以及得到什么样的响应。请求和响应消息的头以ASCII码形式给出;而消息内容则具有一个类似MIME的格式。这个简单模型是早期Web成功的有功之臣,因为它使得开发和部署是那么的直截了当。

HTTP是应用层协议,同其他应用层协议一样,是为了实现某一类具体应用的协议,并由某一运行在用户空间的应用程序来实现其功能。HTTP是一种协议规范,这种规范记录在文档上,为真正通过HTTP协议进行通信的HTTP的实现程序。
HTTP协议是基于C/S架构进行通信的,而HTTP协议的服务器端实现程序有httpd、nginx等,其客户端的实现程序主要是Web浏览器,例如Firefox、InternetExplorer、Google chrome、Safari、Opera等,此外,客户端的命令行工具还有elink、curl等。Web服务是基于TCP的,因此为了能够随时响应客户端的请求,Web服务器需要监听在80/TCP端口。这客户端浏览器和Web服务器之间就可以通过HTTP协议进行通信了。
 
工作原理
 
HTTP是基于客户/服务器模式,且面向连接的。典型的HTTP事务处理有如下的过程:
(1)客户与服务器建立连接;
(2)客户向服务器提出请求;
(3)服务器接受请求,并根据请求返回相应的文件作为应答;
(4)客户与服务器关闭连接。
客户与服务器之间的HTTP连接是一种一次性连接,它限制每次连接只处理一个请求,当服务器返回本次请求的应答后便立即关闭连接,下次请求再重新建立连接。这种一次性连接主要考虑到WWW服务器面向的是Internet中成干上万个用户,且只能提供有限个连接,故服务器不会让一个连接处于等待状态,及时地释放连接可以大大提高服务器的执行效率。 [8] 
HTTP是一种无状态协议,即服务器不保留与客户交易时的任何状态。这就大大减轻了服务器记忆负担,从而保持较快的响应速度。HTTP是一种面向对象的协议。允许传送任意类型的数据对象。它通过数据类型和长度来标识所传送的数据内容和大小,并允许对数据进行压缩传送。当用户在一个HTML文档中定义了一个超文本链后,浏览器将通过TCP/IP协议与指定的服务器建立连接。 [8] 
从技术上讲是客户在一个特定的TCP端口(端口号一般为80)上打开一个套接字。如果服务器一直在这个周知的端口上倾听连接,则该连接便会建立起来。然后客户通过该连接发送一个包含请求方法的请求块。
HTTP规范定义了9种请求方法,每种请求方法规定了客户和服务器之间不同的信息交换方式,常用的请求方法是GET和POST。服务器将根据客户请求完成相应操作,并以应答块形式返回给客户,最后关闭连接。
 
运作方式
在WWW中,“客户”与“服务器”是一个相对的概念,只存在于一个特定的连接期间,即在某个连接中的客户在另一个连接中可能作为服务器。基于HTTP协议的客户/服务器模式的信息交换过程,它分四个过程:建立连接、发送请求信息、发送响应信息、关闭连接。 [7] 
HTTP协议是基于请求/响应范式的。一个客户机与服务器建立连接后,发送一个请求给服务器,请求方式的格式为,统一资源标识符、协议版本号,后边是MIME信息包括请求修饰符、客户机信息和可能的内容。服务器接到请求后,给予相应的响应信息,其格式为一个状态行包括信息的协议版本号、一个成功或错误的代码,后边是MIME信息包括服务器信息、实体信息和可能的内容。
图3 http运作方式的一种图3 http运作方式的一种
其实简单说就是任何服务器除了包括HTML文件以外,还有一个HTTP驻留程序,用于响应用户请求。你的浏览器是HTTP客户,向服务器发送请求,当浏览器中输入了一个开始文件或点击了一个超级链接时,浏览器就向服务器发送了HTTP请求,此请求被送往由IP地址指定的URL。驻留程序接收到请求,在进行必要的操作后回送所要求的文件。在这一过程中,在网络上发送和接收的数据已经被分成一个或多个数据包(packet),每个数据包包括:要传送的数据;控制信息,即告诉网络怎样处理数据包。TCP/IP决定了每个数据包的格式。如果事先不告诉你,你可能不会知道信息被分成用于传输和再重新组合起来的许多小块。
许多HTTP通讯是由一个用户代理初始化的并且包括一个申请在源服务器上资源的请求。最简单的情况可能是在用户代理(UA)和源服务器(O)之间通过一个单独的连接来完成。
当一个或多个中介出现在请求/响应链中时,情况就变得复杂一些。中介有三种:代理(Proxy)、网关(Gateway)和通道(Tunnel)。一个代理根据URI的绝对格式来接受请求,重写全部或部分消息,通过URI的标识把已格式化过的请求发送到服务器。网关是一个接收代理,作为一些其它服务器的上层,并且如果必须的话,可以把请求翻译给下层的服务器协议。一个通道作为不改变消息的两个连接之间的中继点。当通讯需要通过一个中介(例如:防火墙等)或者是中介不能识别消息的内容时,通道经常被使用。
 
报文格式
 
HTTP报文由从客户机到服务器的请求和从服务器到客户机的响应构成。请求报文格式如下:
请求行 - 通用信息头 - 请求头 - 实体头 - 报文主体
请求行以方法字段开始,后面分别是 URL 字段和 HTTP 协议版本字段,并以 CRLF 结尾。SP 是分隔符。除了在最后的 CRLF 序列中 CF 和 LF 是必需的之外,其他都可以不要。有关通用信息头,请求头和实体头方面的具体内容可以参照相关文件。
应答报文格式如下:
状态行 - 通用信息头 - 响应头 - 实体头 - 报文主体
状态码元由3位数字组成,表示请求是否被理解或被满足。原因分析是对原文的状态码作简短的描述,状态码用来支持自动操作,而原因分析用来供用户使用。客户机无需用来检查或显示语法。有关通用信息头,响应头和实体头方面的具体内容可以参照相关文件。

5.WEB服务器原理

一、Web服务器工作原理图解

 

 

首先我们暂时不考虑HTTP协议的各种请求方式,我们先跟着**(Web服务器工作原理总体描述01)这张图,将一次Web服务的工作流程过一遍,我们假设以浏览器作为客户端
(1) 用户做出了一个操作,可以是填写网址敲回车,可以是点击链接,可以是点击按键等,接着浏览器获取了该事件。
(2) 浏览器与对端服务程序建立TCP连接。
(3) 浏览器将用户的事件按照HTTP协议格式**打包成一个数据包,其实质就是在待发送缓冲区中的一段有着HTTP协议格式的字节流。
(4) 浏览器确认对端可写,并将该数据包推入Internet,该包经过网络最终递交到对端服务程序。
(5) 服务端程序拿到该数据包后,同样以HTTP协议格式解包,然后解析客户端的意图。
(6) 得知客户端意图后,进行分类处理,或是提供某种文件、或是处理数据。
(7) 将结果装入缓冲区,或是HTML文件、或是一张图片等。
(8) 按照HTTP协议格式将(7)中的数据打包
(9) 服务器确认对端可写,并将该数据包推入Internet,该包经过网络最终递交到客户端。
(10) 浏览器拿到包后,以HTTP协议格式解包,然后解析数据,假设是HTML文件。
(11) 浏览器将HTML文件展示在页面
以上为Web服务器工作基本原理。其实不难发现,这仅仅只是一个简单的网络通信。我们应该深信,作为一个服务器,其根本的工作无非有三个

接收数据 2. 发送数据 3. 数据处理
而Web服务器的本质就是 接收数据 ⇒ HTTP解析 ⇒ 逻辑处理 ⇒ HTTP封包 ⇒ 发送数据
高级的服务器无非就是将这三个部分更加细致的设计了。
二、Web服务器之提供静态文件工作原理图解
Web服务器最主要的功能是提供静态的文件。日常的上网浏览大多是网页浏览,少数时候才会有一些数据的提交操作。因此,我们结合上一张图示来重点讲解在GET请求下的Web服务器工作原理。

 

 

其他流程基本不变,着重在于红色与蓝色部分。
(1) 当用户点击一个网页链接或浏览器加载一些资源(css,jpg …)时产生。
(6) 服务程序解包后,确定其为GET请求,并且是对该服务器上的某一资源的请求。首先服务程序会去确认该路径是否存在,再确定该路径的文件是否可以获取。
(7-1) 如果请求的路径有误,或者该资源不能被用户获取,则返回错误提示页面。很多服务器的错误页面只有404,更专业的应该是将错误分类并返回对应的错误代码页面。
(7-2) 如果该路径合法且文件可以被获取,那么服务程序将根据该文件类型进行不同的装载过程,记录其类型作为(8)中HTTP协议中对应的返回类型,并加入响应头。

假设以点击一个页面链接为例,浏览器首先将HTML文件请求过来,再以同样的流程对HTML文件中包含的资源文件路径进行依次请求。

 

 


三、Web服务器之数据提交工作原理图解
仅仅只是网页的浏览并不能满足所有人的需求,客户端与服务器应当是有数据交互的。
即使单方面的资源请求任然是网络的主力军。
我们应该清楚的知道,数据提交对于用户来说有什么作用。
(1) 资源上传 (2) 登陆验证 (3) API接口调用 (4) 远程指令等
数据提交使得用户的操作性有了质的飞跃,它使得HTTP短连接获取静态文件的方式提升到了动态交互的层次上。该性质也催化出各式各样的编程语言、框架。例如PHP,JavaWeb。
如果你留意目前主流的那些大型服务器,你会发现再高级再牛逼的东西实际是也是最基础的东西建造的。那么我们还可以顺便学习一下最古老的动态技术CGI

 

 

其他流程基本不变,着重在于红色与蓝色部分。
(1) 用户提交数据,假设用户点击一个按键提交填好的信息。在(3)中将以POST格式写入,并填入提交至服务端的可执行程序的路径。
(6) 服务端将参数与该CGI绑定,复制进程,用管道传递参数和接收结果
(7) 子进程执行CGI,接收(6)父进程传来的参数,运算完成返回结果。
最后父进程将结果装入静态模板文件,放入缓冲区

四、动态技术
我们得明白,Web服务器是以短连接为主,并且获取的数据到达浏览器的那一刻一定是静态的不变的。那么所谓动态实际是指两种情况

服务端产生:
(1) 用户POST提交数据到某个程序,程序根据该数据作为参数运行,得出结果并装入静态的模板页面中,返回该静态页面。但对于用户来说,同一个页面,做了一个操作后数据不一样了。好了,这就是动态页面。(CGI原理)
(2) PHP的原理是,用户GET请求一个php后缀的文件,服务器先执行该php后缀文件中的PHP代码,将结果填入代码的位置,再返回。当然也可以提交数据参与运算再返回。
客户端产生:
(1) 用户GET请求一个JavaScript文件,服务端不做任何运算返回该静态文件。浏览器收到该JS文件,在本地执行并更新页面。
(2) 用户POST提交数据到服务端,服务端根据该提交的数据指令返回静态文件,浏览器收到后执行并更新。

6.java web 开发环境与搭建

下载IDEA

直接在IDEA下载页面选择对应的版本下载安装包或者压缩包即可(需要注意IDEA官网会自动识别你的操作系统,下载到的安装包为你的操作系统可用的安装包,示例中使用的是Windows系统,所以安装包为exe文件)
IDEA下载

也可以自己自行选择操作系统下载对应的安装包

 

安装注意事项

本文是以IDEA-2019.2-开源版在Windows系统作为示例。
安装时,如果一路Next,那么默认是不会在桌面创建快捷方式,可以在第三步的时候,按照下图示例操作
在这里插入图片描述

初始化设置IDEA

IDEA在初次运行时会让你选择是否导入设置,如下图所示
在这里插入图片描述
但是初次使用或者没有保存设置的大多要重新设置。

使用默认配置

如果想要偷懒可以选择直接关掉配置窗口或者点击跳过配置按钮,如下图所示。这样就会直接使用默认配置了。
在这里插入图片描述

配置IDEA

不过IDEA的默认配置会引入大量的插件,不建议大家直接使用,下面将会向大家怎么配置自己的IDEA。

 

 

选择UI主题,在IDEA中提供了两种UI主题:

 

 

在这里插入图片描述在这里插入图片描述

 

 

设置默认插件,这一步需要根据自己的情况选择禁止一些用不上的组件
在这里插入图片描述

 

配置构建工具,这里建议把自己不用的构建工具插件禁用
在这里插入图片描述
以我自己使用习惯,只会启用maven(默认是全启用),如下图所示

在这里插入图片描述

配置版本控制工具,我选择是只使用git和github,大家可以根据自己的使用习惯选择版本控制工具

在这里插入图片描述

      • 配置测试工具,根据需要选择开启

 

在这里插入图片描述

  • 配置Swing,如果不是开发Swing项目,建议关闭(默认开启),关闭状态如下图所示
    在这里插入图片描述
  • 配置Android,同Swing配置,非安卓开发者建议关闭


 

  • 配置其他工具,这个一般我不会进行修改
    在这里插入图片描述
  • 配置插件开发,非IDEA插件开发者建议关闭
    • 在这里插入图片描述
      配置好后的界面,如下图所示
      在这里插入图片描述
    • 配置功能插件,这里的插件都需要安装(自动会下载)
      在这里插入图片描述
      需要注意其实这里有个IDEA官方的教程插件,有兴趣的朋友可以试着安装使用
      在这里插入图片描述
      然后点击右下角的启动IDEA按钮就可以愉快地使用IDEA了
      在这里插入图片描述
    • vscode| vscode安装教程

    • 在这里插入图片描述

      如果需要修改安装路径,这里选择需要需要安装的目录既可
      在这里插入图片描述

      这里如果需要创建快捷方式到桌面就勾上既可.


      在这里插入图片描述
      在这里插入图片描述

      在这里插入图片描述

    • 在这里插入图片描述
      安装成功后的效果图如下:
      在这里插入图片描述

      • java web 开发环境与搭建完成

posted on 2020-05-13 17:34  尹三虎  阅读(133)  评论(0编辑  收藏  举报

导航