从tomcat说起全面理解Java web开发原理

简介:Java开发分为Java ME,Java SE,Java EE。回顾过去这些的开发工作基本上都是围绕着Java EE的,在开发经历中分别经历了Java EE开发框架从jsp servlet一路经历了ssh, ssm, springboot mybatis ,spring cloud演化,但是Java web开发过程中web容器却是一路相随tomcat,本篇文章将从tomcat的角度介绍一下http请求的整个链路。

一、servlet

无论是最初的jsp + servlet方式还是现如今的spring boot,web系统都需要基于web服务器才能处理用户请求,Tomcat 是一个免费的、开源的、轻量级的Java Web 应用服务器,Java为了web系统定义了一套servlet规范,tomcat就是遵守servlet规范的servlet容器。

百科的介绍:Servlet是在服务器上运行的小程序。一个Servlet就是一个Java类,并且可以通过“请求-响应”编程模型来访问的这个驻留在服务器内存里的Servlet程序。一般由web容器(例如tomcat)来管理servlet的生命周期。

Servlet定义了如下的规范:

Servlet生命周期:

1.调用 init() 方法初始化
2.调用 service() 方法来处理客户端的请求
3.调用 destroy() 方法释放资源,标记自身为可回收
4.被垃圾回收器回收

二、tomcat

核心功能:分别是负责接收和反馈外部请求的连接器 Connector,和负责处理请求的容器 Container。其中连接器和容器相辅相成,一起构成了基本的 web 服务 Service。每个 Tomcat 服务器可以管理多个 Service。

Tomcat 作为Servlet容器,负责处理客户端请求,把请求传送给Servlet,并将Servlet的响应传送回给客户。Servlet不能独立运行,它必须被部署到Servlet容器中,由容器来实例化和调用 Servlet的方法(如doGet()和doPost()),由Servlet容器管理Servlet的生命周期。

Tomcat处理请求的过程如下:

  1. 浏览器在请求一个Servlet时,会按照HTTP协议构造一个HTTP请求,通过Socket连接发送给Tomcat
  2. Tomcat通过不同的IO模型都可以接收到Socket的字节流数据
  3. 接收到数据后,按HTTP协议解析字节流,得到HttpServletRequest对象
  4. 再通过HttpServletRequest对象,也就是请求信息,找到该请求对应的Host、Context、Wrapper
  5. 然后将请求交给Engine层处理
  6. Engine层处理完,就会将请求交给Host层处理
  7. Host层处理完,就会将请求交给Context层处理
  8. Context层处理完,就会将请求交给Wrapper层处理
  9. Wrapper层在拿到一个请求后,就会生成一个请求所要访问的Servlet实例对象
  10. 调用Servlet实例对象的service()方法,并把HttpServletRequest对象当做入参
  11. 从而就调用到Servlet所定义的逻辑

Tomcat核心组件如下图所示;

三、spring MVC

之前写过一篇【三】SpringMVC-执行流程_张狂年少的博客-CSDN博客,这里将重点讲解一下在spring boot微服务架构的方案下http请求是如何到达dispatcherServlet,mvc框架有Struts1,Struts2,spring mvc等,这些框架实际都是一个Servlet,由于spring mvc和spring框架能够无缝集成,并且伴随着spring 不断发展,所以目前spring mvc逐渐替代了其他的产品。

首先我们看一下spring mvc的核心结构图:

没有spring boot之前我们都需要配置一下web.xml,如下所示:

<servlet>
    <servlet-name>springMVC</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
</servlet>

<servlet-mapping>
    <servlet-name>springMVC</servlet-name>
    <url-pattern>/</url-pattern>
</servlet-mapping>
现在在spring boot项目中没有web.xml文件,那我们如何去配置一个DispatcherServlet?

这个大家可以去了解一下spring boot的自动装配原理。

spring boot 内置了tomcat,开发web系统需要引入如下包:

可以看到该starter引入了如下包:

当项目启动之后tomcat开始处理请求,由上文介绍的Tomcat处理请求的过程可知,tomcat负责管理servlet。Frameworkservlet 重写 service方法:

这里关注一下

this.processRequest(request, response);

在这个方法里面调用了

this.doService(request, response);

同时DispatcherServlet中实现了doService方法,由此我们找到了http请求是如何到达dispatcherServlet的方式。

总结:本篇文章主要是从tomcat说起全面理解Java web开发原理,Java web开发技术栈一直在升级迭代,但是web容器一直都没有变,我们只有深入理解web容器的原理才能透彻的理解Java web项目运行的原理。

从tomcat说起全面理解Java web开发原理相关推荐

  1. 追新求快的时代,别让 Java Web 开发必备工具 Tomcat 变成“熟悉的陌生人”!

    作者 | 码哥字节 来源 | MageByte技术团队 Tomcat 发展这么多年,已经比较成熟稳定.在如今『追新求快』的时代,Tomcat 作为 Java Web 开发必备的工具似乎变成了『熟悉的陌 ...

  2. Eclipse 3.5 Classic+Tomcat 6.0+MySql 5.5搭建java web开发环境

    Eclipse 3.5 Classic+Tomcat 6.0+MySql 5.5搭建java web开发环境 对于初学者来说,如果没有接触过java web开发的话,搭建开发环境将是一个门槛.以前一直 ...

  3. 读《Tomcat与Java Web开发技术详解》

    作 者: 孙卫琴, 李洪成 编著 出 版 社: 电子工业出版社 出版时间: 2004-4-1 字 数: 723200 版 次: 1 页 数: 438 印刷时间: 2004/04/01 开 本: 印 次 ...

  4. Java Web开发API Boy如何进阶?

    导语 | Java Web后台开发基本都离不开Spring生态这一套,Spring框架功能极其强大,会帮忙做许多工作,我们通常只需要在一个函数(包含request和response两个入参)中写处理逻 ...

  5. java私塾 设计模式 视频_[章节]Java Web开发理论部分视频教程 之 04 mvc设计模式详解视频教程 - 我的学习中心 - 私塾在线 - 只做精品视频课程服务...

    第01节课:进行整体课程概览:复习事件机制:复习表现层的功能:复习表现层的开发 第02节课:Web应用的基础知识,包括:Internet.Http.IP.Port.MIME规范.Web客户端和服务端. ...

  6. java web开发学习总结

    java web 开发基础内容理解 解决中文乱码问题 请求参数乱码 输出乱码 jsp的运行原理 GET请求和POST请求的区别 静态包含和动态包含 静态包含 动态包含 两者的区别 Cookie和Ses ...

  7. Java Web开发实战经典 李兴华版 读书笔记(一)

    有的时候总感觉读书没有效率,或是记不住,或是不能专注.所以,把读的书都做一个笔记.贴上来.方便日后回顾. 本人java后端开发,大概算个中级程序员.所以笔记中的难易程度都是根据我自身水平的判断. 看完 ...

  8. 零基础学java web开发_从零基础学Java成为一个专业的java web 开发者

    原标题:从零基础学Java成为一个专业的java web 开发者 "我怎么才能成为一个Java Web开发者?"对于这个问题,答案其实并不简单.成为一个Java Web开发人员包括 ...

  9. 名师讲坛——Java Web开发实战经典基础篇(JSP、Servlet、Struts、Ajax)

    [书名]<名师讲坛--Java Web开发实战经典基础篇(JSP.Servlet.Struts.Ajax)> [作者]李兴华.王月清 [ISBN]9787302231585 ­}:YKf: ...

最新文章

  1. 忘记Windows系统密码不用急 这个办法轻松帮你破解
  2. HDOJ1016 素数环(DFS)
  3. 识别强直性脊柱炎高效和疾病特定的基质改变
  4. PyQt5 技巧篇-按钮竖排显示方法,Qt Designer设置按钮竖排显示。
  5. 编程笔试(解析及代码实现):字符串反转(字符串逆序输出)代码实现十多种方法对比(解析思路及其耗费时间)详细攻略
  6. 数据库之事务及事务的 ACID 性质
  7. 写给大数据开发初学者的话2
  8. Codeforces Round #702 (Div. 3)解题报告
  9. docker push到私有仓库、pull
  10. linux查看tomcat版本信息,linux下tomcat版本查看
  11. 朴素贝叶斯+拉普拉斯平滑代码实现-方法二
  12. 【WPS】excel 使用MD5宏 windows环境
  13. 基于QT的IM(jabber)库和客户端
  14. 语音搜索的基础-语音识别
  15. 教你如何搜索百度网盘的资源 百度网盘资源搜索方法!
  16. 同一个元素绑定多个onclick事件
  17. Cura切片3d打印设置
  18. 在部队当程序员是什么体验?
  19. python成语接龙
  20. 建立桌面文件管理格子_让你的电脑桌面井井有条,3款桌面整理工具推荐

热门文章

  1. 2022如何对接三方支付通道
  2. 百度地图API - 企业位置定位
  3. 如何修改TOMCAT的默认主页为自己项目的主页
  4. mybatisplus解决分页最多500条数据
  5. 15款很棒的 JavaScript 开发工具
  6. 小程序-图片/文件本地缓存,减少CDN流量消耗
  7. 画画时如何把阴影画好
  8. Jquery换肤效果
  9. 【Account】登录过程繁琐造成用户流失?华为帐号让应用获客更简单!
  10. 3310复刻版 java_情怀满满的经典之作 诺基亚3310复刻版评测体验