java web servlet、servlet容器 HTTP服务器和mvc三层架构或者说servlet属于哪一层的,给我搞的晕晕的,今天终于弄明白了
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程序员无权干涉
具体过程:
- Web容器启动,解析web.xml文件,将请求路径与对应的servlet类名放到一个map集合中,如图:
大多数web容器还会维护一个请求路径与对应的servlet对象的集合,如图:
默认情况 下,servlet对象在Web容器启动阶段不会被实例化,而是在接收到第一次请求之后实例化;若想要在web容器启动时实例化,可进行如下配置:
- 浏览器发送请求,web容器截取请求路径,通过请求路径在Map<String, Servlet>中查找对应的servlet对象;
如果没有找到对应的servlet对象,则:
1,通过请求路径在Map<String, String>找到对应的servlet全类名
2,通过反射机制加载该类并调用无参构造方法完成servlet对象实例化
3,调用servlet对象的init()方法完成初始化
4,调用servlet对象的service()方法提供服务
若找到了对应的servlet对象,则调用该对象的service()方法提供服务 - 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属于哪一层的,给我搞的晕晕的,今天终于弄明白了相关推荐
- Java Web实现 使用浏览器从服务器下载文件
Java Web实现 使用浏览器从服务器下载文件. 代码实现: package com.juneyaoair.util;import lombok.SneakyThrows;import javax. ...
- java从入门到精通二十四(三层架构完成增删改查)
java从入门到精通二十四(三层架构完成增删改查) 前言 环境准备 创建web项目结构 导入依赖和配置文件 创建层次模型 实现查询 实现添加 实现修改 完成删除 做一个用户登录验证 会话技术 cook ...
- java三层 开源_java 山寨qq 聊天工具(基于mvc三层架构,附 mvc架构模式pdf说明文档)支持开源...
[实例简介] java 山寨qq 聊天工具(基于mvc三层架构,附 mvc架构模式pdf说明文档)支持开源 [实例截图] [核心代码] java山寨qq聊天工具(基于mvc三层架构,附mvc架构模式p ...
- Java中使用MVC三层架构做登陆验证
这里主要的内容是有关Java中MVC三层架构 目录 原始的登陆验证 分层改进(每个代码都是登录和验证两个功能) 使用分层想法做登陆验证 User类 表现层 业务层 持久层 原始的登陆验证 原始的登陆验 ...
- 物流快递系统前、后端+Java语言+SpringBoot项目+MVC三层架构+maven+Mysql+Tomcat+可以用于学习SpringBoot项目入门
物流快递系统前.后端+Java语言+SpringBoot项目+MVC三层架构+Mysql+Tomcat+可以用于学习SpringBoot项目入门 可以用于课程设计.毕业设计的知识点入门学习 提示:此资 ...
- java web项目部署到tomcat服务器(一般步骤和自己所犯错误的总结)————高手忽略
最近由于项目需求,需要将java web项目部署到本地tomcat上(版本为8.0)进行测试.作为一个非计算机专业的菜鸟,之前的工作都是写后台逻辑代码,没接触过web项目部署.部署的时候不知道如何下手 ...
- java私塾 设计模式 视频_[章节]Java Web开发理论部分视频教程 之 04 mvc设计模式详解视频教程 - 我的学习中心 - 私塾在线 - 只做精品视频课程服务...
第01节课:进行整体课程概览:复习事件机制:复习表现层的功能:复习表现层的开发 第02节课:Web应用的基础知识,包括:Internet.Http.IP.Port.MIME规范.Web客户端和服务端. ...
- Java web中使用JQuery加载某页面后,自动调用Servlet(GET方法,POST方法)
目录 背景 演示 源码 背景 比如需要在页面加载后,干某些事情,就需要自动调用Servlet去调用Java代码,以达到某种功能. 演示 web网页搭建好后,进入这个web页面,自动调用Servlet ...
- Java Web程序设计基础二(服务器交互篇——九大内置对象)
目录 一.out对象 1.概念 2.常用方法 3.代码例子 二.request对象 1.概念 2.request对象的常用方法 3.获取请求头部信息的方法 4.获取请求参数的方法 三.response ...
最新文章
- 微信网页开发 jssdk前后端代码,PHP实现完整代码,自定义分享
- 为何写flash的时候要地址左移一位?
- CentOS网络配置
- Docker知识6:实战!将一个tensorflow项目制作成Docker image
- OpenGL创建hello Window窗口
- Yarn管理界面中Queue:root和Queue:default的区别
- JavaScript学习杂记--对象和数组
- 中的实践 中兴_中兴通讯5G智慧治水业务在千岛湖畔下姜村成功实践
- Centos6.8安装Nginx+域名转发
- 机场新增卫星厅对中转旅客影响的评估方法
- (134)FPGA面试题-介绍冯·诺依曼体系结构和哈佛体系结构
- android个人中心界面_Android 机也能用上你熟悉的浏览器插件,这些浏览器不可错过...
- C++11新特性之decltype关键字的使用
- 使用vSphere Web Client导出/导入/还原分布式交换机配置(2034602)
- Android merge 标签学习笔记
- python 网络编程_python网络编程示例(客户端与服务端)
- python网络自动化实例_【python自动化第八篇:网络编程】
- 构造函数_析构函数_深拷贝与浅拷贝
- 论文笔记_S2D.06-2018-BMVC-用于实时语义分割的轻量级精细网络RefineNet
- Spring整合MyBatis之SqlSession对象的产生
热门文章
- 【ESXi 8】安装ESXi 8.0 虚拟机
- Python-基本统计值计算实例
- (Android)ImageView(图像视图)自用详解
- android apk程序,一个完整的Android应用程序(3)
- matlab中eig用法,MATLAB中eig的用法
- 印度理工学院:“印度版麻省理工”的迷思
- 【安信可PB-01/02模组专题③】ESP32-G WIFI蓝牙网关与PB02模组开发进行组网通讯
- stm32F4平台modbus16位CRC两种软件计算方法代码及性能对比
- linux-1-常用shell命令复习
- cesium之家总目录