Tomcat&http

来源:互联网 发布:淘宝宝贝像素 编辑:程序博客网 时间:2024/06/05 03:04



1、Http 协议概述

   A、互联网的本质就是数据交互
   B、数据交互时,要遵循一定的规则:协议
      http ------ 超文本传输协议
      https ----- http的升级版,更安全
      ftp ------- 文件传输协议
      SMTP POP3 - 邮件的发送与接收协议
      ....
2、Http 协议详解 ----- 相关概念
   应用场景:用于制定浏览器和服务器交互的规则
   特    点:Http协议学习特点
            了解基本概念即可,许多重要知识点,必须结合后面的 Java WEB 知识点理解
   本身特点:
            A、默认端口:80
            B、基于请求响应的协议(重点)
   版    本: 1.0 ---- 访问多次服务器,每一个都开通一个流管道,使用完,关闭
        1.1 ---- 只开启一个管道,使用这一个管道下载资源
        1.1 效率高于 1.0
3、Http 协议详解 ----- 组成之请求
   前提知识:
     创建动态WEB项目并部署
   优    化:
     配置浏览器
     window ----> preferences ----> browser ----> use extrnal browser
   请求:
     行:
    GET /day3301/index.html HTTP/1.1
    请求方式
    请求路径

    请求协议版本号

    GET方式:  URL?键=值&键=值   

     头:

        总结:请求头包含的是浏览器自身的相关信息

        作用(重要不紧急):

         要将这些数据携带至服务器,服务器解析这些数据,响应对应的数据
     体:
        客户向服务器提交的数据
        POST方式:  请求正文(体)中存储客户提交的数据
4、Http 协议详解 ----- 组成之响应
   响应:
       行(重点):
     版本号 状态码 状态码描述
     200 ----- 响应正常
     304 ----- 资源内容未修改,直接取本地缓存
     404 ----- 资源不存在
     500 ----- 服务器异常(后面常见)
     302 ----- 重定向(后面常见 ----- response)  
       头
     总结,响应头携带的是服务器信息,给浏览器解析使用
       体
     响应的数据,这些数据在浏览器窗口显示  
5、请求头详解

  A、提交方式

GET:

    1、用户提交的数据在 URL 后
       htpp://ip:8080/xxx/yyyy?键1=值1&键2=值2
    2、提交的数据量有限,上限和浏览器实现有关,不一定

    3、效率高       

POST:

    1、用户提交的数据隐藏了
    2、没有数据量大小限制
    3、效率低
       应用场景:
        GET:搜索引擎
        POST:登陆、注册涉及敏感信息, 提交的数据量较大时(文件上传) 

  B、User-Agent ----- 当前浏览器信息以及本地操作系统信息 ----- (文件下载时会使用)
     前提知识:
       HTML 代码有兼容性问题,显示相同的效果,不同的浏览器编码实现也不同
       User-Agent的作用:告诉服务器当前自身版本信息
  C、Connection: 1.1 keep-alive 1.0 close (不重要)
  D、HOST:服务器主机名(不重要)
  E、Content-Length: 请求体的长度(不重要)
  F、Content-type:提交的数据的类型(重点:文件上传)
     默认值只能提交一般字符串
  G、Accept:告诉服务器,浏览器可以解析的数据类型
     大数据/小数据
  H、Accept-Encoding:浏览器支持的压缩格式
     压缩 解压缩
  I、Accept-Language:浏览器当前的语言环境   
     国际化
  J、referer:
    出现场景:必须有页面跳转时,当从A页面跳转到B页面时,才会出现 referer
             referer的值是源文件 A
    作    用:防盗链设计  访问统计      
  K、If-Modified-Since:和缓存相关数据
     缓存大致实现:
       页面是静态资源时,第一次访问,下载到本地保存,以后访问,直接取本地缓存
     问        题:
       万一服务器修改了静态资源,怎么办?

     解 决 策  略:   使用时间戳
       A、第一次访问某个资源,响应资源数据 + 资源的最后修改时间
          响应:last-modified:文件的最后修改时间

       B、浏览器保存资源数据以及最后修改时间
       C、以后访问某个资源,携带最后修改时间到服务器
          请求:If-Modified-Since:文件最后修改时间

       D、服务器取出最后修改时间与资源的最后修改时间,比较:
          如果一样,资源未修改,响应 304,让浏览器取本地缓存
          如果不一样,资源被修改,正常响应数据
  L、Cookie(非常重点):在浏览器和服务器之间传递一些持久化数据
     持久化存储数据的应用场景:登陆时账号密码回显   电子商城历史记录回显                   
6、响应头详解
  A、Content-Encoding:服务器响应的数据使用的压缩格式(不重要)
  B、Content-length :响应体的长度
  C、Refresh:刷新(重要)
     隔固定间隔之后,浏览器会自动访问服务器一次
     应用场景:
       天气预报 股市行情 新闻
  D、Set-Cookie 结合 Cookie 理解
     Cookie 是保存在浏览器的数据,但是一般情况下 Cookie 是由服务器端生成
  E、Content-Disposition(文件下载时,会使用):
     和文件下载相关,如果有文件下载实现,那么必须设置该属性
  F、Content-Type:响应的数据的类型
  G、Location:要重定向的资源的 URL
     一般结合 302 状态码使用
     应用场景:
       重定向时访问A资源,跳转到 B 资源
     底层实现:
       访问A时,A响应状态码 302 + location:B的路径
       浏览器解析到 302 时,访问location 中的 B 资源
7、HelloWorld 版本的 Servlet
   A、编写一个类,实现 Servlet 接口
   B、重写 service 方法
      响应数据
      //动态的产生响应数据
      PrintWriter out = response.getWriter();

      out.write(new Date() + "");

   C、在 web.xml 中为 Servlet 映射一个访问路径
      <servlet>
      <servlet-name>hehe</servlet-name>
      <servlet-class>xxx.HelloServlet</servlet-class>
      </servlet>
      <servlet-mapping>
      <servlet-name>hehe</servlet-name>
      <url-pattern>/xixi</url-pattern>
      </servlet-mapping>
   D、浏览器访问
      http://localhost:8080/day01/xixi


   自定义的 Servlet 怎么执行的?
   A、从效果上看:  service 方法执行了
   
   B、和 JavaSE 有明显区别  Tomcat 封装了一些实现
   
   C、解析xml文件,根据路径获取类名
      获取反射对象:  Class clazz = Class.forName("全路径名");
      创建Servlet 对象 :  hello = clazz.newInstance();
      反射: Method m = clazz.getMethod("service");
      执行:   m.invoke(hello);
   注意:
     在 JavaWEB 中封装一部分实现,优点:对于调用者而言,简化了代码实现

原创粉丝点击