这个学期,我们系统的学了基于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 的形式,但是无所谓, 在这个学习的过程中,我们期望遇到的问题越多,我们所学习的知识也就越多。 因此我们可以适当的不按常理出牌!
但是无论怎样,新建的一个目录大致是这样:
其中,核心是源码包,也就是供我们写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工具的应用了)
为了使得代码依赖更加的简洁,我特意只引入了spring-webmvc。 但是实际上webmvc是包含了spirng-web的。 以及基本的spirng容器所需jar包。 没错这就是一个典型的maven结构的java项目。 或者说spring容器,现在还算不上,当我配置了它的配置文件,它就名副其实的变成了一个spring容器。 如下图:
为了后面比较与springBoot的比较区别开来,这里继续开发:建立包名,类
注意,这里的注解,有一部分来自spirngwebMvc,一部分来自springcontext, 一部分来自spirngweb。 总之,当具有spirngwebMVC环境的时候,这些注解是统统可用的。 注解的功能是向spring容器里注册组件。 为了方便我们的注册,spring提供了自动扫描的实现:
新建一个spring的配置文件,名称随意,如果心情不错,可以取一个spring-mvc,再配置如下两项。 此时整个项目就是一个spirng容器确信无疑。
在学习spring的ioc容器的时候,我们知道要启动一个容器常见的有两种方式。 分别是:ClassPathXmlApplicationContext,以及FileSystemXmlApplicationContext。 这两种是基于一般的java的项目容器。 事实上还有一种针对web的spring容器: 位于spirngweb下: WebApplicationContext。 是spirng-web为了web项目量身打造的。 等会在二者结合的时候,便可以看到它。
要达到这个效果,首要的知识点是理解tomcat容器的工作流程与机制。 tomcat部署一个web服务的关键在于web.xml。。 这也是一个web项目的最小要求。 (事实上,我们可以看到一些项目并没有web.xml, 这是因为: 1,当这个文件缺省的时候,容器内部自带了一个web.xml功能类似的文件,总共有四个文件替代。 但是这个时候我们能做的事情就很有限了,所以一般很少遇到。 第二种,内置tomcat容器不需配置这些,或者说采用了其它方式实现)。
此外,当我们配好了tomcat容器环境时,目录结构变化如下:
如何将两个容器整合起来呢???? 且看配置:
可见啊,完成二者的配合有两个功能不能少: 第一,监听器; 第二,为tomcat定制化的spring上下文!!
在IDEA中加入外置tomcat插件。 注意这个操作要求IDEA不能是社区版。
这样二者就可以和平共处,并且相互协作了。!!
运行服务器,输入hello: