`

Servlet生命周期与工作原理

 
阅读更多

Servlet生命周期分为三个阶段:

 

  1,初始化阶段  调用init()方法

 

  2,响应客户请求阶段  调用service()方法

 

  3,终止阶段  调用destroy()方法

 

Servlet初始化阶段:

 

  在下列时刻Servlet容器装载Servlet:

 

    1,Servlet容器启动时自动装载某些Servlet,实现它只需要在web.XML文件中的<Servlet></Servlet>之间添加如下代码:

 

<loadon-startup>1</loadon-startup>

 

    2,在Servlet容器启动后,客户首次向Servlet发送请求

 

    3,Servlet类文件被更新后,重新装载Servlet

 

  Servlet被装载后,Servlet容器创建一个Servlet实例并且调用Servlet的init()方法进行初始化。在Servlet的整个生命周期内,init()方法只被调用一次。

 

    

 

Servlet工作原理:

 

  首先简单解释一下Servlet接收和响应客户请求的过程,首先客户发送一个请求,Servlet是调用service()方法对请求进行响应 的,通过源代码可见,service()方法中对请求的方式进行了匹配,选择调用doGet,doPost等这些方法,然后再进入对应的方法中调用逻辑层 的方法,实现对客户的响应。在Servlet接口和GenericServlet中是没有doGet,doPost等等这些方法 的,HttpServlet中定义了这些方法,但是都是返回error信息,所以,我们每次定义一个Servlet的时候,都必须实现doGet或 doPost等这些方法。

 

  每一个自定义的Servlet都必须实现Servlet的接口,Servlet接口中定义了五个方法,其中比较重要的三个方法涉及到 Servlet的生命周期,分别是上文提到的init(),service(),destroy()方法。GenericServlet是一个通用的,不 特定于任何协议的Servlet,它实现了Servlet接口。而HttpServlet继承于GenericServlet,因此 HttpServlet也实现了Servlet接口。所以我们定义Servlet的时候只需要继承HttpServlet即可。

 

  Servlet接口和GenericServlet是不特定于任何协议的,而HttpServlet是特定于HTTP协议的类,所以 HttpServlet中实现了service()方法,并将请求ServletRequest,ServletResponse强转为 HttpRequest和HttpResponse。

 

public void service(ServletRequest req,ServletResponse res)
  throws ServletException,IOException
{
      HttpRequest request;
      HttpResponse response;
 
     try
     {
         req = (HttpRequest)request;
         res = (HttpResponse)response;
      }catch(ClassCastException e)
      {
         throw new ServletException("non-HTTP request response");
      }
      service(request,response);
}

 

    代码的最后调用了HTTPServlet自己的service(request,response)方法,然后根据请求去调用对应的doXXX方法,因为HttpServlet中的doXXX方法都是返回错误信息,

 

protected void doGet(HttpServletRequest res,HttpServletResponse resp)
  throws ServletException,IOException
{
   String protocol = req.getProtocol();
   String msg = IStrings.getString("http.method_get_not_supported");
   if(protocol.equals("1.1"))
   {
      resp.sendError(HttpServletResponse.SC.METHOD.NOT.ALLOWED,msg);
    }
   esle
    {
      resp.sendError(HttpServletResponse.SC_BAD_REQUEST,msg);
    }
}

 

所以需要我们在自定义的Servlet中override这些方法!

 

    源码面前,了无秘密!

 

---------------------------------------------------------------------------------------------------------------------------------

 

Servlet响应请求阶段:

 

  对于用户到达Servlet的请求,Servlet容器会创建特定于这个请求的ServletRequest对象和ServletResponse对象,然后调用Servlet的service方法。service方法从ServletRequest对象获得客户请求信息,处理该请求,并通过ServletResponse对象向客户返回响应信息。

 

  对于Tomcat来说,它会将传递过来的参数放在一个Hashtable中,该Hashtable的定义是:

 

private Hashtable<String String[]> paramHashStringArray = new Hashtable<String String[]>();

 

  这是一个String-->String[]的键值映射。

 

  HashMap线程不安全的,Hashtable线程安全。

 

-----------------------------------------------------------------------------------------------------------------------------------

 

Servlet终止阶段:

 

  当WEB应用被终止,或Servlet容器终止运行,或Servlet容器重新装载Servlet新实例时,Servlet容器会先调用Servlet的destroy()方法,在destroy()方法中可以释放掉Servlet所占用的资源。

 

-----------------------------------------------------------------------------------------------------------------------------------

 

Servlet何时被创建:

 

  1,默认情况下,当WEB客户第一次请求访问某个Servlet的时候,WEB容器将创建这个Servlet的实例。

 

  2,当web.xml文件中如果<servlet>元素中指定了<load-on-startup>子元素时,Servlet容器在启动web服务器时,将按照顺序创建并初始化Servlet对象。

 

  注意:在web.xml文件中,某些Servlet只 有<serlvet>元素,没有<servlet-mapping>元素,这样我们无法通过url的方式访问这些 Servlet,这种Servlet通常会在<servlet>元素中配置一个<load-on-startup>子元素,让容 器在启动的时候自动加载这些Servlet并调用init()方法,完成一些全局性的初始化工作。

 

 

 

Web应用何时被启动:

 

  1,当Servlet容器启动的时候,所有的Web应用都会被启动

 

  2,控制器启动web应用

 

-----------------------------------------------------------------------------------------------------------------------------------------------

 

Servlet与JSP的比较:

 

  有许多相似之处,都可以生成动态网页。

 

  JSP的优点是擅长于网页制作,生成动态页面比较直观,缺点是不容易跟踪与排错。

  Servlet是纯Java语言,擅长于处理流程和业务逻辑,缺点是生成动态网页不直观。

分享到:
评论

相关推荐

    Servlet生命周期与工作原理详解

    主要为大家详细介绍了Servlet生命周期与工作原理的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

    Servlet的原理与生命周期

    Java Servlet的原理与生命周期 CGI的工作过程

    servlet运行原理及生命周期.pdf

    servlet运行原理及生命周期

    Servlet 容器工作原理解析

    Web 技术成为当今主流的互联网 Web 应用技术之一,而 Servlet 是 Java Web 技术的... Servlet 容器如何管理 Servlet 生命周期?你还将了解到最新的 Servlet 的 API 的类层次结构,以及 Servlet 中一些难点问题的分析。

    servlet工作原理解析

    servlet 生命周期 原理详解

    servlet 原理

    本文将带你认识 Java Web 技术是如何基于 Servlet 工作,你将知道:以 Tomcat 为例了解 Servlet 容器是如何工作的?一个 Web 工程在 Servlet 容器中是如何启动的?... Servlet 容器如何管理 Servlet 生命周期?

    servlet讲解

    深入的讲解servlet的工作原理和生命周期图示

    基于servlet的执行原理与生命周期(全面解析)

    下面小编就为大家分享一篇servlet的执行原理与生命周期全面解析,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧

    Java Servlet的注解配置与生命周期详解.docx

    执行原理加图解 1.当服务器接受到服务器请求的时候,会先解析浏览器的UPL地址,获取访问服务的路径 2.然后查找WEB.xml文件,查看是否有对应的标签体的内容 3.如果有,则找到对应的全类名 4.tomcat会将字节码文件加载...

    Servlet技术基础知识

    Servlet技术基础知识,工作原理,环境配置,生命周期等详解。

    Servlet课件ppt

    Servlet课件ppt 主要内容:Web应用程序开发过程、Servlet的运行原理、Servlet的生命周期等

    深入Java Servlet网络编程

    2. 1 Servlet生命周期 2. 2 Java Servlet API简介 2. 3 处理表单和返回数据的实例 2. 4 错误处理和日志记录 2. 4. 1 Java中的异常处理机制 2. 4. 2 在Java Servlet中处理异常 2. 4. 3 向浏览器发送标准的HTTP...

    java servlet基础

    知识点:理解Servlet的工作原理以及生命周期。掌握怎样编写和使用Servlet。编写和配置和Servlet有关的web.xml文件 。

    Web服务器的工作原理

    什么是web服务器、应用服务器和web容器? 什么是Servlet?他们有什么作用?...ServletRequest和ServletResponse从哪里进入生命周期? 如何管理Session?知道cookie吗? 如何确保线程安全?

    一篇不错的关于java工作流方面讲解及代码

    2.3.2 JSP的生命周期 8 2.3.3 Servlet和JavaBean技术介绍 8 2.3.4 Java 虚拟机 9 2.3.5 JSP访问SQL Server 2000数据库 9 2.4 数据库后台环境配置 10 2.5 系统开发工具简介 10 2.5.1 Dreamweaver 10 2.5.2 MyEclipse ...

    免费超全面的Java基础类型,容器,并发,IO流,面向对象,Web编程等代码总结

    线程的创建方式与生命周期 线程核心机制,基础概念扩展 多线程并发访问,同步控制 线程间通信,等待/通知机制 锁锁机制,API详解 Fork/Join 框架机制详解 Executor线程池框架简介 面向对象 泛型机制与反射原理 ...

    Java后端学习路线图 - 从入门到工作的全流程 - 适用于在校学生、入门、转行学IT的同学

    - 学习Servlet和JSP:掌握Java Web开发的基本框架,了解Servlet的生命周期和JSP的使用。 3. 数据库与SQL: - 学习关系型数据库:了解数据库的基本概念,学习SQL语言进行数据的增删改查操作。 - 学习MySQL或...

Global site tag (gtag.js) - Google Analytics