zoukankan      html  css  js  c++  java
  • Servlet简介

    一、概念

    Servlet全称java Servlet,是使用java语言编写的服务器端程序。

    二、工作原理

    Servlet运行时需要特定的容器,即Servlet运行时所需要的运行环境,例如:tomcat。

    Servlet工作原理图:

    当web服务器接收到一个Http请求时,web服务器会将请求交给Servlet容器。Servlet容器首先对所请求的URL进行解析,并根据web.xml配置文件找到对应的处理Servlet,同时将request、response对象传递给Servlet。Servlet通过request对象获取客户端请求者、请求信息及其他信息等。Servlet处理完请求后,会把所有需要返回的信息放入response对象中并返回客户端。Servlet一旦处理完请求,Servlet容器就会刷新response对象,并将控制权重新交给web服务器。

    当Servlet容器收到请求时,Servlet引擎就会判断这个Servlet是否是第一次访问,如果是第一次访问,Servlet引擎调用init()方法初始化这个Servlet。每个Servlet只被初始化一次,后续的请求只是新建一个线程,再调用Servlet中的service()方法。当多个用户请求同时访问一个Servlet时,由Servlet容器为每个用户启动一个线程,这些线程的启动和销毁由Servlet容器负责。

    三、生命周期

     Servlet的生命周期一般是从web服务器开始运行时开始,然后不断地处理来自浏览器的请求,并通过web服务器将响应结果返回给客户端,直到web服务器停止运行,Servlet才会被清除

    一个Servlet的生命周期一般包括:加载、初始化、运行、销毁4个阶段

    1、加载

    当web服务器启动或web客户请求Servlet服务时,Servlet容器加载一个java Servlet类,一般情况下,Servlet容器是通过java类加载器加载一个Servlet的,这个Servlet可以是本地的,也可以是远程的。Servlet只需要加载一次,然后实例化该类的一个或多个实例。

    2、初始化阶段

    Servlet容器调用Servlet的init()初始化方法,对Servlet进行初始化。在初始化时,将会读取配置信息,完成数据连接等工作。

    在初始化阶段,将包含初始化参数和容器环境信息的ServletConfig对象传入init()方法中,ServletConfig对象负责向Servlet传递信息,若传递失败,则发生ServletException异常,Servlet将不能正常工作,此时Servlet会被容器清除掉。由于初始化未完成,因此不会调用destroy()方法释放资源。清除该Servlet后容器将重新初始化这个Servlet,若抛出UnavailableException异常,并指定了最小的初始化间隔时间,则需要等待该指定时间之后,再进行新的Servlet初始化。

     3、运行阶段

    当web服务器接收到浏览器的访问请求后,会将该请求传给Servlet容器。Servlet容器将web客户接收到的HTTP请求包装成HttpServletRequest对象,由Servlet生成的响应包装成HttpServletResponse对象,将这两个对象作为参数,调用service()方法。在service()方法中,通过HttpServletRequest对象获取客户端的信息,HttpServletResponse对象生成HTTP响应数据。

    容器在某些情况下,会将多个web请求发送给同一个Servlet实例进行处理。在这种情况下,一般通过Servlet实现SingleThreadModel接口来处理多线程的问题,从而保证一次只有一个线程访问service()方法。容器可以通过维护一个请求队列或维护一个Servlet实例池来实现这样的功能。

    4、销毁阶段

    Servlet被初始化后一直在内存中保存,直到服务器重启时Servlet对象被销毁。在这种情况下,通过调用destroy()方法,回收init()方法中使用的资源,如关闭数据库连接等。destroy()方法完成后,容器必须释放Servlet实例,以便它能够被垃圾回收。

    一旦调用destroy()方法,容器就不会再向当前Servlet发送任何请求。如果容器还需要使用Servlet,则必须创建新的Servlet实例。

    四、MVC开发模式

     MVC模式将应用程序的开发分为三层:视图、模型、控制层。

    视图层:负责从用户获取数据和向用户展示数据。

    模型层:负责处理业务逻辑和数据库的底层操作。

    控制层:负责处理视图层的交互。从视图层接收请求,然后从模型层取出对请求的处理结果,并将结果返回给视图层。只负责数据的流向,并不涉及具体的业务逻辑处理。

    MVC模式图:

  • 相关阅读:
    .net core ELK
    mongodb基础
    .net core FluentValidation
    使用Identity Server 4建立Authorization Server
    .net core JWT应用
    .net core action过滤器的普通应用
    matplotlib
    python-13:文件操作 之二
    python-13:文件操作 open
    python-12:内置 函数之一 filter map sorted reduce
  • 原文地址:https://www.cnblogs.com/heisetianshi/p/10718459.html
Copyright © 2011-2022 走看看