zoukankan      html  css  js  c++  java
  • http

    什么是http
    超文本传输控制协议,应用层协议,定义了浏览器(也可以是别的程序)与web服务器之间通讯的过程与数据格式
    通讯的过程
    1)浏览器向服务器发送建立连接的请求。
    2) 浏览器先将请求数据打包,向服务器发送请求。
    3) 服务器处理完请求,然后将数据打包,发送给浏览器。
    4) 服务器发送完数据,并闭连接。
    请求包 2响应包
    数据包结构:
    1: 请求行(数据包中的一行内容)
    包含:
    ? 请求方式(get/post) get
    ? 请求资源路径(端口号乊后的内容,比如/appname/servlet) 请求路径 www.baidu.com
    ? 协议的类型不版本x`
    2:若干消息头(消息头是由 w3c 定义的一些有特殊含义的键值对)
    消息头的样式,比如: content-type= text/html;
    服务器和浏览器都会遵守这些消息头的约定。
    消息头一般由服务器戒者浏览器自劢生成,但是也可以通过编程的方式生成
    3:实体内容

    如果请求方式是 post 方式,请求参数及值会放在这儿。
    如果请求方式是 get 方式,请求参数不值是包含在请求资源路径里面。

    响应数据包结构:
    第一部分: 状态行
    协议的类型不版本
    状态码(状态码是一个数字,不同的数字代表不同的状态

    ? 500: 系统错误(即程序代码有误)
    ? 404: 找不到资源(访问路径错误)
    ? 200: 正确
    405

    第二部分: 若干消息头
    第三部分: 实体内容
    服务器返回给浏览器的处理结果


    它是sun公司制定一种用于拓展web服务功能的组件规范
    Servlet主要任务:
    读取客户端发送的数据
    生成结果
    向客户端发送显式数据(即文档)和隐式数据(HTTP响应数据)

    工作过程:
    在客户端对web服务器发出请求

    web服务器接收到请求后将其发送给Servlet

    Servlet容器为此产生一个实例对象并调用ServletAPI中相应的方法来对客户端HTTP请求进行处理,然后将处理的响应结果返回给WEB服务器.

    web服务器将从Servlet实例对象中收到的响应结构发送回客户端.

    容器:
    web容器:可以部署多个WEB应用程序的环境。

    Tomcat容器:是Java Servlet,JavaServer Pages,Java Expression Language和Java WebSocket(Java EE)技术的开源实现。

    Servlet容器:全称server applet,意为服务程序。主要作用是给上级容器(Tomcat)提供doGet()和doPost()等方法。其生命周期实例化、初始化、调用、销毁受控于Tomcat容器。


    Web容器负责管理和运行Servlet
    容器对Servlet的支持包括
    通信支持 (将请求信息和响应信息封装成请求对象和响应对象)
    Servlet生命周期管理 (产生Servlet和销毁Servlet,并调用servlet相关的方法)
    多线程支持 (线程创建、线程启动、线程运行、线程同步)
    JSP支持
    处理安全性

    简单的说:
    Web容器主要是用于给处于容器中的应用程序组件(Servlet、JSP)提供一个环境,使Servlet、JSP直接跟容器中的环境变量交互。这样,我们就可以把注意力放在用Servlet实现业务逻辑上,而不必关注其它系统问题。

    配合
    1)客户端向Web服务器发起一个HTTP请求。

    2)HTTP请求被Web服务器接受,如果请求的是静态页面,则由Web服务器负责处理。如果请求的是Java Web组件(Servlet或者JSP),则移交给Web容器。Web容器可以在主机的同一个进程、不同的进程或其他的Web服务主机的进程中启动。

    3)Web容器根据Servlet的配置文件确定调用的具体Servlet类,并把request对象、response对象传给它。

    4)Servlet通过request对象知道客户端的使用者是谁,客户的请求信息是什么和其他的一些信息。Servlet处理完请求后把要返回的信息放入response对象返回到客户端。

    5)一旦Servlet完成了请求的处理,Web容器就会刷新response,把控制权返回给web服务器。


    servlet的生命周期
    生命周期是指容器如何创建servlet实例、分配资源、调用其方法,销毁实例的过程
    阶段一: 实例化(就是创建 servlet 对象,调用构造器)
    在如下两种情况下会进行对象实例化。
    第一种情况:
    当请求到达容器时,容器查找该 servlet 对象是否存在,如果不存在,才会创建实例。
    第二种情况:
    容器在启动时,或者新部署了某个应用时,会检查 web.xml 当中,servlet 是否有load-on-starup 配置。如果有,则会创建该 servlet 实例。
    load-on-starup 参数值越小,优先级越高(最小值为 0,优先级最高)。
    <servlet>
    <servlet-name>loginServlet</servlet-name>
    <servlet-class>com.gezhi.controller.LoginServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
    </servlet>
    实验1:设置构造器,观察多次访问的时候和service方法执行先后
    实验2:在配置文件中加入load-on-starup,观察实例化的时机

    阶段二: 初始化
    为 servlet 分配资源,调用 init(ServletConfig config);
    方法config 对象可以用来访问 servlet 的初始化参数。
    初始化参数是使用 init-param 配置的参数。
    init 可以 override。
    实验1:override init方法,观察执行实际(和上边的实验配合)
    实验2:加入<init-param>,并通过取值config
    <init-param>
    <param-name>name</param-name>
    <param-value>zhangsan</param-value>
    </init-param>



    ServletConfig config=getServletConfig();
    String add=config.getInitParameter("address");
    、 ---------------------------------------------
    如果是有参的init那么不许要获取ServletConfig
    name=config.getInitParameter("name");

    阶段三: 就绪/调用
    有请求到达容器,容器调用 servlet 对象的 service()方法。
    HttpServlet 的 service()方法,会依据请求方式来调用 doGet()或者 doPost()方法。
    但是,这两个 do 方法默认情况下,会抛出异常,需要子类去 override。

    阶段四: 销毁
    容器依据自身的算法,将不再需要的 servlet 对象删除掉。
    在删除之前,会调用 servlet 对象的 destroy()方法。
    destroy()方法用于释放资源。
    在 servlet 的整个生命周期当中,init,destroy 只会执行一次,而 service 方法会执行多次。

  • 相关阅读:
    leetcode 48. Rotate Image
    leetcode 203. Remove Linked List Elements 、83. Remove Duplicates from Sorted List 、82. Remove Duplicates from Sorted List II(剑指offer57 删除链表中重复的结点) 、26/80. Remove Duplicates from Sorted ArrayI、II
    leetcode 263. Ugly Number 、264. Ugly Number II 、313. Super Ugly Number 、204. Count Primes
    leetcode 58. Length of Last Word
    安卓操作的一些问题解决
    leetcode 378. Kth Smallest Element in a Sorted Matrix
    android studio Gradle Build速度加快方法
    禁用gridview,listview回弹或下拉悬停
    Android Studio找不到FragmentActivity类
    安卓获取ListView、GridView等滚动的距离(高度)
  • 原文地址:https://www.cnblogs.com/javawen/p/10918410.html
Copyright © 2011-2022 走看看