分析Servlet运行原理

原文链接:http://www.yiidian.com/servlet/servlet-how-work.html

接下来我们有必要了解下Servlet的工作原理,这样才能更好地理解Servlet。本文我们将以之前开发过的Servlet程序来讲解Servlet的内部细节。

1 Servlet基本执行过程

Web容器(如Tomcat)判断当前请求是否第一次请求Servlet程序 。

如果是第一次,则Web容器执行以下任务:

  • 加载Servlet类。
  • 实例化Servlet类。
  • 调用init方法并传入ServletConfig对象

    如果不第一次执行,则:

  • 调用service方法,并传入request和response对象

    Web容器在需要删除Servlet时(例如,在停止服务器或重新部署项目时)将调用destroy方法。

2 Web容器如何处理Servlet请求

Web容器负责处理请求。让我们看看它如何处理请求。

  • 将用户请求与web.xml文件中的Servlet进行映射。
  • 创建请求和响应对象
  • 创建新的线程,并在该线程上调用Servlet的service方法
  • 在public的service方法内部调用protected的service方法
  • protected的service方法根据请求的类型调用doGet方法。
  • doGet方法生成响应并将其传递给客户端。
  • 发送响应后,Web容器将删除请求和响应对象。该线程是继续留在线程池中还是被删除取决于服务器实现。

3 public的service方法部分源码

public的service方法将ServletRequest对象转换为HttpServletRequest类型,而ServletResponse对象转换为HttpServletResponse类型。然后,调用传递这些对象的服务方法。让我们看一下内部代码:

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

4 protected的service方法部分源码

protected的service方法判断请求的类型,如果请求类型为GET,则调用doGet方法,如果请求类型为POST,则调用doPost方法,依此类推。让我们看一下内部代码:

protected void service(HttpServletRequest req, HttpServletResponse resp)
        throws ServletException, IOException
{
    String method = req.getMethod();
    if(method.equals("GET"))
    {
        long lastModified = getLastModified(req);
        if(lastModified == -1L)
        {
            doGet(req, resp);
        }
....
//rest of the code
    }
}

欢迎关注我的公众号::一点教程。获得独家整理的学习资源和日常干货推送。

如果您对我的系列教程感兴趣,也可以关注我的网站:yiidian.com

原文地址:https://www.cnblogs.com/yiidian/p/12585265.html

时间: 2024-08-03 14:47:24

分析Servlet运行原理的相关文章

Servlet运行原理

一:servlet定义 Servlet是一个Java应用程序,运行在服务器端,用来处理客户端请求并作出响应的程序. (Servlet对象 在Servlet容器启动时被初始化,当第一次被请求时,Servlet容器将其实例化,此时它贮存于内存中. 如果存在多个请求,Servlet不会再被实例化,仍然由此Servlet将其进行处理,每一个请求都是一个线程,而不是进程,因此,Servlet对请求的处理的性能非常高) 对于Servlet,它被设计为多线程的(如果它是单线程的,你就可以想象,当1000个人同

Robotium源码分析之运行原理

从上一章<Robotium源码分析之Instrumentation进阶>中我们了解到了Robotium所基于的Instrumentation的一些进阶基础,比如它注入事件的原理等,但Robotium作为一个测试框架,其功能远不止于只是方便我们注入事件,其应该还包含其他高级的功能,参照我们前面其他框架如MonkeyRunner,UiAutomator和Appium的源码分析,我们知道一个移动平台自动化测试框架的基本功能除了事件注入外起码还应该有控件获取的功能.所以,这篇文章我们主要是围绕Robo

第三天:Servlet运行原理

1.  如何不重启tomcat就可以重新加载一个web应用?? 方法:进入tomcat的manager之后点击reload即可. 2.开发一个Servlet,该Servlet可以输出自己的名字并显示当前的日期. A.在tomcat中的webapps下面建立相关目录,web.xml配置文件和output.java类 B.编写output.java文件 C.在web.xml中部署该web应用 D.编译该output.java E.在浏览器中测试 3.Servlet的生命周期(Servlet究竟是怎样

Servlet工作原理分析

最近在看<Java Web技术内幕>的Servlet工作原理,有点深奥和难以理解,于是乎,想通过一个简单的Demo将书上的思路理一遍,对Servlet有个更透彻更深的了解. Servlet类:HelloWorld.java package com.cqupt; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletReq

Servlet的生命周期与运行原理

Servlet的生命周期:    1 加载classLoader    2 实例化 new    3 初始化 init(ServletConfig)    4 处理请求 service doGet doPost    5 退出服务 destroy() 整个过程中只有一个对象API中的过程:    init()只执行一次,第一次初始化的时候     public void init(ServletConfig config) throws ServletException    public vo

可对Python运行原理进行可视化分析的工具

Python Tutor Python Tutor是一个对Python运行原理进行可视化分析的工具,网址为: http://www.pythontutor.com 使用范例 参考链接 原文地址:https://www.cnblogs.com/jiangling500/p/8353607.html

tensorflow运行原理分析(源码)

tensorflow运行原理分析(源码)  https://pan.baidu.com/s/1GJzQg0QgS93rfsqtIMURSA 原文地址:https://www.cnblogs.com/liuzhongfeng/p/8778422.html

Servlet工作原理(转)

Servlet运行在Servlet容器中,由容器负责Servlet实例的查找及创建工作,并按照Servlet规范的规定调用Servlet的一组方法,这些方法也叫生命周期的方法.具体调用过程如下图所示: Servlet生命周期详解 如上图所示,Servlet的生命周期可以分为四个阶段,即装载类及创建实例阶段.初始化阶段.服务阶段和实例销毁阶段.下面针对每个阶段的编程任务及注意事项进行详细的说明. (1)装载类及创建实例 客户端向Web服务器发送一个请求,请求的协议及路径必须遵守如下的格式:    

【Tomcat】Servlet 工作原理解析

Web 技术成为当今主流的互联网 Web 应用技术之一,而 Servlet 是 Java Web 技术的核心基础.因而掌握 Servlet 的工作原理是成为一名合格的 Java Web 技术开发人员的基本要求.本文将带你认识 Java Web 技术是如何基于 Servlet 工作,你将知道:以 Tomcat 为例了解 Servlet 容器是如何工作的?一个 Web 工程在 Servlet 容器中是如何启动的? Servlet 容器如何解析你在 web.xml 中定义的 Servlet ?用户的请