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

从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项目运行的原理。

  • 4
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值