servlet容器,web容器,spring容器,springmvc容器,dubbo容器之间区别

技术标签: JSPServlet  spring  springmvc  servlet  

1 各个容器

1.1 Web容器

web容器(web服务器)主要有:Apache、IIS、Tomcat、Jetty、JBoss、webLogic等,而Tomcat、Jetty、JBoss、webLogic同时也是servlet容器,或者说他们还包含了servlet容器。没有servlet容器,你也可以用web容器直接访问静态页面,比如安装一个apache等,但是如果要显示jsp/servlet,就要安装一个servlet容器了,但是光有servlet容器是不够的,因为它要被解析成html输出,所以仍需要一个web容器。大多数servlet容器同时提供了web容器的功能,也就是说大多servelt容器可以独立运行web应用。

web容器是管理servlet(通过servlet容器),以及监听器(Listener)和过滤器(Filter)的。这些都是在web容器的掌控范围里。但他们不在springspringmvc的掌控范围里。因此,无法在这些类中直接使用Spring注解的方式来注入需要的对象,是无效的,web容器是无法识别的。

1.2 Servlet容器

Servlet容器是管理servlet对象的。
Servlet容器的作用:负责处理客户请求,当客户请求来到时,Servlet容器获取请求,然后调用某个Servlet,并把Servlet的执行结果返回给客户。

使用Servlet容器的原因: 通信支持:利用容器提供的方法,能轻松的让servletweb服务器对话,而不用自己建立serversocket、监听某个端口、创建流等 等。容器知道自己与web服务器之间的协议,所以servlet不用担心web服务器(如Apache)和你自己的web代码之间的API,只需要考虑如何在servlet中实现业务逻辑(如处理一个订单)。

生命周期管理:servlet容器控制着servlet的生与死,它负责加载类、实例化和初始化servlet,调用servlet方法,以及使servlet实例被垃圾回收,有了servlet容器,你不需要太多的考虑资源管理。

多线程支持:容器会自动为它所接收的每个servlet请求创建一个新的java线程。针对用户的请求,如果servlet已经运行完相应的http服务方法,这个线程就会结束。这并不是说不需要考虑线程安全性,其实还会遇到同步问题,不过这样能使会少做很多工作。

声明方式实现安全:利用servlet容器,可以使用xml部署描述文件来配置和修改安全性,而不必将其硬编码写到servlet类代码中。
JSP支持:servlet容器负责将jsp代码翻译为真正的java代码。

1.3 Servlet容器和ServletContext的关系

ServletContextservletservlet容器之间的直接通信的接口。
Servlet容器在启动一个Web应用时,会为它创建一个servletContext对象。每个web应用有唯一的servletContext对象。
同一个web应用的所有servlet对象共享一个serveltContext,servlet对象可以通过它来访问容器中的各种资源。

1.4 Spring容器和SpringMVC容器

Spring容器是管理servicedao的。
SpringMVC容器是管理controller对象的。

1.5 spring与springmvc容器区别

Spring容器和SpringMVC容器的关系是父子容器的关系。
Spring容器是父容器,SpringMVC容器是子容器。
在子容器里可以访问父容器里的对象,但是在父容器里不可以访问子容器的对象,说的通俗点就是,在controller里可以访问service对象,但是在service里不可以访问controller对象。
所以这么看的话,所有的bean,都是被Spring或者SpringMVC容器管理的,它们可以直接注入。
然后SpringMVC的拦截器也是SpringMVC容器管理的,所以在SpringMVC的拦截器里,可以直接注入bean对象。

1.6 dubbo容器与spring,springmvc容器区别

dubbo容器和Spring容器mvc容器 虽然都属于Spring容器类型,但三者在项目中却不会融合成一个容器
Spring容器管理Spring注解或配置文件所生成对象,dubbo容器管理远程服务所提供的对象,mvc管理其自己的对象
三者之间,虽然dubbomvc都衍生于Spring,由于mvcdubbo毕竟是不同的框架,所以mvcdubbo相互之间不可以直接沟通
但由于mvcdubbo都是Spring的子框架,所以mvc容器和dubbo容器都可以和Spring容器沟通
所以mvc获取远程服务对象时,必须通过本地提供一个服务类注入dubbo的远程对象,然后mvc再取用Spring提供的本地服务对象
对于Spring容器、Dubbo容器和MVC容器三者关系的理解图
在这里插入图片描述

2 容器间的关系图

web容器中有servlet容器,spring项目部署后存在spring容器和springmvc容器。
其中spring控制service层和dao层的bean对象。
springmvc容器控制controllerbean对象。
servlet容器控制servlet对象。
项目启动时,首先 servlet初始化,初始化过程中通过web.xmlspring的配置加载spring配置,初始化spring容器和springmvc容器。待容器加载完成。servlet初始化完成,则完成启动。
HTTP请求到达web容器后,会到达Servlet容器,容器通过分发器分发到具体的springController层。执行业务操作后返回结果
在这里插入图片描述

来源:https://www.cnblogs.com/jieerma666/p/10805966.html


智能推荐

容器

容器API 两个对象equal时,两个对象的hashcode相等 Set 没有顺序且不可以重复 HashSet 哈希表(数组+链表) List 有顺序且可以重复(两个对象直接回想的equal,就算重复) ArrayList 数组结构 LinkList 链表结构 Map 键值对         是否包含某个对象,也是是否equal Collection中装的必...

容器

容器 数组:相同类型的有序集合,可以在其中放对象或者基本数据类型 好处:是一种简单的线性序列,可以快速访问数组元素,效率高。从效率和类型检查的角度讲,数组最好 坏处:容量需要事先确定,不能根据需求的变化扩容 分类 容器中的元素都为引用类型,不能放置原生数据类型(但是因为自动装箱,会把原生数据类型变成包装类) collection容器 set:不允许重复,使用自己的内部排列机制,重新排序 list:...

容器

Java容器 Collection HashSet中的hashCode:哈希值,十进制整数,由系统随机给出(就是对象的地址,是一个逻辑地址,是模拟出来的地址,不是数据实际存储的物理地址),在Object类中有int hashCode()方法可以获取该对象的哈希码值。 String类中的哈希值:重写了hashCode方法 Set HashSet HashSet集合存储数据的结构(哈希表) jdk1....

容器

容器 我们一般通过“容器”来容纳和管理数据。那什么是“容器”呢?生活中的容器不难理解,是用来容纳物体的,如锅碗瓢盆、箱子和包等。程序中的“容器”也有类似的功能,就是用来容纳和管理数据。 事实上,我们第七章所学的数组就是一种容器,可以在其中放置对象或基本类型数据。 数组的优势:是一种简单的线性序列,可以快速地访问数组元素,效率高...

容器

1、容器与镜像 1.分析操作系统是如何管理进程的? 当我们登入到一个操作系统内,我们可以通过ps(Process Statu)的操作可以看到各式各样的进程,包括系统自带的、或属于自身应用的、或属于其他应用的。 那么这些进程都有什么样的特点呢? 首先他们可以互相看见,相互通信;第二,他们使用的是同样的一个文件系统,也就意味着这些进程可以对同样一个文件进行读写操作;第三,他们使用的是同样的一个系统资源...

猜你喜欢

容器

一:arrayList (数组) arrayList 查找速度快 add 方法 ①            确定是否扩容 ②            添加进去 get方法 remove...

容器

容器 容器的概念:容器是一种数据类型,是序列,存储大量的数据 学习容器的意义:容器可以改变变量只能存储单个数据的缺陷 运用到容器的例子:列表 集合 元组 字典 列表(list (线性表)) 常见的线性表有:链表 数组 栈 队列 Python没有数组,数组的存储空间是连续的 定义: 1、弱数据类型语言 ls=[1,2,3,4] 2、全局函数list() ls=list() ls=list([1,2,...

TexMaker使用教程和相关配置

每次使用TexMaker进行论文写作时,不免需要进行多次配置,下面进行简单的介绍,如何使用TexMaker进行论文写作。 1.TexMaker+MikTex联合使用 TekMaker需要结合MikTex一起使用,如果只下载安装了TexMaker是不会进行成功编译论文的,必须要结合编译器使用,编译器一般有MikTex和Texlive,我使用的是MikTex+TexMaker,首先下载安装MikTex...

artTemplate写法小案例之百度搜索引擎

前篇文章介绍了artTemplate相关使用的知识,这篇主要介绍artTemplate的两个常用方法: 1.template(‘search’,data); 第一个参数是script标签的id名 第二个参数是要传入的数据 2.template.compile() 案例及代码: 1.template(‘search’,data);实现 2.templa...

一张图告诉你搞科研有多苦逼!

虽然说 365 行,行行不容易,各有各的难 ,但是,科研工作真的是一个让人随时怀疑人生的行当。 科研是个圈,就像是一个没有尽头的旅程,风景不尽相同,见识五花八门。一开始,不知道自己搞什么。弄清楚搞什么后,却不知道怎么搞。知道怎么搞,却不知道能不能搞成功。千辛万苦搞成功了,却发现有 bug。好不容易把 bug 调好了,努力造故事,希望把搞的东西卖出去,结果人家说不能这么搞,然后继续搞。千辛万苦搞好了...

问答精选

if... else if javascript

I am doing a form validation and having troubles with my code: The first IF statement works and displays the massage if the field is empty, but the ELSE IF for some reason does not... What am I doing ...

Can an included PHP file know where it was included from?

For example, This is index.php Can header.php know it was included by index.php? --EDIT-- I found a solution: header.php While $_SERVER['PHP_SELF'] will contain the currently executing script, there i...

Match escaped html in regex c#

How can I escape html codes in Regex? I need to find the string in a string like I can not use HtmlEncode/Decode for this purpose cause i need work with tags. That i want i just find the common string...

Function to multiply 3x3 matrices gives wrong answer for middle column only

While teaching myself c, I thought it would be good practice to write a function which multiplies two 3x3 matrices and then make it more general. The function seems to calculate the correct result for...

Openstack Kilo dashboard forward

I've setup the Kilo in LAN, which can't be accessed by the external network. Now, I'd like to do a forwarding to make it be accessed from outside. How to set the ProxyPass and ProxyPassReverse? I aske...

相关问题

相关文章

热门文章

推荐文章

相关标签

推荐问答