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 方法会执行多次。

  • 相关阅读:
    【转】Maven 手动添加 JAR 包到本地仓库
    上海畅采电子商务面试题总结
    及善网络科技面试总结
    解析P2P金融的业务安全
    html中返回上一页的各种写法【转】
    Myeclipse 修改Jboss5.x 端口号 8080 改为80
    JavaScript isNaN() 函数的用法
    oracle用户创建及权限设置[转]
    广州亿讯公司(国企)部分题目
    # Java 面试题总结
  • 原文地址:https://www.cnblogs.com/javawen/p/10918410.html
Copyright © 2011-2022 走看看