centos7 如何重启web服务_Web应用是如何提供服务的(一)?

ec67e42c1b876d625b0929b8945321a3.png

随着编程经验的不断丰富,我们也需要扩大自己的知识边界。知识边界就像是你的护城河,护城河越宽,你在职场上就更加安全。

在之前的一篇文章SSM框架的执行流程中,我讲解了一道常见的面试题目:SSM框架是如何处理用户请求的?细心的读者会发现,在那篇文章中,我把用户请求和系统的交互边界定义在了前端控制器DispatcherServlet上,而在那之前的部分我并没有提及。今天,我们就来扩大这个边界、以更广阔的视角来思考:使用SSM框架开发的Web应用到底是如何提供服务的?


写这个问题的初衷是,最近某些小伙伴在面试过程中被问到:你的Web应用是怎么启动的?小伙伴一瞬间卡住了,这要怎么回答?在我看来,你至少可以回答一句话:是通过Web容器启动的。这个回答虽然正确,但显然不能让人满意。

在Java中讲Web服务,要从Servlet说起。下面是J2EE文档对Servlet的解释:

A servlet is a small Java program that runs within a Web server. Servlets receive and respond to requests from Web clients, usually across HTTP, the HyperText Transfer Protocol.
Servlet是一个运行在Web服务器内部的小Java程序。Servlet接收来自客户端的请求并作出响应,通常是基于HTTP协议。

Servlet这个名词除了表示一个具有特定功能的程序组件,也作为一个Java接口存在。下面是对其接口功能的描述:

This interface defines methods to initialize a servlet, to service requests, and to remove a servlet from the server.
Servlet接口中定义了一些方法,包括:初始化当前Servlet的方法,提供服务的方法以及销毁当前Servlet的方法。

可见,在Servlet接口中,代表其主要功能的就是三个方法:初始化方法、如何提供服务的方法、以及销毁方法。而程序员要做的就是根据业务情况定制这三个方法。当实现好这三个方法,Servlet就可以工作了,它的流程是这样的:

1. The servlet is constructed, then initialized with the init method. 2. Any calls from clients to the service method are handled. 3. The servlet is taken out of service, then destroyed with the destroy method, then garbage collected and finalized.
1. 使用init方法初始化Servlet。 2. 使用service方法处理客户端请求。 3. 使用destroy方法销毁Servlet。

(插一句,在我看来上面简短的介绍中涉及两道面试小题。1. Servlet是什么?2. Servlet的生命周期是怎样的?)

别看Servlet的定义这么简单,但我们今天所看到的错综复杂的Java Web系统本质上都是一个个Servlet支撑起来的。在上文中有一句话很关键,Servlet是一个运行在Web服务器内部的小Java程序。可见,Servlet的运行是需要环境的,而Web服务器就是这个环境。我们以一个经典的Web服务器Tomcat为例,描述一下Tomcat容器处理一个请求的过程。

31f3f0cb34feacf93dad8e13d7c0eac2.png

当用户发起一个请求到http://localhost:8080/myapp/showMsg.jsp时,处理流程是这样的:

1. 请求被发送到本机的8080端口,被在那里监听的Connector捕获到。
2. Connector把该请求交给它所在Service的Engine来处理,并等待Engine的响应。
3. Engine获得请求localhost /myapp/showMsg.jsp,并找出匹配localhost域名的虚拟主机Host。
4. Host获得请求 /myapp/showMsg.jsp,并找出其内部匹配 myapp的应用Context。(正常情况下,一个Context对应一个应用app)
5. Context找到其内部能够处理showMsg.jsp页面的Servlet。构造ServletRequest对象和ServletResponse对象,把以此作为参数调用对应Servlet的service方法。
6. 接下来就是执行service方法了,service方法是开发者针对指定业务问题开发的解决方案。 它从ServletRequest对象中获取请求信息,并将处理结果以ServletResponse对象的形式返回。
7. Servlet将ServletResponse对象返回给对应的Context。
8. Context将ServletResponse对象返回给对应的Host。
9. Host将ServletResponse对象返回给对应的Engine。
10. Engine将ServletResponse对象返回给对应的Connector。
11. Connector将ServletResponse对象返回给对应的请求客户端(客户端通常为浏览器)。

(插一句,Tomcat的架构在此不再赘述,网络上有很多写的很好的博文)

从Tomcat容器处理用户请求的过程中,可以看到,Servlet从开发完成到真正对外提供服务,中间还有许多过程需要处理。只不过J2EE完整的生态提前帮助我们解决掉了这些问题。但作为一个合格的开发者,尤其是后端开发者,这些问题是不可不知的。

因为Web的本质是接收用户请求,并对其作出响应。我们需要能够清晰的描述,从用户在浏览器上点击某个图标开始,一直到浏览器展示出用户想要看到的界面,这个过程中所发生的每一个环节。


读完这篇文章,并结合之前的文章《SSM框架的执行流程》。从Tomcat容器接收用户请求开始,到Tomcat容器响应用户请求为止,你能描述清楚Web应用的执行流程吗?@E-臻。一个介绍Java学习路线的Live:(已有3500+人收听,5200+人支持)

学习Java,我建议这样做​www.zhihu.com​www.zhihu.com
52a8910920c251eea364161da1d3423e.png

一个介绍入门云计算的Live:(通俗易懂的云计算知识,怎么可以不了解?)

入门云计算:你该了解的那些事儿​www.zhihu.com
52a8910920c251eea364161da1d3423e.png
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值