【java开发通识篇】之一分钟搞懂 web服务器、servlet、tomcat

667 阅读5分钟

前言: web服务器、tomcat、servlet这些东西是一个合格java开发工程师必须要掌握的知识,因为容易混淆和疑惑,狐狸将自己的理解都写下来,此文章仅代表鄙人的总结和理解,如有错漏,欢迎指正...

一:web服务器是什么?

通俗点来说web服务器的作用就是用户通过浏览器向web服务器发送http请求,web服务器解析http请求将请求路径的文件返回给浏览器,浏览器再将文件渲染显示给我们看,因此web服务器的作用就是返回服务端的静态文件。

二:servlet是什么?

Servlet简介

Servlet是sun公司提供的一门用于开发动态web资源的技术。
Sun公司在其API中提供了一个servlet接口,用户若想开发一个动态web资源(即开发一个Java程序向浏览器输出数据),需要完成以下2个步骤:
  1、编写一个Java类,实现servlet接口。
  2、把开发好的Java类部署到web服务器中。
按照一种约定俗成的称呼习惯,通常我们也把实现了servlet接口的java程序,称之为Servlet

看这些名词解释可能大家还是比较迷糊,那么我就再通俗一点的解释:
在用Eclipse搭建SSM项目的时候,不知道大家有没有导入过Servlet-api的jar包呢?这个实际上就是servlet以及它的实现。可以看到javax.servlet下的Servlet接口里面有Servlet的生命周期方法。


而javax.servlet.http下的就是基于http通信实现的servlet。而在tomcat的根目录的lib文件夹下也有servlet-api这个jar包,因此在tomcat运行应用程序时我们就不需要额外导入这个jar包了。


可以看到HttpServlet接口就定义了我们熟悉的一些http请求方法。


所以,总结一句:Servlet可以理解为就是一个咱们程序员开发的web项目程序

Servlet的运行过程

Servlet程序是由WEB服务器调用,web服务器收到客户端的Servlet访问请求后:

1.Web服务器首先检查是否已经装载并创建了该Servlet的实例对象。如果是,则直接执行第4步,否则,执行第2步。  2.装载并创建该Servlet的一个实例对象。   
3.调用Servlet实例对象的init()方法。  
4.创建一个用于封装HTTP请求消息的HttpServletRequest对象和一个代表HTTP响应消息的HttpServletResponse对象,然后调用Servlet的service()方法并将请求和响应对象作为参数传递进去。  
5.WEB应用程序被停止或重新启动之前,Servlet引擎将卸载Servlet,并在卸载之前调用Servlet的destroy()方法。

   Servlet调用图:

Servlet生命周期:

servlet被服务器实例化-->容器运行init方法-->处理请求service()-->摧毁实例destroy()
注意: 在servlet的整个生命周期当中,init,destroy只会执行一次,而service方法会执行多次

三:tomcat是什么?

了解了什么是servlet后,那么tomcat自然就很好理解了,tomcat是servlet容器,同时它也包括了web服务器的功能,因此tomcat是web服务器的扩展,也可以理解为tomcat就是web服务器
那么为什么说tomcat是servlet容器呢?字面意思容器就是可以容纳很多东西,众所周知,在tomcat上部署应用程序的时候,我们是把应用程序放在tomcat根路径下的webapps文件夹下,而这个文件夹下可以放置多个应用程序,我们可以通过请求来决定具体访问那个应用,由此我们可以知道tomcat的整个运行流程:

(1)用户通过浏览器向服务器发送请求  

(2)tomcat接收请求后解析请求具体访问哪个应用  

(3)tomcat创建一个HttpServletRequest对象,将用户发送的请求封装到这个对象里  

(4)tomcat创建一个HttpServletResponse对象  

(5)Servlet容器调用HttpServlet对象的service方法,把HttpRequest对象与HttpResponse对象作为参数传给 HttpServlet对象  

(6)HttpServlet调用HttpRequest对象的有关方法,获取Http请求信息  

(7)HttpServlet调用HttpResponse对象的有关方法,生成响应数据  

(8)Servlet容器把HttpServlet的响应数据结果传给浏览器,浏览器再根据返回的response进行相应的渲染  

综上我们还可以猜测到servlet的出现就是弥补以前web服务器只能访问静态资源的问题,有了servlet我们就可以通过浏览器与服务端进行动态交互了。

四:Servelt在Tomcat中是线程安全的吗?

ok , 狐狸与小兔的本节技术分享就到这,希望学习的小伙伴能学习到东西。。。


结语:以往都是看别人的博客进行学习技术,其中不乏有精华博客也有吊儿郎当的CV大法文章,所以决定将自己所学所用所整理的知识分享给大家,主要还是想为了后浪们少走些弯路,多些正能量的博客,如有错漏,欢迎指正,仅希望大家能在我的博客中学到知识,解决到问题,那么就足够了。谢谢大家!(转载请注明原文出处)