首先,让我们简单回顾一下web技术的发展历史,可以帮助你理解web容器的由来。
早期的web应用主要用于浏览新闻等静态页面,HTTP服务器(比如Apache,Nginx)向浏览器返回静态HTML。浏览器负责解析HTML,将结果呈现给用户。
随着互联网的发展,我们已经不满足于静态页面,还希望通过一些交互操作,来获取动态结果。因此也就需要一些扩展机制能够让HTTP服务器调用服务端程序。
于是Sun公司推出了servlet技术,你可以把servlet理解为运行在服务端的java小程序。但是servlet没有main方法,不能够独立运行,因此必须把它部署到servlet容器中,由容器来实例化并调用servlet。
而Tomcat和Jetty就是一个Servlet容器。为了方便使用,他们也具有HTTP服务器的功能,因此Tomcat或者Jetty就是一个"HTTP服务器+servlet容器",我们也可以叫他们 web容器。
我之前把servlet总是和service层弄混(因为没真正去系统的去学习web,还是在学习web时写的这篇文章)。先不管什么是service,这里先理解什么是servlet:
Servlet字面意思即服务端小程序
Servlet是一组接口、一组规范、一个协议;用于开发Web项目
一个工程的搭建通常由各模块组成;各个模块分工协作、相互配合可以高效率地构建大型项目。各个模块之间需要一组规范来连接,Servlet就是这样一组规范
Servlet 主要用于处理客户端传来的 HTTP 请求,并返回一个响应,它能够处理的请求有 doGet() 和 doPost() 等。
Servlet 由 Servlet 容器提供,Servlet 容器是指提供了 Servlet 功能的服务器(如 Tomcat)。
Servlet 容器会将 Servlet 动态加载到服务器上,然后通过 HTTP 请求和 HTTP 应与客户端进行交互。
每一个url都对应着互联网中的一个资源,分为静态资源和动态资源,例如:
这段程序就是Servlet程序,当浏览器发送某个请求时,服务器找到该请求对应的servlet程序并执行servlet对象的service()方法。请求路径与servlet程序的对应信息配置在web.xml文件中,如图:
Servlet对象从最初的创建,方法的调用,到最后被销毁,都是由web容器来管理的,javaweb程序员无权干涉
具体过程:
备注:mvc实际上是一个很宽泛的内容,根据用到的技术不同,需要实现的业务逻辑不一样,所以灵活开发配置即可。
结合 2.1 和 2.2 .所以== Servlet属于MVC结构中的控制层,也就是连接页面和数据库的那个层次。==
说得通俗点,Servlet 就是一个 Java 类,里面定义了接收用户请求,调用业务类,发送响应视图的方法。现在你是不是觉得 Servlet 好像是属于 Controller 层的?
Java web项目主要分为 5层,5个大包(由于不同的人有不同的叫法,所以大概分为以下几个包)
① 数据库实体层 》》》》》》》》》》》 entity / bean
② 具体数据库操作层(增删改查) 》》》》》 dao(接口) ---- dao.impl (具体实现)
③ 业务层 》》》》》》》》》》》》》》 service(接口) ---- service.impl (具体实现)
④ 流程控制层 》》》》》》》》》》》》 controller
⑤ 表示层 / 测试层 》》》》》》》》》》 test / view
⑥ 工具类 》》》》》》》》》》》》》》 utils ---- (可有可无,根据需求,是否有通用工具类)
⑦common层: 通用工具包,一般一个公司会有固定的jar包,好几个项目通用的,例如远程调用等。
【写的顺序】 先写数据库实体层①,再写具体数据库操作层②,再写业务层③,再写其他的。因为调用顺序是 ②调用① ,③调用②
所以这下子明白了吧,不要纠结servlet到底属于那一层,主要看其作用。controller层收到servlet从前端拿过来的内容,然后控制层去调用service层,service调用dao层。所以有些人说,servlet调用service,这里忽略了controller层的转发请求。
如果有问题还望大神评论指导,非常感谢!!!
参考了好几篇内容,才解开这个疑惑。主要有下面几篇文章,写的都非常好,很详细,还有jsp与servlet层面的。巨实用,可以看一下。
https://blog.csdn.net/rocling/article/details/82795472
这里面有jsp原理与servlet的关系https://blog.csdn.net/qq_22695001/article/details/109364528?spm=1001.2101.3001.6661.1&utm_medium=distribute.pc_relevant_t0.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-1.pc_relevant_paycolumn_v3&depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-1.pc_relevant_paycolumn_v3&utm_relevant_index=1
http://c.biancheng.net/view/3980.html
https://blog.csdn.net/zxc412728/article/details/121325368
https://blog.csdn.net/lexiaowu/article/details/100673267