Java web之web的概念和web的运作原理和web服务

write:2022-4-10

1. Web的概念,特点

1.1 Web的概念

Web是一种分布式应用架构,旨在共享分布在网络上的各个Web服务器中所有互相链接的信息。Web采用客户/服务器通信模式,客户与服务器之间用HTTP协议通信。Web使用超级文本技术(HTML)来链接网络上的信息。信息存放在服务器端,客户机通过浏览器(例如IE 或 Netscape)就可以查找网络中各个Web服务器上的信息。
在这里插入图片描述
基于HTTP通信协议的服务器称为Web服务器
Web服务器中存放的用HTML编写的各种信息称为Web文档
用来访问Web服务器上的文档资源的客户端为浏览器

1.2 World Wide Web的概念

WWW是指全球范围内的Web,它以Internet作为网络平台, Internet是来自世界各地的众多相互联接的计算机和其他设备的集合,而WWW则是Internet上的一种分布式应用架构。

1.3 Web的技术特征

  1. 信息的表示:用超级文本技术HTML(超级文本标记语言)来表达信息,以及建立信息与信息的链接。
  2. 信息的定位:用统一资源定位技术URL来实现网络上信息的精确定位。
    URL的格式如下:应用层协议://主机IP地址或域名/资源所在路径/文件名
  3. 信息额传输:用网络应用层协议HTTP来规范浏览器与Web服务器之间的通信过程。
  4. 示意图:
    在这里插入图片描述

1.4 Web的特点

  1. Web是一种超媒体系统
    超文本/超媒体/链接
  2. Web是图形化的和易于导航的
    只需从一个链接跳到另一个链接就可在各页各站点间进行浏览
  3. Web与平台无关
    从Windows、UNIX、Macintosh等都可以访问Web
  4. Web是分布式的
    物理上不一定在一个站点的信息在逻辑上一体化,从用户来看这些信息是一体的
  5. Web 是动态的和交互的
    信息的提供者可以经常的对站上的信息进行更新
    用户通过填写FORM可以向服务器提交请求,服务器可以根据用户的请求返回相应信息
  6. 浏览器作为各种系统通用的客户端软件,给用户提供了统一的图形化界面,减少用户在学习新软件方面所遇到的困难。任何浏览器均支持WWW所用的HTTP协议和HTML语言

1.5 Web带来的革命

发布信息,开展业务
提供了全球的链接
为商业竞争创造了全新的竞争领域
用户可以掌握一切,扩大了客源。(客户自助服务)
提供了一种更新、更好的方式来完成已有的服务
基于Web的信息交换改善了商业伙伴之间的合作,优化物流、简化书面工作、减少供应链开销
使用内部互联网(Intranet)来共享信息,优化内部流程,在竞争中争取主动

2. HTTP协议简介

2.1 HTTP协议在TCP/IP体系中的位置

Internet的基本协议是TCP/IP协议,然而在TCP/IP模型最上层的是应用层(Application layer),它包含所有高层的协议。高层协议有:文件传输协议FTP、电子邮件传输协议SMTP、域名系统服务DNS、网络新闻传输协议NNTP和HTTP协议等。
在这里插入图片描述

2.2 HTTP协议概念

HTTP协议(Hypertext Transfer Protocol,超文本传输协议)是用于从Web服务器传输超文本到本地浏览器的传送协议。
HTTP的第一个版本是HTTP/0.9,后来发展到了HTTP/1.0,现在最新的版本是HTTP/1.1。HTTP/1.1在 RFC 2616 中定义。关于HTTP/1.1的详细资料可以参考HTTP/1.1链接。补充:另外,新的HTTP2.0也在试点普及阶段,它采用了安全加密技术。

2.3 HTTP协议规定的运作方式

信息交换分四个过程,建立连接、发送请求信息、发送响应信息、关闭连接。
在这里插入图片描述

2.4 HTTP协议的特点

  1. HTTP协议是一种基于请求/响应模式的协议。客户端发送一个请求,服务器返回对该请求的响应。HTTP协议使用可靠的TCP连接,默认端口是80。
  2. 在HTTP中,客户端/服务器之间的通信总是由客户端通过建立连接和发送HTTP请求开始,服务器不会主动联系客户端或要求与客户端建立连接。(注意:一次ftp连接只可发送一个请求。意思是每一个HTTP请求对应一个单独的ftp连接。提示:这里提到的FTP连接是指以传输文件为目的的连接。FTP是File Transfer Protocol (文件传输协议)的英文简称,用于Internet.上的文件的双向传输。)在通信开始后,浏览器或服务器都可以随时中断连接,例如,在访问网页时你可以随时点击“停止”按钮中断当前的文档下载过程,关闭与Web服务器的连接。

2.5 HTTP请求和响应

HTTP协议不仅规定了浏览器与Web服务器的通信过程,而且对HTTP请求和响应的数据格式作了具体的规定。

2.5.1 HTTP请求的具体格式

由三个部分构成,分别是:
请求方式 URI 协议/版本
请求头(Request Header):可有若干行
请求正文:与请求头用空行隔开,也可以是任意格式的数据:图片,声音,视频,可执行程序等

eg:一个HTTP请求的例子:
在这里插入图片描述
解析如下:

  1. 请求的第一行是“方式 URI 协议/版本”:
    POST /hello.jsp HTTP/1.1
    (请求方式)(URI) (协议和协议的版本)
    根据HTTP标准,HTTP请求可以使用多种请求方式。例如,HTTP 1.1支持七种请求方式:GET、POST、HEAD、OPTIONS、PUT、DELETE和TRACE。在Internet应用中,最常用的请求方式是GET和POST。
    URI完整地指定了要访问的网络资源,通常只要给出相对于服务器的根目录的相对目录即可,因此总是以“/”开头。最后,协议版本声明了通信过程中使用的HTTP协议的版本。
  2. 请求头(Request Header):
    请求头包含许多有关客户端环境和请求正文的有用信息(给服务器端看的)。例如,请求头可以声明浏览器所用的语言,请求正文的长度等等。

Accept: image/gif, image/jpeg, /
Referer: http://localhost/login.htm
Accept-Language: en,zh-cn;q=0.5 //浏览器所用的语言
Content-Type: application/x-www-form-urlencoded //正文类型
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) //浏览器类型
Host: localhost //远程主机
Content-Length: 40 //正文长度
Connection: Keep-Alive
Cache-Control: no-cache

  1. 请求正文:
    请求头和请求正文之间是一个空行(只有CRLF(换行符,Carriage Return,Line Feed)符号的行),这个行非常重要,它表示请求头已经结束,接下来的是请求的正文。请求正文中可以包含客户提交的请求参数信息:

username=Tom&password=1234&submit=submit

在以上例子的HTTP请求中,请求的正文只有一行内容。当然,在实际应用中,HTTP请求正文可以包含更多的内容。

2.5.1 HTTP响应的具体格式

和HTTP请求相似,也由三个部分构成,分别是:
协议/版本 状态代码 描述
响应头(Response Header)
响应正文

eg:一个HTTP响应的例子:
HTTP/1.1 200 OK
Server: Apache-Coyote/1.1
Content-type: text/html; charset=GBK
Content-length: 102

helloapp

hello

解析如下:

  1. 协议/版本 状态代码 (对状态代码的)描述
    HTTP/1.1 200 OK
    状态码用于指示服务器端对客户端请求的处理情况,状态码是三位的整数,有以下情况:
    200 OK 客户端请求成功
    400 BadRequest 由于客户端请求有语法错误,不能被服务器所理解。
    404 NotFound 请求的资源不存在,例如,输入了错误的URL。
    405 Not Support 不支持的请求
    500 Internal Server Error 服务器发生不可预期的错误,导致无法完成客户端的请求。
  2. 响应头:
    响应头也和请求头一样包含许多有用的信息,例如服务器类型、日期时间、响应正文的类型和长度等。

Server: Apache-Coyote/1.1 //响应类型
Content-type: text/html; charset=GBK
Content-length: 102

3.响应正文:
响应正文就是服务器返回的具体数据,它是浏览器真正请求访问的信息,最常见的是HTML文档 。(也可以是任意格式的数据)

helloapp

hello

响应头和正文之间也必须用空行分隔。

3. 用Java Socket实现HTTP Server/Client

3.1 HTTP Server/Client通信原理

实际上,由于Web服务器与浏览器之间使用HTTP协议通信,因此Web服务器也可以叫做HTTP服务器,浏览器也可以成为HTTP客户程序
Socket:套接字,建立在TPC/IP协议基础之上,java通过Socket来进行网络通信
在这里插入图片描述

3.2 简单案例

源码:java web使用Socket通信简单案例源码免费
HTTPServer.class:

package server;
import java.io.*;
import java.net.*;

public class HTTPServer{
  public static void main(String args[]) {
    int port;
    ServerSocket serverSocket;
      
    try { 
       port = Integer.parseInt(args[0]);
     }catch (Exception e) {
       System.out.println("port = 8080 (默认)");
       port = 8080; //默认端口为8080
     }

     try{
       serverSocket = new ServerSocket(port); 
       System.out.println("服务器正在监听端口:" + serverSocket.getLocalPort());
        
       while(true) { //服务器在一个无限循环中不断接收来自客户的TCP连接请求
         try{
           //等待客户的TCP连接请求
           final Socket socket = serverSocket.accept(); 
           System.out.println("建立了与客户的一个新的TCP连接,该客户的地址为:"+
                socket.getInetAddress()+":" + socket.getPort());
          
           service(socket);  //响应客户请求
        }catch(Exception e){e.printStackTrace();} 
      } //#while
    }catch (Exception e) {e.printStackTrace();}
  }

  /** 响应客户的HTTP请求 */
  public static void service(Socket socket)throws Exception{
    
    /*读取HTTP请求信息*/
    InputStream socketIn=socket.getInputStream(); //获得输入流
    Thread.sleep(500);  //睡眠500毫秒,等待HTTP请求  
    int size=socketIn.available();
    byte[] requestBuffer=new byte[size];
    socketIn.read(requestBuffer);
    String request=new String(requestBuffer);
    System.out.println(request); //打印HTTP请求数据
     
    /*解析HTTP请求*/
    //获得HTTP请求的第一行
    String firstLineOfRequest=request.substring(0,request.indexOf("\r\n"));
    //解析HTTP请求的第一行 
    String[] parts=firstLineOfRequest.split(" "); 
    String uri=parts[1]; //获得HTTP请求中的uri
    
    /*决定HTTP响应正文的类型*/
    String contentType;
    if(uri.indexOf("html")!=-1 || uri.indexOf("htm")!=-1)
      contentType="text/html";
    else if(uri.indexOf("jpg")!=-1 || uri.indexOf("jpeg")!=-1)
      contentType="image/jpeg";
    else if(uri.indexOf("gif")!=-1) 
      contentType="image/gif";
    else
      contentType="application/octet-stream"; 
    
    
    /*创建HTTP响应结果 */
    //HTTP响应的第一行
    String responseFirstLine="HTTP/1.1 200 OK\r\n";
    //HTTP响应头
    String responseHeader="Content-Type:"+contentType+"\r\n\r\n";
    //获得读取响应正文数据的输入流
    InputStream in=HTTPServer.class.getResourceAsStream("root/"+uri);
    
    /*发送HTTP响应结果 */
    OutputStream socketOut=socket.getOutputStream(); //获得输出流
    //发送HTTP响应的第一行
    socketOut.write(responseFirstLine.getBytes());
    //发送HTTP响应的头
    socketOut.write(responseHeader.getBytes());
    //发送HTTP响应的正文
    int len=0;
    byte[] buffer=new byte[128];
    while((len=in.read(buffer))!=-1)
    socketOut.write(buffer,0,len);  
    
    Thread.sleep(1000);  //睡眠1秒,等待客户接收HTTP响应结果        
    socket.close(); //关闭TCP连接  
    
  }
}

HTTPClinet.class:

package client;
import java.net.*;
import java.io.*;
import java.util.*;

public class HTTPClient {
  public static void main(String args[]){
    //确定HTTP请求的uri
    String uri="index.htm";
    if(args.length !=0)uri=args[0]; 
    
    doGet("localhost",8080,uri); //按照GET请求方式访问HTTPServer 
  }
  
  /** 按照GET请求方式访问HTTPServer */
  public static void doGet(String host,int port,String uri){
    Socket socket=null;
    
    try{
      socket=new Socket(host,port); //与HTTPServer建立FTP连接
    }catch(Exception e){e.printStackTrace();}
  
    try{
      /*创建HTTP请求 */
      StringBuffer sb=new StringBuffer("GET "+uri+" HTTP/1.1\r\n");
      sb.append("Accept: */*\r\n");
      sb.append("Accept-Language: zh-cn\r\n");
      sb.append("Accept-Encoding: gzip, deflate\r\n");
      sb.append("User-Agent: HTTPClient\r\n");
      sb.append("Host: localhost:8080\r\n");
      sb.append("Connection: Keep-Alive\r\n\r\n");
    
      /*发送HTTP请求*/
      OutputStream socketOut=socket.getOutputStream(); //获得输出流  
      socketOut.write(sb.toString().getBytes());
    
      Thread.sleep(2000); //睡眠2秒,等待响应结果
    
      /*接收响应结果*/
      InputStream socketIn=socket.getInputStream(); //获得输入流
      int size=socketIn.available();
      byte[] buffer=new byte[size];
      socketIn.read(buffer);
      System.out.println(new String(buffer)); //打印响应结果
      
    }catch(Exception e){ 
      e.printStackTrace();
    }finally{
      try{
        socket.close();  
      }catch(Exception e){e.printStackTrace();}
    }
  } //#doGet()
}

3.3 运行案例

可以有以下四种运行方式:
在这里插入图片描述

3.3.1 HTTPClient客户程序访问HTTPServer程序

HTTPServer服务器:
在这里插入图片描述
HTTPClient客户端:
在这里插入图片描述

3.3.2 IE浏览器访问HTTPServer程序

运行HTTPServer:
在这里插入图片描述
在浏览器输入并运行:注意:浏览器会对响应结果进行解析,以图形界面的方式呈现出来
在这里插入图片描述

3.3.3 HTTPClient客户程序访问Tomcat服务器

Tomcat:此处可看做一个开源服务器,默认监听窗口:8080
在这里插入图片描述

3.3.4 IE浏览器访问Tomcat服务器

在这里插入图片描述

4. Web的演变

第一个阶段:发布静态HTML文档。(只有图片和信息)
第二个阶段:发布静态多媒体信息。
第三个阶段:提供浏览器端与用户的动态交互功能。
第四个阶段:提供服务器端与用户的动态交互功能。
第五个阶段:发布基于Web的应用程序,即Web应用。
第六个阶段:发布Web服务。
第七个阶段:推出Web2.0,它是全民共建的Web。(用户既是web信息的消费者,也是web信息的制造者)

4.1 Web技术的发展过程

在这里插入图片描述

4.2 Web应用的特点

基于Web的应用,简称为Web应用

  1. 以浏览器作为展示客户端界面的窗口。
  2. 客户端界面一律表现为网页形式,网页由HTML语言写成,具有交互功能。
  3. 能完成与桌面应用程序类似的功能。
  4. 使用浏览器-服务器架构,浏览器与服务器之间采用HTTP协议通信。
  5. Web应用通过Web服务器来发布。

4.3 Web应用如何工作

  1. 处理静态 Web 页
    静态页面是事先存放在服务器端的文件系统中的文档(即在自身资源文件系统中查找即可)
    在这里插入图片描述

  2. 处理动态 Web 页
    动态页面事先并不存在与文件系统中,动态页面是当服务器处理客户请求时动态执行特定程序代码产生的。
    在这里插入图片描述
    对于Java Web应用,被动态执行的程序代码位于Servlet中。
    在这里插入图片描述

  3. 访问数据库
    在这里插入图片描述

5. Web服务

5.1 Web服务发展的原动力

  1. 电子商务和企业应用集成的发展:
    从局部化发展到全球化
    从B2C(Bussiness-to-Customer)发展到B2B(Bussiness-to-Bussiness)
    从集中式发展到分布式
  2. 需要解决语言差异、平台差异、协议差异、数据差异所带来的高代价的系统集成

5.2 Web服务架构

简单地理解,Web服务可看作是被客户端远程调用的各种方法,这些方法能处理特定业务逻辑,或者进行复杂运算等等。
在这里插入图片描述
注意:Web服务的响应结果就不再是一个HTML页面。

5.3 Web服务采用SOAP协议通信

SOAP协议与HTTP协议都基于请求/响应模式;
SOAP请求:客户端要求访问特定的Web服务的请求,SOAP响应:服务器端返回的Web服务的响应结果
SOAP请求和SOAP响应都是基于XML格式的数据,都需要在网络上进行传输;
其实HTTP协议不仅仅能够传输HTML文档,还可以传输其他任意格式的数据,因此,可把SOAP请求数据和SOAP响应数据统国HTTP协议进行网络上的传输,所以SOAP协议可以建立在HTTP协议的基础之上;在这里插入图片描述
SOAP(Simple Object Access Protocol)协议
SOAP协议规定客户与服务器之间一律用XML语言进行通信。
SOAP协议规定了客户端向服务器端发送的Web服务请求的具体数据格式,以及服务器端向客户端发送的Web服务响应结果的具体数据格式。

eg:
假定服务器端有个Web服务(对应getTime()方法)能返回当前的系统时间,一个客户程序请求访问这个Web服务,以下是服务器端返回的Web服务响应结果:

<?xml version="1.0" encoding="UTF-8" ?>

<soapenv:Envelope xmlns:soapenv=“http://schemas.xmlsoap.org/soap/envelope/”
xmlns:xsd=“http://www.w3.org/2001/XMLSchema”
xmlns:xsi=“http://www.w3.org/2001/XMLSchema-instance”>
soapenv:Body //包含响应结果的主题内容

2008年01月26日 11:33

</soapenv:Body>
</soapenv:Envelope>

5.4 Web服务搭坐Web顺风车的基本原理

思想:把SOAP请求/SOAP响应包装为HTTP请求/HTTP响应,然后在网络上传输,即搭顺风车;
在这里插入图片描述

6. 练习题

  1. 问题:HTML与浏览器是什么关系?
    选项:
    (A) 浏览器是HTML的编辑器,可以用浏览器来编写HTML页面
    (B)浏览器是HTML的解析器,能够解析HTML文件,并图形化的展示网页
    ©浏览器是HTML的编译器和运行器,能够把HTML文件编译成可执行文件,然后执行它。
    答案:B

  2. 问题:以下哪些属于Web服务器端编程技术?
    选项:
    (A) ASP
    (B)ASP.NET
    ©Flash
    (D)JSP/Servlet
    (E)HTML
    (F)JavaScript
    (G)CGI
    (H)PHP
    答案:A,B,D,G,H

  3. 问题:B/S结构与C/S结构相比,有什么优点?
    选项:
    (A) B/S比C/S更安全 (B/S需要在互联网上传输数据,安全性更差)
    (B) B/S可以降低客户培训费用。 (因为B/S客户端是浏览器)
    ©B/S对客户机具有较低的要求。
    (D)B/S具有更快的响应速度。
    (E) B/S易于在异构平台上配置集成。
    (F)B/S比C/S更容易创建复杂的界面。
    答案:B,C,E
    注意:B/S结构:浏览器/服务器结构,web应用所采用的架构;C/S结构:客户端/服务器架构,传统的桌面应用程序采用的架构;
    (A) B/S比C/S更安全 (B/S需要在互联网上传输数据,安全性更差,C/S比B/S更安全)
    (B) B/S可以降低客户培训费用。 (B/S客户端是浏览器,对客户要求更低,对C/S开发的应用程序,每个应用程序都有不同的客户端界面)
    ©B/S对客户机具有较低的要求。
    (D)B/S具有更快的响应速度。 (B/C架构建立在互联网基础上,而互联网的数据传输速度通常没有保证,C/S具有更快的响应速度)
    (E) B/S易于在异构平台上配置集成。(B/S只要遵循HTTP协议即可通信)
    (F)B/S比C/S更容易创建复杂的界面。 (B/S用HTML语言创建界面,而HTML语言标签有限,因此创建界面能力具有较大的局限性,C/S创建界面更灵活)

  4. 问题:以下关于HTTP的说法,哪些是正确的?
    选项:
    (A) HTTP协议规定了HTML的语法。
    (B)HTTP协议是由Microsoft公司制定的。
    © 浏览器与Web服务器之间的通信遵循HTTP协议。
    (D)HTTP是Hypertext Transfer Protocol的缩写。
    答案:C,D
    注意:(A)HTTP协议规定了HTML的语法。(彼此独立的)
    (B)HTTP协议是由Microsoft公司制定的。(HTTP协议有W3C组织制定的)

  5. 问题:以下哪些属于标记语言?
    选项:
    (A) HTML
    (B)Java
    © JSP
    (D) XML
    (E) JavaScript
    答案:A,D
    注意:(A) HTML
    (B)Java
    © JSP(Web服务器端执行的程序代码)
    (D) XML
    (E) JavaScript (浏览器端运行的脚本)

  6. 问题:用户在本地编写了一个index.htm文件,用IE浏览器打开它,如下图所示。 IE浏览器打开index.htm文件时,需要先发出一个HTTP请求吗?
    在这里插入图片描述
    答:不会;打开的是本地的HTML文件,此时的浏览器仅仅充当一个HTML的解析器

  7. 问题:Web应用位于TCP/IP参考模型的哪一层?(单选)
    选项:
    a) 网络互联层
    b) 应用层
    c) 传输层
    d) 主机-网络层
    答案:b

  8. 问题:关于SOAP协议,以下哪个说法正确?(单选)
    选项:
    (A)SOAP请求与SOAP响应采用HTML语言
    (B)SOAP协议提供了定位Web服务的规范
    ©SOAP协议规定了客户端请求访问Web服务的数据格式。
    (D)浏览器要求访问特定网页的请求必须遵守SOAP协议。
    答案:C
    注意:(A)SOAP请求与SOAP响应采用HTML语言 (XML语言)
    (B)SOAP协议提供了定位Web服务的规范 (定位Web服务是UDDI协议)
    ©SOAP协议规定了客户端请求访问Web服务的数据格式。
    (D)浏览器要求访问特定网页的请求必须遵守SOAP协议。(浏览器要求访问特定网页的请求及Web服务器的返回结果都应该遵守HTTP协议)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值