1、HTTP

1.1 请求数据格式

  1. 请求行:请求数据的第一行

    包含三个内容,按顺序分别为:

    请求方式(如GET)、请求资源路径(如/)、协议版本(如HTTP/1.1

  2. 请求头:第二行开始

    格式为key:value,常见的请求头如下:

    Host: 表示请求的主机名
    User-Agent: 浏览器版本,例如Chrome浏览器的标识类似Mozilla/5.0 ...Chrome/79,IE浏览器的标识类似Mozilla/5.0 (Windows NT ...)like Gecko;
    Accept:表示浏览器能接收的资源类型,如text/*,image/*或者*/*表示所有;
    Accept-Language:表示浏览器偏好的语言,服务器可以据此返回不同语言的网页;
    Accept-Encoding:表示浏览器可以支持的压缩类型,例如gzip, deflate等。
  3. 请求体:最后一部分

    POST请求才有,存放请求参数

    和请求头使用空行隔开

    // 请求头
    
    username=root&password=123456
  4. GET和POST请求的区别

    • GET请求的请求参数在请求行中,没有请求体
    • GET请求请求参数大小有限制,POST没有

1.2 相应数据格式

  1. 响应行:响应数据的第一行

    包含三个内容,按顺序分别为:

    协议版本(如HTTP/1.1)、响应状态码(如200)、表示码描述(如OK

  2. 响应头:第二行开始

    格式为key:value格式,常见的响应头如下

    Content-Type:表示该响应内容的类型,例如text/html,image/jpeg;
    Content-Length:表示该响应内容的长度(字节数);
    Content-Encoding:表示该响应压缩算法,例如gzip;
    Cache-Control:指示客户端应如何缓存,例如max-age=300表示可以最多缓存300秒
  3. 响应体:最后一部分

    如HTML代码

    与响应头使用空行隔开

  4. 响应状态码:响应行中内容

    响应状态码分类:

    状态码分类 说明
    1xx 响应中——临时状态码,表示请求已经接收,告诉客户端应当继续请求或者如果它已完成则忽略
    2xx 成功——表示请求已经被成功接收,处理已完成
    3xx 重定向——重定向到其他地方:它让客户端再发起一个请求以完成整个处理
    4xx 客户端错误——处理发生错误,责任在客户端。如:请求不存在资源、未授权或禁止访问等
    5xx 服务器错误——处理发生错误,责任在服务器。如:抛出异常、路由出错、HTTP版本不支持等

    状态码大全:https://cloud.tencent.com/developer/chapter/13553

    常见的响应状态码:

    状态码 英文描述 解释
    200 OK 客户端请求成功,即处理成功,这是我们最想看到的状态码
    302 Found 指示所请求的资源已移动到由Location响应头给定的 URL,浏览器会自动重新访问到这个页面
    304 Not Modified 告诉客户端,你请求的资源至上次取得后,服务端并未更改,你直接用你本地缓存吧。隐式重定向
    400 Bad Request 客户端请求有语法错误,不能被服务器所理解
    403 Forbidden 服务器收到请求,但是拒绝提供服务,比如:没有权限访问相关资源
    404 Not Found 请求资源不存在,一般是URL输入有误,或者网站资源被删除了
    428 Precondition Required 服务器要求有条件的请求,告诉客户端要想访问该资源,必须携带特定的请求头
    429 Too Many Requests 太多请求,可以限制客户端请求某个资源的数量,配合 Retry-After(多长时间后可以请求)响应头一起使用
    431 Request Header Fields Too Large 请求头太大,服务器不愿意处理请求,因为它的头部字段太大。请求可以在减少请求头域的大小后重新提交。
    405 Method Not Allowed 请求方式有误,比如应该用GET请求方式的资源,用了POST
    500 Internal Server Error 服务器发生不可预期的错误。服务器出异常了,赶紧看日志去吧
    503 Service Unavailable 服务器尚未准备好处理请求,服务器刚刚启动,还未初始化好
    511 Network Authentication Required 客户端需要进行身份验证才能获得网络访问权限

2、Servlet

  • 快速入门

    • 依赖:创建web项目,导入Servlet依赖坐标

      Tomcat内置Servlet,若运行时使用该依赖则会导致冲突

      使用<scope>provided</scope>,仅测试和编译环境有效

      <dependency>
      <groupId>javax.servlet</groupId>
      <artifactId>javax.servlet-api</artifactId>
      <version>3.1.0</version>
      <scope>provided</scope>
      </dependency>
    • 创建:定义类,实现Servlet接口,并重写接口中所有方法,并在service方法中输入一句话

      public class ServletDemo1 implements Servlet {
      
          @Override
      public void init(ServletConfig servletConfig) throws ServletException { } @Override
      public ServletConfig getServletConfig() {
      return null;
      } @Override
      public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
      System.out.println("servlet hello world!");
      } @Override
      public String getServletInfo() {
      return null;
      } @Override
      public void destroy() { }
      }
    • 配置:在类上使用@WebServlet("")注解,配置该Servlet的访问路径

      @WebServlet("/demo1")
      public class ServletDemo1 implements Servlet { }
    • 访问:启动Server,输入URL访问该Servlet

      http://localhost:8080/servlet_1_0_SNAPSHOT_war/demo1
  • 执行流程

    • URL拆解

      • http://localhost:8080为本机的服务器地址
      • http://localhost:8080/servlet_1_0_SNAPSHOT_war为本项目地址
      • http://localhost:8080/servlet_1_0_SNAPSHOT_war/demo1为该Servlet的访问地址
    • 创建和调用

      1. 客户端发送请求到服务器

      2. 服务器解析请求

      3. Servlet对象由服务器自动创建

      4. service()方法由服务器自动调用

        自定义Servlet时,必须实现Servlet接口并覆写其中方法,故必然存在可以调用的service()方法

      5. service()方法被执行,服务器对客户端做出响应

  • 生命周期

    • Servlet运行在Servlet容器中,其生命周期由容器管理,分为四个阶段

      1. 加载和实例化

        • 默认情况下,Servlet第一次被访问时,由容器创建Servlet对象

        • 通过配置参数决定创建时机

          • 负整数(默认):第一次被访问时创建

          • 0或正整数:服务器启动时创建(数字越小优先级越高)

            @WebServlet(urlPatterns = "/demo", loadOnStartup = 1)
      2. 初始化

        • 调用init()初始化对象,仅执行一次

          • 加载配置文件
          • 创建连接
          • ...
      3. 请求处理

        • 调用service()对请求进行处理
      4. 服务终止

        • 调用destroy()进行资源回收
        • 释放Servlet实例,随后其会被Java垃圾收集器回收
  • 方法介绍

    • 初始化方法

      public void init(ServletConfig servletConfig);
    • 提供服务方法

      public void service(ServletRequest servletRequest, ServletResponse servletResponse);
    • 销毁方法

      public void destroy();
    • 获取ServletConfig对象

      public ServletConfig getServletConfig();
    • 获取Servlet信息

      public String getServletInfo();
  • 体系结构

    多数时候不需要覆写上述五个方法全部,可以简化

    • Servlet体系结构

      类或接口 说明
      Servlet Servlet体系根接口
      --
      GenericServlet Servlet抽象类实现
      --
      HttpServlet 对HTTP协议封装的Servlet实现

      由于以开发B/S的Web项目为主,均针对HTTP协议,故可在自定义Servlet时继承HttpServlet

    • HttpServlet示例

      HttpServlet已经对service()方法中请求方式判断的方式进行封装

      在使用时需要进一步对不同请求方式实现不同的逻辑

      @WebServlet("/demo4")
      public class ServletDemo4 extends HttpServlet { @Override
      protected void doGet(
      HttpServletRequest req, HttpServletResponse resp
      ) throws ServletException, IOException {
      System.out.println("get...");
      } @Override
      protected void doPost(
      HttpServletRequest req, HttpServletResponse resp
      ) throws ServletException, IOException {
      System.out.println("post...");
      }
      }
    • Servlet urlPattern配置

      • 一个Servlet可以配置多个urlPattern

      • urlPattern配置规则

        配置规则总共四种,如下所示,优先级逐级降低

        • 精确匹配

          // 准确输入主机端口项目地址并在最后加上请求路由即可访问
          @WebServlet("/user/select")
          // 两个请求路由均可访问
          @WebServlet(urlPatterns = {"/servlet1","/servlet2"})
        • 目录匹配

          // * 为通配符,可匹配任意的字符串
          @WebServlet("/user/*")
        • 拓展名匹配

          // 拓展名匹配不能以 / 开头,如示例,任何路由以.do结尾即可访问
          @WebServlet("*.do")
        • 任意匹配

          // 匹配任意请求路由,二者作用相同, /* 的优先级高于 / ,覆盖Tomcat服务器的default的Servlet
          @WebServlet("/")
          @WebServlet("/*")

          DefaultServlet是用来处理静态资源,如果配置了"/"会把默认的覆盖掉,就会引发请求静态资源的时候没有走默认的而是走了自定义的Servlet类,最终导致静态资源不能被访问

3、Servlert的xml配置

  • 说明

    @WebServlet()注解仅支持3.0版本及以上,3.0以下版本仅支持使用XML进行配置

  • 快速入门

    • 编写Servlet类

      package priv.dandelion.web;
      
      import javax.servlet.ServletException;
      import javax.servlet.annotation.WebServlet;
      import javax.servlet.http.HttpServlet;
      import javax.servlet.http.HttpServletRequest;
      import javax.servlet.http.HttpServletResponse;
      import java.io.IOException; @WebServlet("/demo13")
      public class ServletDemo13 extends HttpServlet { @Override
      protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
      System.out.println("demo13 get...");
      } @Override
      protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
      System.out.println("demo13 post...");
      }
      }
    • 在web.xml中对该Servlet进行配置

      <web-app>
      
        <!-- ... -->
      
        <!--
      Servlet全类名
      -->
      <servlet>
      <servlet-name>demo13</servlet-name>
      <servlet-class>priv.dandelion.web.ServletDemo13</servlet-class>
      </servlet>
      <!--
      Servlet访问路径
      -->
      <servlet-mapping>
      <servlet-name>demo13</servlet-name>
      <url-pattern>/demo13</url-pattern>
      </servlet-mapping> </web-app>

HTTP和Servlet快速入门的更多相关文章

  1. Servlet快速入门

    servlet是运行在服务端的java小程序,用来处理客户端请求,响应给浏览器的动态资源 servlet规范:包含3个技术点 1.servlet技术 2.filter技术 3.listener技术 s ...

  2. 【servlet】Servlet快速入门&使用Eclipse发布web项目

    创建时间:6.15 1.什么是Servlet Servlet 运行在服务端的Java小程序,是sun公司提供一套规范(接口),用来处理客户端请求.响应给浏览器的动态资源.但servlet的实质就是ja ...

  3. Servlet快速入门及运行流程

    一.Servlet快速入门 1.创建一个web工程 2.在JavaResource中src下创建一个包名称为com.myxq.servlet 3.在创建的servlet包当中创建一个class文件起名 ...

  4. Servlet快速入门:第一个Servlet程序

    Servlet是整个JavaWeb开发的核心,同时也是一套规范,即公共接口.用于处理客户端发来的请求并作出响应.通常情况下我们会发送不同的请求并交由不同的处理程序来处理,例如处理用户信息和处理订单信息 ...

  5. Servlet(一)----快速入门

    ## Servlet:server applet *  概念:运行在服务端的小程序 *  servlet就是一个接口,定义了Java类被浏览器访问到(tomcat识别)的规则. *  将来我们自定义一 ...

  6. 快速入门系列--MVC--02路由

    现在补上URL路由的学习,至于蒋老师自建的MVC小引擎和相关案例就放在论文提交后再实践咯.通过ASP.NET的路由系统,可以完成请求URL与物理文件的分离,其优点是:灵活性.可读性.SEO优化.接下来 ...

  7. quartz-2.2.x 快速入门 (1)

    欢迎来到quartz快速入门教程.阅读本教程,你将会了解: quartz下载 quartz安装 根据你的需要,配置Quartz 开始一个示例应用   当熟悉了quratz调度的基本功能后,可以尝试一些 ...

  8. SpringMvc_快速入门,深入分析

    目录  一.前言二.spring mvc 核心类与接口三.spring mvc 核心流程图 四.spring mvc DispatcherServlet说明 五.spring mvc 父子上下文的说明 ...

  9. Spring MVC 教程,快速入门,深入分析

    http://elf8848.iteye.com/blog/875830/ Spring MVC 教程,快速入门,深入分析 博客分类: SPRING Spring MVC 教程快速入门  资源下载: ...

随机推荐

  1. HashMap的实现原理?如何保证HashMap线程安全?

    A:HashMap简单说就是它根据建的hashcode值存储数据的,大多数情况下可以直接定位到它的值,因而具有很快的访问速度,但遍历的顺序是不确定的. B:HashMap基于哈希表,底层结构由数组来实 ...

  2. 12.1 Android Studio如何手动下载Gradle文件

    实际操作过程中,可能由于各方面原因,导致Gradle无法下载,或者下载比较慢,这个时候,其实我们可以手动下载,或者找一个最近的版本,替换他. 确认要下载的版本 不论是用命令编译Android项目,还是 ...

  3. golang的超时处理使用技巧

    原文链接:https://www.zhoubotong.site/post/57.html golang的超时处理 2天前Go实例技巧25   大家知道Select 是 Go 中的一个控制结构,每个  ...

  4. Tomcat深入浅出——最终章(六)

    前言 利用了六天的时间,对Tomcat的内容进行了整理. 学习不易.整理也不易,自己坚持的更了下来,很不错. 希望每一位在努力前行的小伙伴,都要相信坚持就会有收获. 本次Tomcat就探寻到这里,明年 ...

  5. 4-4 Spring Test

    Spring Test Ⅰ.主要解决的问题 使用SpringTest前 手动加载Sping配置 手动从Spring容器中获取对象 使用SpringTest后 只需要通过注解指定Spring配置类 在S ...

  6. 2.Android高仿网易云音乐-引导界面和广告界面实现

    效果图 效果图依次为图片广告,视频广告,引导界面. 系列文章目录导航 目录 1.实现分析 广告界面就是显示图片和视频,所以可以放一个图片控件,视频控件,然后跳过按钮,提示按钮,WiFi预加载提示都是放 ...

  7. FPGA开发流程(创建工程,选择芯片,变量位置,文件命名,reg和wire数据类型,开发流程)

    开发流程(以二选一选择器为例) 1.设计定义:设计一个可以从两个输入端中选择其中一个并输出的逻辑电路 2.设计输入 2.1.逻辑抽象:三个输入端,一个用来选择,记sel,另两个被选择,记a,b,加上一 ...

  8. 建立二叉树的二叉链表(严6.65)--------西工大noj

    需要注意的点:在创建二叉树的函数中,如果len1==len2==0,一定要把(*T)置为NULL然后退出循环 #include <stdio.h> #include <stdlib. ...

  9. 面试突击68:为什么 TCP 需要 3 次握手?

    TCP 三次握手是一道经典的面试题,它是指 TCP 在传递数据之前,需要进行 3 次交互才能正式建立起连接,并进行数据传递. TCP 之所以需要 3 次握手是因为 TCP 双方都是全双工的.所谓全双工 ...

  10. 带你熟悉云网络的“电话簿”:DNS

    摘要:无论你域名怎么解析,最终我还是要用IP和别人通信的.域名只是你的皮囊,IP才是你的灵魂. 本文分享自华为云社区<<跟唐老师学习云网络> - DNS电话簿>,作者: tsj ...