Web服务器如何确定哪个Servlet处理请求

1、各种容器与服务器的区别与联系

1.1 容器与服务器的联系

1.2 各种容器的区别/联系

1.3 各种服务器的区别/联系

2、web服务器处理Servlet请求

2.1 处理Servlet请求图解

2.2 处理Servlet请求代码运行过程

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5"><display-name>dubhe</display-name><welcome-file-list><welcome-file>login.jsp</welcome-file></welcome-file-list><servlet><servlet-name>UserInfoLoginServlet</servlet-name><!--step3 --><servlet-class>com.jd.userinfo.UserInfoLoginServlet</servlet-class><!--step4--><!--<load-on-startup>1</load-on-startup>,web项目发布时就创建Servlet实例-->  </servlet><servlet-mapping><servlet-name>UserInfoLoginServlet</servlet-name><!--step2--><url-pattern>/UserInfoLoginServlet</url-pattern><!--step1--></servlet-mapping>
</web-app>

代码执行步骤:

step1:根据客户端发过来的请求,Servlet容器判断是否创建并加载Servlet实例。如果是客户端第一次给服务器发送该Servlet请求时,Servlet容器会加载并创建Servlet实例 ,(注意:默认情况下不是Tomcat服务器或服务器上的Web应用启动的时候加载并实例化Servlet),之后会调用一次init()方法对Servlet实例初始化 。当客户端(可以是非第一次请求的客户端)再次向服务器发送该Servlet请求时,服务器会从内存 。中查找该Servlet实例,并用找到的Servlet实例处理用户请求。
step2:根据URL得到servlet的name;
step3:找到代码中的中与name 相同的那个 标签;
step4:最后根据这行代码找到客户端对应的Servlet

<servlet-class>com.jd.userinfo.UserInfoLoginServlet</servlet-class>

step5执行Servlet中的代码

  • Servlet容器首先会针对该请求创建ServletRequest和ServletResponse对象;
  • 调用Servlet的service()方法并把这两个参数传递给service()方法处理客户端请求;
  • Servlet实例通过ServletRequest对象获得客户端的请求;
  • 通过调用ServletResponse对象的方法进行响应,通过web服务器向客户端返回静态页面;
  • 请求处理完毕,ServletRequest和ServletResponse对象被销毁(销毁的方式:服务器关闭或重新发布项目,都由Servlet容器完成)

如何确定请求的方式是Get还是POST?
不管客户端发送请求的方式是Get还是POST,这个请求都由 service方法来处理。在service方法的处理过程中,会根据客户端发送请求的方式不同,调用 doGet和doPost方法分别进行处理,通过HttpServlet类中的service方法可以了解这一调用过程,如下代码:

protected void service(HttpServletRequest req, HttpServletResponse resp)throws ServletException, IOException {String method = req.getMethod();if (method.equals(METHOD_GET)) {long lastModified = getLastModified(req);if (lastModified == -1) {doGet(req, resp);} else {long ifModifiedSince = req.getDateHeader(HEADER_IFMODSINCE);if (ifModifiedSince < lastModified) {maybeSetLastModified(resp, lastModified);doGet(req, resp);} else {resp.setStatus(HttpServletResponse.SC_NOT_MODIFIED);}}} else if (method.equals(METHOD_HEAD)) {long lastModified = getLastModified(req);maybeSetLastModified(resp, lastModified);doHead(req, resp);} else if (method.equals(METHOD_POST)) {doPost(req, resp);} else if (method.equals(METHOD_PUT)) {doPut(req, resp);} else if (method.equals(METHOD_DELETE)) {doDelete(req, resp);} else if (method.equals(METHOD_OPTIONS)) {doOptions(req,resp);} else if (method.equals(METHOD_TRACE)) {doTrace(req,resp);} else {String errMsg = lStrings.getString("http.method_not_implemented");Object[] errArgs = new Object[1];errArgs[0] = method;errMsg = MessageFormat.format(errMsg, errArgs);resp.sendError(HttpServletResponse.SC_NOT_IMPLEMENTED, errMsg);}}

【参考资料】
[服务器,容器的区别] https://blog.csdn.net/tjiyu/article/details/53148174

Web服务器处理Servlet处理请求过程相关推荐

  1. Web服务器与Servlet容器初步认识

    在本文中,我写了一些关于Web服务器.Servlet容器以及它与JVM的关系的基本概念.我想表达的是,Servlet容器也仅仅不过是一个Java程序. 1. 什么是Web服务器? 想要知道什么是Ser ...

  2. 操作系统:为什么IO操作不占用CPU却会导致进程阻塞?Web服务器每接收一个请求都会创建一个新的线程吗?Tomcat服务器工作原理?

    为什么IO操作不占用CPU却会导致进程阻塞?Web服务器每接收一个请求都会创建一个新的线程吗?这两个问题在我学操作系统以前我都挺困惑的.现在我来尝试着解答一下. 1. 为什么IO操作不占用CPU却会导 ...

  3. Java使用Jetty实现嵌入式Web服务器及Servlet容器

    Jetty是一个Java实现的开源的servlet容器,它既可以像Tomcat一样作为一个完整的Web服务器和Servlet容器,同时也可以嵌入在Java应用程序中,在Java程序中调用Jetty. ...

  4. Web服务器、Servlet和Servlet容器

    Web服务器是向浏览器提供服务的程序.服务器是一种被动的程序,只有当其他计算机的浏览器向它们发出请求时才有所动作.在大多数情况下,这些动作是寻找并发送某个文档给提出请求的浏览器. Servlet是一种 ...

  5. 一、Web服务器——Tomcat Servlet学习笔记

    今日内容 web相关概念回顾 web服务器软件:Tomcat Servlet入门学习 一.web相关概念回顾 软件架构 C/S:客户端/服务器端 B/S:浏览器/服务器端 资源分类 静态资源:所有用户 ...

  6. http模块中创建最基本的web服务器,以及req请求对象和res相应对象

    晚上好啊小伙伴们,最近几天来温度有了很大的回升,能明显感觉到没有那么冷了,现在连刮风都是那种温柔柔的暖风,让人感觉很舒服,最近爱上了打羽毛球,每天晚上都会出去玩儿会儿,然后回去睡觉会睡得非常舒服,也同 ...

  7. Web服务器软件--Servlet入门学习

    Web相关概念 软件架构 1. C/S:客户端/服务器端 2. B/S:浏览器/服务器端 资源分类 静态资源:所有用户访问后,得到的结果都是一样的,称为静态资源.静态资源可以直接被浏览器解析 如: h ...

  8. 服务器自动post,Go Web服务器自动重定向POST请求

    我已经尝试解决一个奇怪的问题了一段时间了.在浏览了许多棱角分明的代码之后,当我通过Charles将请求记录到服务器时,我注意到了一些奇怪的东西. 当我发布到url时/myurl,请求实际上不会到达我的 ...

  9. 命令行CURL教程,可以用来在linux下向web服务器发GET等请求

    CURL? 嗯,说来话长了~~~~ 这东西现在已经是苹果机上内置的命令行工具之一了,可见其魅力之一斑 1) 二话不说,先从这里开始吧! curl http://www.yahoo.com 回车之后,w ...

  10. socket 请求Web服务器过程

    HTTP协议只是一个应用层协议,它底层是通过TCP进行传输数据的.因此,浏览器访问Web服务器的过程必须先有"连接建立"的发生. 而有人或许会问:众所周知,HTTP协议有两大特性, ...

最新文章

  1. HBase参数配置及说明
  2. Windows注册表修改实例完全手册(下)
  3. jsp动作元素include学习
  4. python全排序算法题_Python的100道经典算法题(1)
  5. FFmpeg代码导读系列(一,下半部)----HEVC在RTMP中的扩展
  6. miniob :相关环境配置
  7. python 爬虫 包_Python爬虫包BeautifulSoup实例(三)
  8. 【Node学习】—运行node服务demo
  9. 像MIUI一样做Zabbix二次开发(5)——那些坑和优化方向
  10. Oracle变量的定义、赋值及使用
  11. java 查找链表中间元素,如何找到链表的中间节点?
  12. 源码nginx+php
  13. visual studio 图标_知识内容创作者必会:如何一键获取苹果软件图标?
  14. 垃圾焚烧发电厂如何推行5S/6S/7S管理
  15. 软件工程实训有必要吗_软件工程专业有没有必要考研?
  16. sslpinning实战
  17. bzoj 4134: ljw和lzr的hack比赛 sg函数+字典树
  18. 从全球制造业的迁移史,看中国制造业未来会怎么走?
  19. appium的安装+连接夜神模拟器控制app
  20. 【精讲】vue数据绑定、数据内容的应用、数据结构、数据代理

热门文章

  1. MySQL 5.7: Page Cleaner的刷脏问题
  2. hibernate4.0+版本和3.0+版本的区别总结
  3. 浅析我对代码规范的理解
  4. servlet 与 tomcat版本不匹配的问题
  5. jdk7 HashSet和HashMap源码分析
  6. php类似indexof的方法[转]
  7. 拓端tecdat|R语言分布滞后线性和非线性模型(DLNM)分析空气污染(臭氧)、温度对死亡率时间序列数据的影响
  8. 拓端tecdat|R语言基于线性回归的资本资产定价模型(CAPM)
  9. 拓端tecdat|TensorFlow 2.0 keras开发深度学习模型实例:多层感知器(MLP),卷积神经网络(CNN)和递归神经网络(RNN)
  10. hibernate教程笔记1