zoukankan      html  css  js  c++  java
  • servlet

    一、servlet的生命周期:

    Servlet的生命周期分为5个阶段:加载、创建、初始化、处理客户请求、卸载。

      (1)加载:容器通过类加载器使用servlet类对应的文件加载servlet
      (2)创建:通过调用servlet构造函数创建一个servlet对象【第二步和第三步可以算是同时执行,所以也可以说:一旦加载某个servlet,服务器就会调用它的init()方法进行初始化】
      (3)初始化:调用init方法初始化【servlet生命的起点。】
      (4)处理客户请求:每当有一个客户请求,容器会创建一个线程来处理客户请求(service())
      (5)卸载:调用destroy方法让servlet自己释放其占用的资源【servlet生命的终点。】

    PS:Servlet是线程不安全的,在Servlet类中可能会定义共享的类变量,这样在并发的多线程访问的情况下,不同的线程对成员变量的修改会引发错误。

    二、servlet service

      1)service()是在servlet生命周期中的服务期,默认在HttpServlet类中实现,所有的请求均首先由service()进行处理,根据HTTP请求方法(GET、POST等),将请求分发到doGet、doPost等方法实现。
      2)service()是在javax.servlet.Servlet接口中定义的,在javax.servlet.GenericServlet中实现了这个接口(其实应该说是在HttpServlet进行了实现的)。GenericServlet抽象类给出了设计servlet的一些骨架,定义了servlet生命周期还有一些得到名字、配置、初始化参数的方法,但其设计的是和应用层协议无关的。而doGet/doPost与http协议有关,是在 javax.servlet.http.HttpServlet 中实现的。

    三、servlet的体系结构

    体系结构:
    Servlet:接口     
         |(实现)
    GenericServlet:抽象类,定义一个通用的,独立于底层协议的servlet
         |(实现)
    HttpServlet:抽象类   
         |(实现)
    自定义servlet          #多数Servlet通过从GenericServlet或HttpServlet类进行扩展来实现

    servlet常用方法:
      1)void init(ServletConfig config):初始化
      2)void service(ServletRequest request,ServletResponse response):服务 处理业务逻辑
      3)void destroy():销毁

      4)ServletConfig:接口定义了在Servlet初始化的过程中由Servlet容器传递给Servlet得配置信息对象(又getServletConfig()完成)

    GenericServlet常用方法:
      1)除了service()没有,其他都实现了
      2)空参的Init():若我们自己想对servlet进行初始化操作,重写这个init()方法即可

    HttpServlet常用方法:
      1)service()做了实现,把参数强转,调用了重载的service方法
      2)重载的service方法获取请求的方式,根据请求方式的不同调用相应doGet和doPost方法

    四、servlet和CGI(common gateway interface,通用网关接口)的比较:

      1)当用户浏览器发出一个Http/CGI的请求,每个进程只为一个客户所服务,导致服务器内存和cpu开销大。而Servlet充分发挥了服务器端的资源并高效的利用。每次调用Servlet时并不是新启用一个进程,每个请求会产生新的线程,减少系统中进程数量,并发处理能力强。多个客户能在同一个进程中的同时得到服务。
      2)CGI主要用Perl,shell script或C编写,而servlet用java语言编写。
      3)CGI进程在服务完成后就被销毁,所以效率上低于servlet;servlet进程(实例)处于服务进程中,只有在服务器被卸载时才会被卸载。
      4)CGI是不可移植的,是运行在特定平台上的,而servlet是可移植的,运行在JVM上的。
      5)servlet有连接池的概念,可以利用多线程的优点,在系统缓存中事先建立好若干与数据库的连接,到时候若想和数据库打交道可以随时跟系统要连接就行,反应速度快。

  • 相关阅读:
    (III)AOP:第六节:通知
    (III)AOP:第八节:多切面运行顺序
    (IV)JdbcTemplate
    (III)AOP:第三节:AOP配置与使用
    (III)AOP:第十节:AOP 总结
    (III)AOP:第二节:AOP概述
    (III)AOP:第四节:切入点表达式
    (III)AOP:第九节:XML配置切面
    (III)AOP:第五节:当前连接点
    7月3号
  • 原文地址:https://www.cnblogs.com/yangrongkuan/p/12024950.html
Copyright © 2011-2022 走看看