| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> Java知识库 -> servlet单例模式以及servlet的请求流程 -> 正文阅读 |
|
[Java知识库]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的:
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 }else{ ? ? ? ? //不是第一次请求,使用已经Servlet实例缓冲池中已经存在的Servlet对象…->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); |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/24 11:54:33- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |