码迷,mamicode.com
首页 > 其他好文 > 详细

servlet

时间:2019-12-11 21:48:55      阅读:72      评论:0      收藏:0      [点我收藏+]

标签:通过   不可移植   不同的   用户   重写   请求方法   参数   get   对象   

一、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有连接池的概念,可以利用多线程的优点,在系统缓存中事先建立好若干与数据库的连接,到时候若想和数据库打交道可以随时跟系统要连接就行,反应速度快。

servlet

标签:通过   不可移植   不同的   用户   重写   请求方法   参数   get   对象   

原文地址:https://www.cnblogs.com/yangrongkuan/p/12024950.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!