目录

一、servlet 单例模式:

二、servlet的请求流程:

★ 流程:

★ 详细过程如下:


一、servlet 单例模式:

tomcat服务器,通过Java的反射机制来自动调用servlet的init、service过程中,利用了反射机制,在创建servlet对象之前,先在以map为数据结构的cache缓存池中,判断是否已经存在servlet对象

-------存在直接使用缓存池的servlet对象,不存在才创建一个servlet对象,然后添加进servlet的缓存池单例的原理

--------然后判断是利用map的key 是否相同,其中key就是servlet 的全限定名称的别名(String),value是servlet的全限定名称。


二、servlet的请求流程:

流程

发送请求 -》②域名解析 -》③tomcat 服务器解析请求【上下文、资源名】

-》④上下文的匹配【server.xml文件的上下文标签<Context>的path

-》⑤资源名的匹配【Context的属性docBase值---web.xml文件的匹配规则标签<url-pattern>】,找不到(404)找到了就获取到Servlet类的全限定名

-》⑥使用servlet对象【判断Servlet缓存池是否已经存在(全限定名为**)servlet对象】,不存在(第一次请求),创建(全限定名为**) servlet对象并存储到缓存池,存在,直接使用该servlet对象

-》⑦ 初始化操作【Tomcat-web容器创建servlet配置对象ServletConfig,并调用init方法

-》⑧创建请求和响应对象并在service方法处理请求。【web容器创建请求和响应对象ServletRequest和ServletResponse 对象调用service方法处理请求和做出响应】


★ 详细过程如下:

1、浏览器发送请求http://localhost:8080/day2/hello

2、DNS域名解析【本地host文件进行域名解析,找不到,再通过域名解析服务器进行解析】

3、Tomcat 服务器进行解析请求:/day2/hello

上下文路径:/day2

资源名称:/hello

4、首先进行上下文路径的匹配:

① 解析Tomcat根/conf/server.xml文件,获取所有的<Context/>元素,遍历匹配找到path属性为/day2的元素。

② 再读取该<Context/>元素的docBase属性值【当前访问的Web项目的根路径

5、其次进行资源名的匹配:

从该Web项目的根路径/WEB-INF 下找到web.xml 文件,读取该web.xml 文件,获取所有的<url-pattern>元素,遍历匹配找到<url-pattern>的文本内容是/hello的:

  • 找不到:404
  • 找到了:-> 6

6、然后便找到当前的Servlet 的全限定名:com.shan.hello.HelloServlet

7、从Servlet的实例缓冲池中去获取全限定名为com.shan.hello.HelloServlet的对象:[缓冲池使用map数据结构]

Map<String, Servlet> cache = …;

Servlet obj = cache.get("com.shan.hello.HelloServlet");

if(obj == null){

  ->8

  ->10

}

8、使用反射创建Servlet对象并存储到缓存池中,供下一次请求使用

Servlet obj = Class.forName("com.shan.hello.HelloServlet").newInstance();

cache.put("com.shan.hello.HelloServlet", obj);

9、初始化:Tomcat-web容器创建servlet配置对象ServletConfig,并调用init方法,完成初始化操作。

obj.init(config);

10、web容器创建请求和响应对象ServletRequest和ServletResponse 对象,并调用service方法处理请求,在service方法中对当前请求的客户端做出响应。

obj.service(req, resp);

servlet单例模式以及servlet的请求流程的更多相关文章

  1. Servlet简介与Servlet和HttpServlet运行的流程

    1.Servlet      [1] Servlet简介         > Server + let         > 意为:运行在服务器端的小程序.         > Ser ...

  2. Servlet 服务器性能提高--->数据库请求频率控制(原创)

    首先我要说下我实现这个功能接口涉及到的业务和实现的详细流程,然后会说此接口涉及到的相关技术,最后会贴出注释后的详细代码, 这个接口涉及到的是 app上咻一咻功能,咻一咻中奖的奖品一共有七类,其中四类是 ...

  3. Servlet、Struts2、SpringMVC执行流程

    Servlet 有以下四个阶段: 1.加载和实例化 Servlet容器负责加载和实例化Servlet. 当Servlet容器启动时,或者在容器检测到需要这个Servlet来响应第一个请求时,创建Ser ...

  4. Servlet(五):请求转发和重定向

    请求转发: 问题: 服务器在接收到浏览器的请求后,仅仅使用一个 Servlet进行请求处理,会造成不同的Servlet逻辑代码 冗余,Servlet的职责不明确. 解决: 使用请求转发. 特点: 一次 ...

  5. 【Servlet】JavaWeb应用的执行流程

    Tomcat与Servlet简介 Tomcat Tomcat是Apache 软件基金会(Apache Software Foundation)的Jakarta 项目中的一个核心项目,由Apache.S ...

  6. Servlet交互【重定向 与 请求分派】详解

    Servlet交互 在serlvet中,需要调用另外一个资源来对浏览器的请求进行响应,两种方式实现: 调用HttpServletResponse.sendRedirect 方法实现 重定向 调用Req ...

  7. servlet及jsp之间的请求转发

    1.servlet间的请求转发 <dependencies> <dependency> <groupId>javax.servlet</groupId> ...

  8. jsp当做第二个servlet request的生命周期 请求 响应 不管中间经历多少个servlet 只要最后一个serlvt执行后 则生命周期结束 request的域消失

    jsp当做第二个servlet  request的生命周期   请求 响应  不管中间经历多少个servlet 只要最后一个serlvt执行后 则生命周期结束  request的域消失

  9. Servlet单例模式(注意)

    package com.servlet; import java.io.IOException; import javax.servlet.ServletException; import javax ...

随机推荐

  1. 【剑指Offer】数字在排序数组中出现的次数 解题报告(Python)

    [剑指Offer]数字在排序数组中出现的次数 解题报告(Python) 标签(空格分隔): 剑指Offer 题目地址:https://www.nowcoder.com/ta/coding-interv ...

  2. 图的存储:邻接矩阵(C++)

    1. 演示 无向图: 有向网: 2. 代码 1 #include <iostream> 2 #include <unordered_map> 3 #include <ve ...

  3. nodejs创建一个简单的web服务

    这是一个突如其来的想法,毕竟做web服务的框架那么多,为什么要选择nodejs,因为玩前端时,偶尔想调用接口获取数据,而不想关注业务逻辑,只是想获取数据,使用java或者.net每次修改更新后还要打包 ...

  4. SpringBoot 之 国际化

    增加国际化i18n语言配置: # src/main/resources/i18n/login.properties login.btn=登录 # src/main/resources/i18n/log ...

  5. Lombok 安装配置及使用方法

    pom.xml 引入依赖 <!-- https://mvnrepository.com/artifact/org.projectlombok/lombok --> <!--Feb 0 ...

  6. 字母 Letters

    D. 字母 Letters 内存限制:256 MiB 时间限制:500 ms 标准输入输出 题目类型:传统 评测方式:文本比较 题目描述 给定两个长度相同且由大写英文字母组成的字符串 A 和 B,保证 ...

  7. SQL高级优化(三)之存储引擎

    一.MySQL数据库引擎简介 1. ISAM(indexed Sequential Access Method) ​ ISAM 是一个定义明确且历经时间考验的数据表格管理方法,它在设计之时就考虑到数据 ...

  8. 使用altium designer 21极坐标绘制异形焊盘 比如焊接螺母的 环绕焊盘

    先看一张图 在回流焊时,不能直接做一个大圆圈焊盘来焊接螺母,这样焊锡膏因为流动问题,可能会导致螺母歪斜 厂家推荐的焊盘形状右上角 所以 需要绘制异形焊盘 首先进入ad的封装库工作界面 在库中点右下角P ...

  9. 机器学习|线性回归三大评价指标实现『MAE, MSE, MAPE』(Python语言描述)

    原文地址 ?传送门 对于回归预测结果,通常会有平均绝对误差.平均绝对百分比误差.均方误差等多个指标进行评价.这里,我们先介绍最常用的3个: 平均绝对误差(MAE) 就是绝对误差的平均值,它的计算公式如 ...

  10. Vue3项目的简单搭建与项目结构的简单介绍

    Vue3项目的创建与运行 本文记录下自己近期学习的Vue3项目的创建,以及如何去运行一个Vue应用,同时包括对Vue项目结构进行一个简单的介绍. 一.node与npm的安装 通常平常进行开发的同学应该 ...