spring系统学习-之最小化spirngMVC练习环境准备(基于IDEA的spring容器与外置tomcat容器的和平共处)

    这个学期,我们系统的学了基于spring的内容。 前面已经从逻辑上分别记录了ioc与aop的spring的两大核心功能:spring的IOC容器练习以及IOC的优势对比练习;  AOP的优势极其逐步推进练习。    之后整理了spring整合orm的相关系列:spring逐步整合orm实例--第一例:整合自己的数据库连接,spring逐步整合orm实例--第二例:整合带有数据源的数据库连接, spring逐步整合orm实例--第三例:整合jdbc,spring逐步整合orm实例--第四例:整合hibernate。,spring逐步整合orm实例--第五例:整合jdo。,spring逐步整合orm实例--第六例:整合mybatis.  。   比较系统的对spring的内容进行了学习并练习。   但是我们平时用的较多的反而是spring-webmvc。因此今天花一些时间整理整理相关内容。 

     环境准备:  intelij IDEA, tomcat--ee容器,java环境。 

     过程: 

         新建一个普通的project,也可以采用maven 的形式,但是无所谓, 在这个学习的过程中,我们期望遇到的问题越多,我们所学习的知识也就越多。  因此我们可以适当的不按常理出牌!

        但是无论怎样,新建的一个目录大致是这样:

         spring系统学习-之最小化spirngMVC练习环境准备(基于IDEA的spring容器与外置tomcat容器的和平共处)_第1张图片

       其中,核心是源码包,也就是供我们写java代码的地方。   我们要弄清楚一个原则,就是java代码本质是需要被编译执行的,执行的入口是 公有的静态main方法,常规的java程序我们是这样启动的!!   包括spring-boot。  用过spirngboot的朋友肯定知道,我们需要在启动类上加一个@springbootApplication即可运行整个容器启动这个入口,但是在这个启动的过程我们实际上是去跑的springboot的容器。    所以,springBoot的web项目中,web容器的上下文是包含在springBoot上下文中的。  至少直观理解上是这样的。  也正是因为这样,springBoot得以进行很多基于web的方便的自动配置等等。

      但是需要注意,我们此刻用的服务器容器是外置的tomcatee容器。   如果就spring与spirngBoot 的web项目而言,差别最大的反倒是内置tomcat与外置tomcat扮演的角色不同。   springBoot的自动配置反而是次要的了,因为同样的功能我们可以通过手动配置完成,它们的本质并没有什么不同。 

       所以,springWebmvc环境的关键不在于依赖包等等内容。  而在于它的宿主环境: tomcat容器的环境。 或者换个说法,项目部署的问题!!!   然而这又是另一个知识点了。   但是弄清楚这个问题很有必要,也只有弄清楚这个问题,我们的服务器Javaee服务器这块的知识才能像打通任督二脉一般流畅。 

     然而对于用惯集成开发环境的我们来说,要做到这一点通常并没有机会。  以一个普通的web项目(假设只包含静态文件,不包含其它的任何东西)。 它的部署具有两个条件:

          第一步,它至少具有这样的一个目录结构及文件: web/WEB-INF/web.xml。 

         第二步,将它放置服务器容器的webapps/目录下。(这只是部署的一种方式,实际的部署方式分为多种,但是大体原理都差不多)。 

      这样,运行服务器容器,在web.xml没有乱配置的情况下,这就是一个web服务了!! 

   下面是我们如何在集成开发环境下进行spring容器与web容器的环境搭建:(其实这是idea工具的应用了)

第一步,随便建一个maven工程,引入spring依赖,因为我要使用webmvc,所以引入webmvc就可。 然后我们可以将之称为逻辑上的spring容器:

        spring系统学习-之最小化spirngMVC练习环境准备(基于IDEA的spring容器与外置tomcat容器的和平共处)_第2张图片

  为了使得代码依赖更加的简洁,我特意只引入了spring-webmvc。  但是实际上webmvc是包含了spirng-web的。 以及基本的spirng容器所需jar包。   没错这就是一个典型的maven结构的java项目。  或者说spring容器,现在还算不上,当我配置了它的配置文件,它就名副其实的变成了一个spring容器。 如下图:

spring系统学习-之最小化spirngMVC练习环境准备(基于IDEA的spring容器与外置tomcat容器的和平共处)_第3张图片

   为了后面比较与springBoot的比较区别开来,这里继续开发:建立包名,类

      spring系统学习-之最小化spirngMVC练习环境准备(基于IDEA的spring容器与外置tomcat容器的和平共处)_第4张图片

spring系统学习-之最小化spirngMVC练习环境准备(基于IDEA的spring容器与外置tomcat容器的和平共处)_第5张图片

     注意,这里的注解,有一部分来自spirngwebMvc,一部分来自springcontext, 一部分来自spirngweb。  总之,当具有spirngwebMVC环境的时候,这些注解是统统可用的。   注解的功能是向spring容器里注册组件。  为了方便我们的注册,spring提供了自动扫描的实现:

      新建一个spring的配置文件,名称随意,如果心情不错,可以取一个spring-mvc,再配置如下两项。  此时整个项目就是一个spirng容器确信无疑。 

       在学习spring的ioc容器的时候,我们知道要启动一个容器常见的有两种方式。 分别是:ClassPathXmlApplicationContext,以及FileSystemXmlApplicationContext。   这两种是基于一般的java的项目容器。 事实上还有一种针对web的spring容器: 位于spirngweb下: WebApplicationContext。 是spirng-web为了web项目量身打造的。   等会在二者结合的时候,便可以看到它。 

第二部,在IDEA中配置tomcat容器,我们可以称为逻辑上的tomcat容器。 

       在IDEA右上角:,或者按F10, 它是进行全局配置的。 

       spring系统学习-之最小化spirngMVC练习环境准备(基于IDEA的spring容器与外置tomcat容器的和平共处)_第6张图片

       spring系统学习-之最小化spirngMVC练习环境准备(基于IDEA的spring容器与外置tomcat容器的和平共处)_第7张图片

spring系统学习-之最小化spirngMVC练习环境准备(基于IDEA的spring容器与外置tomcat容器的和平共处)_第8张图片

spring系统学习-之最小化spirngMVC练习环境准备(基于IDEA的spring容器与外置tomcat容器的和平共处)_第9张图片

第三步,实现外置tomcat容器与spring容器逻辑上的协作:

     要达到这个效果,首要的知识点是理解tomcat容器的工作流程与机制。  tomcat部署一个web服务的关键在于web.xml。。  这也是一个web项目的最小要求。 (事实上,我们可以看到一些项目并没有web.xml, 这是因为: 1,当这个文件缺省的时候,容器内部自带了一个web.xml功能类似的文件,总共有四个文件替代。 但是这个时候我们能做的事情就很有限了,所以一般很少遇到。  第二种,内置tomcat容器不需配置这些,或者说采用了其它方式实现)。 

    此外,当我们配好了tomcat容器环境时,目录结构变化如下:

    spring系统学习-之最小化spirngMVC练习环境准备(基于IDEA的spring容器与外置tomcat容器的和平共处)_第10张图片

如何将两个容器整合起来呢???? 且看配置:

spring系统学习-之最小化spirngMVC练习环境准备(基于IDEA的spring容器与外置tomcat容器的和平共处)_第11张图片

   可见啊,完成二者的配合有两个功能不能少:  第一,监听器;  第二,为tomcat定制化的spring上下文!!

第四步,测试运行

    在IDEA中加入外置tomcat插件。   注意这个操作要求IDEA不能是社区版。 

   在右上角:spring系统学习-之最小化spirngMVC练习环境准备(基于IDEA的spring容器与外置tomcat容器的和平共处)_第12张图片

spring系统学习-之最小化spirngMVC练习环境准备(基于IDEA的spring容器与外置tomcat容器的和平共处)_第13张图片

   这样二者就可以和平共处,并且相互协作了。!!

 

运行服务器,输入hello:

spring系统学习-之最小化spirngMVC练习环境准备(基于IDEA的spring容器与外置tomcat容器的和平共处)_第14张图片

你可能感兴趣的:(框架相关)