• servlet的生命周期


             在web开发的基础部分,我们看到编写一个HTTP服务器其实是非常简单的,只需要先编写基于TCP/IP协议的服务,然后再一个TCP连接中读取HTTP请求,发送HTTP相应。

    1.servlet简介:

    编写一个完善的HTTP服务器,以HTTP/1.1为例:

         (1) 识别正确和错误的HTTP请求

         (2) 识别正确和错误的HTTP头····

         (3)  复用TCP链接

         (4)  复用线程

         (5)  IO异常处理

           由于这些基础工作会消耗完我们大量的时间,并且经过长期测试才能稳定运行,每次编写这些这些千行底层代码,就无法做到高校而稳定的开发,所以JAVAEE平台上,处理TCP连接,解析HTTP协议这些底层工作,都交给现成的Web服务器,我们只需要让我们自己的应用程序跑在Web服务器上,JAVA提供了Servlet API,我们使用Servlet API编写。

     

    2.Servler的简单实现:

    1. // WebServlet注解表示这是一个Servlet,并映射到地址 hello.do
    2. @WebServlet(urlPatterns = "/hello.do")
    3. public class HelloServlet extends HttpServlet {
    4. protected void doGet(HttpServletRequest req, HttpServletResponse resp)
    5. throws ServletException, IOException {
    6. // 设置响应类型:
    7. resp.setContentType("text/html");
    8. // 获取输出流:
    9. PrintWriter pw = resp.getWriter();
    10. // 写入响应:
    11. pw.write("

      Hello, world!

      "
      );
    12. // 最后不要忘记flush强制输出:
    13. pw.flush();
    14. }
    15. }

        一个servlet总是继承自HttpServlet,然后覆写doGet()方法或者doPost()方法。这俩个方法创建时分别传入了俩个对象,分别是request(请求)和response(响应)。我们在使用Servlet API时,并不直接与底层TCP交互,也不需要解析HTTP协议。我们只需要设置正确的响应类型,然后获取PrintWrite,写入相应即可。

       这样的项目最终会打包成一个.war文件,运行这个文件,需要支持的Servlet API容器(web服务器)。

    支持Servlet的常用服务器有:

    (1)Tomcat:由Apache开发的开源免费的服务器

    (2)Jetty:由Eclipse开发的开源免费的服务器

    (3)GlassFish:一个开源的全功能的JAVAEE服务器

    3.Servlet的生命周期

        在通过一个URL路径发起一个对Servlet的请求,其本质实在调用执行Servlet实例的doXXX()方法。该Servlet实例的创建和使用的过程,被称为Servlert的生命周期。

    Servlet的生命周期包括:

    (1) 实例化:

           根据Servlet请求的路径(例如home.do),查找该Servlet的实例。如果实例不存在,则通过调用构造方法,完成Servlet实例的创建。

    (2)初始化:

          通过该Servlet的实例,调用init()方法,执行初始化的逻辑。

    (3)服务: 

            通过该Servlet的实例,调用service()方法,如果子类没有重写该方法,则调用HttpServlet父类的service()方法,在父类的该方法中进行请求方式的判断,如果是GET()请求,则doGet()方法,如果是POST请求,则调用doPost()方法。

                 如果子类重写该方法,则调用子类重写后的方法。

                 如果子类未重写该方法,则调用父类的doXXX()方法,在父类的方法实现中,返回一个               405的错误显示。

    (4)销毁:

    服务器关闭或重启时,会销毁所有的Servlet实例,会调用Servlet实例的destroy()方法。

     

  • 相关阅读:
    一文800字手把手教你使用Docker实现分布式Web自动化
    pythony异常处理/catalan数和出栈排列数
    通过S3协议实现通用的文件存储服务中间件
    Spark基础【RDD累加器、广播变量、一个小案例】
    tup()是什么意思
    socket 降低cpu 占用率 ,放弃Thread和Whell 循环
    [工业自动化-18]:西门子S7-15xxx编程 - 软件编程 - PLC用于工业领域的嵌入式系统:硬件原理图、指令系统、系统软件架构、开发架构等
    Kubernetes中gRpc的服务发现
    STM32G491RCT6,STM32H743BIT6规格书 32bit IC MCU
    阿里Nginx替代产品-Tengine安装
  • 原文地址:https://blog.csdn.net/weixin_54535063/article/details/126445911