0 我们先看Web容器是什么?

首先,让我们简单回顾一下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容器。

1 servlet

1.1 首先看什么是servlet

我之前把servlet总是和service层弄混(因为没真正去系统的去学习web,还是在学习web时写的这篇文章)。先不管什么是service,这里先理解什么是servlet:

Servlet字面意思即服务端小程序
Servlet是一组接口、一组规范、一个协议;用于开发Web项目一个工程的搭建通常由各模块组成;各个模块分工协作、相互配合可以高效率地构建大型项目。各个模块之间需要一组规范来连接,Servlet就是这样一组规范

Servlet 主要用于处理客户端传来的 HTTP 请求,并返回一个响应,它能够处理的请求有 doGet() 和 doPost() 等。

Servlet 由 Servlet 容器提供,Servlet 容器是指提供了 Servlet 功能的服务器(如 Tomcat)。

Servlet 容器会将 Servlet 动态加载到服务器上,然后通过 HTTP 请求和 HTTP 应与客户端进行交互。

Servlet 应用程序的体系结构如图 1所示。

1.2 然后再讲B/S架构中涉及到的协议、标准、规范:

  • 浏览器和Web服务器之间的请求和响应遵循HTTP协议
  • WEB服务器和web项目的开发者(我们)之间有一些规范,例如:* Servlet、JSP规范
  • Web项目的开发者(我们)和数据库服务器之间有一个规范,叫做JDBC规范

1.3 那么servlet是如何启动的呢?

每一个url都对应着互联网中的一个资源,分为静态资源和动态资源,例如:

  • http://202.108.251.34:8080/egov/login.html请求路径对应着一个html网页资源
  • http://202.108.251.34:8080/oa/delete?empno=7369请求路径对应着一个动态资源、一段程序

这段程序就是Servlet程序,当浏览器发送某个请求时,服务器找到该请求对应的servlet程序并执行servlet对象的service()方法。请求路径与servlet程序的对应信息配置在web.xml文件中,如图:

1.4 再看Servlet对象的生命周期

Servlet对象从最初的创建,方法的调用,到最后被销毁,都是由web容器来管理的,javaweb程序员无权干涉

具体过程:

  1. Web容器启动,解析web.xml文件,将请求路径与对应的servlet类名放到一个map集合中,如图:

    大多数web容器还会维护一个请求路径与对应的servlet对象的集合,如图:

    默认情况 下,servlet对象在Web容器启动阶段不会被实例化,而是在接收到第一次请求之后实例化;若想要在web容器启动时实例化,可进行如下配置:
  2. 浏览器发送请求,web容器截取请求路径,通过请求路径在Map<String, Servlet>中查找对应的servlet对象;
    如果没有找到对应的servlet对象,则:
    1,通过请求路径在Map<String, String>找到对应的servlet全类名
    2,通过反射机制加载该类并调用无参构造方法完成servlet对象实例化
    3,调用servlet对象的init()方法完成初始化
    4,调用servlet对象的service()方法提供服务
    若找到了对应的servlet对象,则调用该对象的service()方法提供服务
  3. servlet对象销毁:web容器关闭的时候、webApp重新部署的时候、该servlet对象长时间没有用户访问的时候,web容器会将servlet对象销毁,在销毁servlet对象前,会调用对象的destroy()方法进行销毁前的准备
    注意:servlet对象是单例,web容器为每个Servlet类只创建一个servlet对象

2 那么前面提到说“服务器找到该请求对应的servlet程序并执行servlet对象的service()方法。”,这里说的service()方法是不是就能理解为servlet收到前端数据后就到了service层呢?往下看

2.1 先看什么是 MVC 模式?

  • Model(模型)是应用程序中用于处理数据逻辑的部分,即业务模型。用来表示应用程序的核心,比如:数据库记录字段,负责在数据库中存取数据。
  • View(视图)是应用程序中处理数据显示的部分,即用户界面,通常视图是依赖模型的数据来创建的,模型发生改变视图必须同步更新。
  • Controller(控制器)是应用程序中处理用户交互的部分。负责从视图中读取数据,控制用户的输入,并向模型发送数据。

备注:mvc实际上是一个很宽泛的内容,根据用到的技术不同,需要实现的业务逻辑不一样,所以灵活开发配置即可。

2.2 Model、View、Controller 组件介绍


结合 2.1 和 2.2 .所以== Servlet属于MVC结构中的控制层,也就是连接页面和数据库的那个层次。==
说得通俗点,Servlet 就是一个 Java 类,里面定义了接收用户请求,调用业务类,发送响应视图的方法。现在你是不是觉得 Servlet 好像是属于 Controller 层的?

3 然后我们看我们常见的javaweb中我们常间的包

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

java web servlet、servlet容器 HTTP服务器和mvc三层架构或者说servlet属于哪一层的,给我搞的晕晕的,今天终于弄明白了相关推荐

  1. Java Web实现 使用浏览器从服务器下载文件

    Java Web实现 使用浏览器从服务器下载文件. 代码实现: package com.juneyaoair.util;import lombok.SneakyThrows;import javax. ...

  2. java从入门到精通二十四(三层架构完成增删改查)

    java从入门到精通二十四(三层架构完成增删改查) 前言 环境准备 创建web项目结构 导入依赖和配置文件 创建层次模型 实现查询 实现添加 实现修改 完成删除 做一个用户登录验证 会话技术 cook ...

  3. java三层 开源_java 山寨qq 聊天工具(基于mvc三层架构,附 mvc架构模式pdf说明文档)支持开源...

    [实例简介] java 山寨qq 聊天工具(基于mvc三层架构,附 mvc架构模式pdf说明文档)支持开源 [实例截图] [核心代码] java山寨qq聊天工具(基于mvc三层架构,附mvc架构模式p ...

  4. Java中使用MVC三层架构做登陆验证

    这里主要的内容是有关Java中MVC三层架构 目录 原始的登陆验证 分层改进(每个代码都是登录和验证两个功能) 使用分层想法做登陆验证 User类 表现层 业务层 持久层 原始的登陆验证 原始的登陆验 ...

  5. 物流快递系统前、后端+Java语言+SpringBoot项目+MVC三层架构+maven+Mysql+Tomcat+可以用于学习SpringBoot项目入门

    物流快递系统前.后端+Java语言+SpringBoot项目+MVC三层架构+Mysql+Tomcat+可以用于学习SpringBoot项目入门 可以用于课程设计.毕业设计的知识点入门学习 提示:此资 ...

  6. java web项目部署到tomcat服务器(一般步骤和自己所犯错误的总结)————高手忽略

    最近由于项目需求,需要将java web项目部署到本地tomcat上(版本为8.0)进行测试.作为一个非计算机专业的菜鸟,之前的工作都是写后台逻辑代码,没接触过web项目部署.部署的时候不知道如何下手 ...

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

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

  8. Java web中使用JQuery加载某页面后,自动调用Servlet(GET方法,POST方法)

    目录 背景 演示 源码 背景 比如需要在页面加载后,干某些事情,就需要自动调用Servlet去调用Java代码,以达到某种功能. 演示 web网页搭建好后,进入这个web页面,自动调用Servlet ...

  9. Java Web程序设计基础二(服务器交互篇——九大内置对象)

    目录 一.out对象 1.概念 2.常用方法 3.代码例子 二.request对象 1.概念 2.request对象的常用方法 3.获取请求头部信息的方法 4.获取请求参数的方法 三.response ...

最新文章

  1. 微信网页开发 jssdk前后端代码,PHP实现完整代码,自定义分享
  2. 为何写flash的时候要地址左移一位?
  3. CentOS网络配置
  4. Docker知识6:实战!将一个tensorflow项目制作成Docker image
  5. OpenGL创建hello Window窗口
  6. Yarn管理界面中Queue:root和Queue:default的区别
  7. JavaScript学习杂记--对象和数组
  8. 中的实践 中兴_中兴通讯5G智慧治水业务在千岛湖畔下姜村成功实践
  9. Centos6.8安装Nginx+域名转发
  10. 机场新增卫星厅对中转旅客影响的评估方法
  11. (134)FPGA面试题-介绍冯·诺依曼体系结构和哈佛体系结构
  12. android个人中心界面_Android 机也能用上你熟悉的浏览器插件,这些浏览器不可错过...
  13. C++11新特性之decltype关键字的使用
  14. 使用vSphere Web Client导出/导入/还原分布式交换机配置(2034602)
  15. Android merge 标签学习笔记
  16. python 网络编程_python网络编程示例(客户端与服务端)
  17. python网络自动化实例_【python自动化第八篇:网络编程】
  18. 构造函数_析构函数_深拷贝与浅拷贝
  19. 论文笔记_S2D.06-2018-BMVC-用于实时语义分割的轻量级精细网络RefineNet
  20. Spring整合MyBatis之SqlSession对象的产生

热门文章

  1. 【ESXi 8】安装ESXi 8.0 虚拟机
  2. Python-基本统计值计算实例
  3. (Android)ImageView(图像视图)自用详解
  4. android apk程序,一个完整的Android应用程序(3)
  5. matlab中eig用法,MATLAB中eig的用法
  6. 印度理工学院:“印度版麻省理工”的迷思
  7. 【安信可PB-01/02模组专题③】ESP32-G WIFI蓝牙网关与PB02模组开发进行组网通讯
  8. stm32F4平台modbus16位CRC两种软件计算方法代码及性能对比
  9. linux-1-常用shell命令复习
  10. cesium之家总目录