九、Web应用各个容器之间的关系

九、Web应用各个容器之间的关系

    容器是管理对象的地方。

    1、Web容器

        Web容器负责管理和部署Web应用,其本身可能具备Servlet容器组件;如果没有,一般能将第三方Servlet容器作为组件整合进Web容器。用Web容器可以直接访问静态页面,比如安装一个apache等。但是如果要显示jsp/servlet,就需要安装一个Servlet容器。

    2、Servlet容器

        Servlet容器全称Server Applet,意为服务程序。主要作用是给上级容器(Tomcat)提供doGet()和doPost()等方法。其生命周期实例化、初始化、调用、销毁受控于Tomcat容器。负责管理Servlet生命周期,负责Servlet的加载、实例化和初始化。负责处理客户请求,当客户请求来到时,Servlet容器获取请求,然后调用某个Servlet,并把Servlet的执行结果返回给客户。利用Servlet容器提供的方法,你能轻松的让Servlet与Web服务器对话,而不用自己建立serversocket、监听某个端口、创建流等。Servlet容器会自动为它所接收的每个Servlet请求创建一个新的java线程。针对用户的请求,如果Servlet已经运行完相应的HTTP服务方法,这个线程就会结束。Servlet容器负责将jsp代码翻译为真正的java代码。

        Servlet没有main()方法,不能独立运行,它必须被部署到Servlet容器中,由容器来实例化和调用Servlet的方法(如doGet()和doPost()),Servlet容器在Servlet的生命周期内包容和管理Servlet。在JSP技术推出后,管理和运行Servlet/JSP的容器也称为Web容器。

        作用

        (1)、通信支持:利用容器提供的方法,你能轻松的让Servlet与Web服务器对话,而不用自己建立Serversocket、监听某个端口、创建流等等,容器知道自己与web服务器之间的协议。

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

        (3)、多线程支持:容器会自动为它所接收的每个Servlet请求创建一个新的Java线程。针对用户的请求,如果Servlet已经运行完相应的HTTP服务方法,这个线程就会结束,因为支持多线程所以会遇到同步问题。

        (4)、声明方式实现安全:利用Servlet容器,你可以使用XML部署描述文件来配置和修改安全性,而不必将其硬编码写到Servlet类代码中。

        (5)、JSP支持:Servlet容器负责将Jsp代码翻译为真正的Java代码。

    3、Web容器和Servlet容器的关系

        (1)、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应用。

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

    4、Spring容器

        Spring容器管理Service和Dao的Bean对象。

    5、SpringMVC容器

        SpringMVC容器管理Controller的Bean对象,SpringMVC拦截器也是SpringMVC管理的。

    6、Spring容器和SpringMVC容器的关系

        Spring容器和SpringMVC容器的关系是父子容器的关系。Spring容器是父容器,SpringMVC是子容器。在子容器里可以访问父容器里的Bean对象,但是在父容器里不可以访问子容器的Bean对象。说的通俗点就是,在Controller里可以访问Service对象,但是在Service里不可以访问Controller对象。

    7、IOC容器

        SpringMVC的IOC容器中的Bean可以引用SpringIOC容器中的Bean,反之Spring IOC容器中的Bean不能引用Spring MVC IOC容器中的Bean。因为,Spring MVC IOC容器是Spring IOC容器的子类,子类可以引用父类,但父类不能引用子类。

    8、Apache和Tomcat的关系

        (1)、Apache是世界上最流行的Web服务器(其次是微软的IIS),可以处理浏览器的HTTP请求,默认端口为80;Tomcat是运行在Apache之上的应用服务器,为客户端提供可以调用的方法。Tomcat是一个Servlet容器(可以认为Apache的扩展),可独立运行。

        (2)、Apache只支持HTML等静态普通网页,可以单向连通Tomcat(Apache可以访问Tomcat的资源,反之不然);Tomcat是Servlet容器,可以支持JSP、PHP和CGI等,其中CGI是公共网关接口,可以用Perl编写CGI脚本。Tomcat既能为动态网页服务,同时也能为静态网页提供支持。尽管它没有通常的Web服务器快,功能也不如Web服务器丰富,但是Tomcat逐渐为支持静态内容不断扩充。

        (3)、Apache侧重于HTTP Server;Tomcat侧重于Servlet引擎。

        (4)、两者可以整合,当客户端需要请求静态资源,只需要Apache服务器响应请求;当客户端需要动态资源,如JSP,需要Tomcat服务容器(Tomcat可以将JSP解析为Servlet)。由于JSP需要JDK的数据库驱动接口,所以一般组合是Apache+Tomcat+JDK。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值