java启动servlet_Java 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
}
}
以上就是Java Servlet 运行原理分析的详细内容,更多关于Java Servlet 运行原理的资料请关注脚本之家其它相关文章!
java启动servlet_Java Servlet 运行原理分析相关推荐
- Servlet运行原理以及生命周期
Servlet运行原理 Servlet生命周期定义了一个Servlet如何被加载.初始化,以及它怎样接收请求.响应请求,提供服务.在讨论Servlet生命周期之前,先让我们来看一下这几个方法: 1. ...
- java并发包线程池原理分析锁的深度化
java并发包&线程池原理分析&锁的深度化 并发包 同步容器类 Vector与ArrayList区别 1.ArrayList是最常用的List实现类,内部是通过数组实现的,它允许对元素 ...
- Web开发基础_Servlet学习_0011_Servlet中的多线程安全问题与Servlet运行原理
Servlet中的多线程安全问题 Servlet运行原理 Servlet中的多线程安全问题 演示 案例演示: 工程案例目录结构 pom.xml: <project xmlns="htt ...
- Servlet 运行原理
文章目录 Servlet 如何运行 演示 Servlet 运行原理 Servlet 如何运行 用户向浏览器地址栏输入:http://ip:port/helloweb/sayHello?name=zs ...
- java能够运行的原理_JAVA程序运行原理分析(一)
作为JAVA的开发人员,需要知道JAVA是如何运行的,这个需要好好思考下. (一)class文件内容 class文件包含JAVA程序执行的字节码,也就是说程序的执行是通过class里面的内容进行执行的 ...
- Java 重入锁 ReentrantLock 原理分析
1.简介 可重入锁ReentrantLock自 JDK 1.5 被引入,功能上与synchronized关键字类似.所谓的可重入是指,线程可对同一把锁进行重复加锁,而不会被阻塞住,这样可避免死锁的产生 ...
- Android 兼容 Java 8 语法特性的原理分析
本文主要阐述了Lambda表达式及其底层实现(invokedynamic指令)的原理.Android第三方插件RetroLambda对其的支持过程.Android官方最新的dex编译器D8对其的编译支 ...
- java8 lambda map排序_Android兼容Java 8语法特性的原理分析
本文主要阐述了Lambda表达式及其底层实现(invokedynamic指令)的原理.Android第三方插件RetroLambda对其的支持过程.Android官方最新的dex编译器D8对其的编译支 ...
- laravel $request 多维数组取值_Laravel 运行原理分析与源码分析,底层看这篇足矣
精选文章内容 一.运行原理概述 laravel的入口文件 index.php 1.引入自动加载 autoload.php 2.创建应用实例,并同时完成了: 基本绑定($this.容器类Containe ...
最新文章
- 【springboot】入门
- SQLServer的数据类型
- 计算机处理信息的方式
- EXCEL_CLASS
- mysql联合索引的数据结构
- .NET Core中使用结果过滤器ResultFilter统一结果返回封装
- Java LocalDate类| ofYearDay()方法与示例
- 重温数据结构:树 及 Java 实现(转)
- iPhone 13及12推动,机构预计苹果今年将销售近2亿部5G iPhone
- 基于CNN的IMDB电影数据集文本分类
- IT人员升职必会的软技能
- 苹果开发者账户创建流程
- Fluent UDF 获取组分传输模型中的摩尔分数或分压力
- 显著性检验【t-test、方差分析、ks检验】
- import tensorflow_addons报错
- 未来两周目标计划---C++ and Disassembly(不积跬步无以至千里,不积小流无以成江海)...
- SE0--搜索引擎网站收录大全--博客推广
- eps矢量图在word中的使用
- 2021年彬州范公中学高考成绩查询,紧急通知:请为彬州中学、范公中学等参加高考的孩子扩散这条信息!...
- java校院导游程序课程设计_数据结构课程设计之校园导游系统