zoukankan      html  css  js  c++  java
  • Httpservlet源码及实现机制详解

    Httpservlet源码及实现机制

    HTTP请求刚刚进来的时候实际上只是一个HTTP请求报文,容器会自动将这个HTTP请求报文包装成一个HttpServletRequest对象,并且自动调用HttpServlet的service()方法来解析这个HTTP请求,service()方法会解析HTTP请求行,而HTTP请求行由method,uri,HTTP version三个组成,method就是get或者post,service()方法根据method来决定是执行doGet还是doPost,这一切都是服务器Tomcat/weblogic/websphere/jboss(容器)自动完成的,HTTP的格式也自动被解析。 
    
    只要你的类继承了HttpServlet,并且在web.xml里面配置了相应的servlet和mapping,服务器就会自动帮你执行以上过程。

              在每一个Servlet都必须要实现Servlet接口,GenericServlet是个通用的、不特定于任何协议的Servlet,它实现了Servlet接口,而HttpServlet继承于GenericServlet,因此HttpServlet也实现了Servlet接口,所以我们定义的Servlet只需要继承HttpServlet父类即可。

     Servlet接口中定义了一个service方法,HttpServlet对该方法进行了实现,实现方式就是将ServletRequest与ServletResponse转换为HttpServletRequest与HttpServletResponse。

    转换完毕后,会调用HttpServlet类中自己定义的service方法,如下所示

    在该service方法中,首先获得到请求的方法名,然后根据方法名调用对应的doXXX方法,比如说请求方法为GET,那么就去调用doGet方法;请求方法为POST,那么就去调用doPost方法。

    在HttpServlet类中所提供的doGet、doPost等方法都是直接返回错误信息,所以我们需要在自己定义的Servlet类中override这些方法

    Servlet的框架是由两个Java包组成:javax.servlet和javax.servlet.http. 在javax.servlet包中定义了所有的Servlet类都必须实现或扩展的的通用接口和类.在javax.servlet.http包中定义了采用HTTP通信协议的HttpServlet类.

      Servlet的框架的核心是javax.servlet.Servlet接口,所有的Servlet都必须实现这一接口 .在Servlet接口中定义了5个方法,其中有3个方法代表了Servlet的生命周期:

      init方法,负责初始化Servlet对象

      service方法,负责相应客户的请求

      destory方法,当Servlet对象退出声明周期时,负责释放占有的资源

      当Web容器接收到某个Servlet请求时,Servlet把请求封装成一个HttpServletRequest对象,然后把对象传给Servlet的对应的服务方法.

      HTTP的请求方式包括DELETE,GET,OPTIONS,POST,PUT和TRACE,在HttpServlet类中分别提供了相应的服务方法, 它们是,doDelete(),doGet(),doOptions(),doPost(), doPut()和doTrace().

      HttpServlet的功能

      HttpServlet首先必须读取Http请求的内容。Servlet容器负责创建HttpServlet对象,并把 Http请求直接封装到HttpServlet对象中,大大简化了HttpServlet解析请求数据的工作量。HttpServlet容器响应Web客户请求流程如下:

      1)Web客户向Servlet容器发出Http请求;

      2)Servlet容器解析Web客户的Http请求;

      3)Servlet容器创建一个HttpRequest对象,在这个对象中封装Http请求信息;

      4)Servlet容器创建一个HttpResponse对象;

      5)Servlet容器调用HttpServlet的service方法,把HttpRequest和HttpResponse对象作为service方法的参数传给HttpServlet对象;

      6)HttpServlet调用HttpRequest的有关方法,获取HTTP请求信息;

      7)HttpServlet调用HttpResponse的有关方法,生成响应数据;

      8)Servlet容器把HttpServlet的响应结果传给Web客户。

      二、创建HttpServlet的步骤——“四部曲”

      1)扩展HttpServlet抽象类;

      2)覆盖HttpServlet的部分方法,如覆盖doGet()或doPost()方法;

      3)获取HTTP请求信息。通过HttpServletRequest对象来检索HTML表单所提交的数据或URL上的查询字符串;

      4)生成HTTP响应结果。通过HttpServletResponse对象生成响应结果,它有一个getWriter()方法,该方法返回一个PrintWriter对象。

  • 相关阅读:
    Yii2 分页
    Yii2 或者当前登录用户帐号
    css3媒体查询判断移动设备横竖屏
    Javascript操作Tr隐藏显示变形~
    php注释标准
    匹配一段html中所有的src
    数据库遇到错误(随时补充)
    NetCore-缓存文件上传和文件流上传
    SVN跨服务器版本迁移
    发票同步微信卡包
  • 原文地址:https://www.cnblogs.com/langtianya/p/2883308.html
Copyright © 2011-2022 走看看