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

}

}

以上就是Java Servlet 运行原理分析的详细内容,更多关于Java Servlet 运行原理的资料请关注脚本之家其它相关文章!

java启动servlet_Java Servlet 运行原理分析相关推荐

  1. Servlet运行原理以及生命周期

    Servlet运行原理 Servlet生命周期定义了一个Servlet如何被加载.初始化,以及它怎样接收请求.响应请求,提供服务.在讨论Servlet生命周期之前,先让我们来看一下这几个方法: 1. ...

  2. java并发包线程池原理分析锁的深度化

    java并发包&线程池原理分析&锁的深度化 并发包 同步容器类 Vector与ArrayList区别 1.ArrayList是最常用的List实现类,内部是通过数组实现的,它允许对元素 ...

  3. Web开发基础_Servlet学习_0011_Servlet中的多线程安全问题与Servlet运行原理

    Servlet中的多线程安全问题 Servlet运行原理 Servlet中的多线程安全问题 演示 案例演示: 工程案例目录结构 pom.xml: <project xmlns="htt ...

  4. Servlet 运行原理

    文章目录 Servlet 如何运行 演示 Servlet 运行原理 Servlet 如何运行 用户向浏览器地址栏输入:http://ip:port/helloweb/sayHello?name=zs ...

  5. java能够运行的原理_JAVA程序运行原理分析(一)

    作为JAVA的开发人员,需要知道JAVA是如何运行的,这个需要好好思考下. (一)class文件内容 class文件包含JAVA程序执行的字节码,也就是说程序的执行是通过class里面的内容进行执行的 ...

  6. Java 重入锁 ReentrantLock 原理分析

    1.简介 可重入锁ReentrantLock自 JDK 1.5 被引入,功能上与synchronized关键字类似.所谓的可重入是指,线程可对同一把锁进行重复加锁,而不会被阻塞住,这样可避免死锁的产生 ...

  7. Android 兼容 Java 8 语法特性的原理分析

    本文主要阐述了Lambda表达式及其底层实现(invokedynamic指令)的原理.Android第三方插件RetroLambda对其的支持过程.Android官方最新的dex编译器D8对其的编译支 ...

  8. java8 lambda map排序_Android兼容Java 8语法特性的原理分析

    本文主要阐述了Lambda表达式及其底层实现(invokedynamic指令)的原理.Android第三方插件RetroLambda对其的支持过程.Android官方最新的dex编译器D8对其的编译支 ...

  9. laravel $request 多维数组取值_Laravel 运行原理分析与源码分析,底层看这篇足矣

    精选文章内容 一.运行原理概述 laravel的入口文件 index.php 1.引入自动加载 autoload.php 2.创建应用实例,并同时完成了: 基本绑定($this.容器类Containe ...

最新文章

  1. 【springboot】入门
  2. SQLServer的数据类型
  3. 计算机处理信息的方式
  4. EXCEL_CLASS
  5. mysql联合索引的数据结构
  6. .NET Core中使用结果过滤器ResultFilter统一结果返回封装
  7. Java LocalDate类| ofYearDay()方法与示例
  8. 重温数据结构:树 及 Java 实现(转)
  9. iPhone 13及12推动,机构预计苹果今年将销售近2亿部5G iPhone
  10. 基于CNN的IMDB电影数据集文本分类
  11. IT人员升职必会的软技能
  12. 苹果开发者账户创建流程
  13. Fluent UDF 获取组分传输模型中的摩尔分数或分压力
  14. 显著性检验【t-test、方差分析、ks检验】
  15. import tensorflow_addons报错
  16. 未来两周目标计划---C++ and Disassembly(不积跬步无以至千里,不积小流无以成江海)...
  17. SE0--搜索引擎网站收录大全--博客推广
  18. eps矢量图在word中的使用
  19. 2021年彬州范公中学高考成绩查询,紧急通知:请为彬州中学、范公中学等参加高考的孩子扩散这条信息!...
  20. java校院导游程序课程设计_数据结构课程设计之校园导游系统

热门文章

  1. 华为鸿蒙系统学习笔记10-华为鸿蒙 OS 2.0 发布,源代码现已开放
  2. 标题文字超出2行 则隐藏后面显示省略号
  3. 「雕爷学编程」Arduino动手做(26)——4X4矩阵键盘模块
  4. Springboot利用poi导出excel下载
  5. 第二阶段个人博客总结7
  6. servlet串行拦截器实现例子
  7. MapReduce学习笔记(4)
  8. Project Server 2010 好难装阿!
  9. MySql 你知道什么情况下适合使用Join 联表查询吗 ?
  10. Android中视图重绘的方法