最近因为在上javaEE的课程一直在学习Spring,在网上找了很多资料,发现大多数都是通过web.xml配置的spring,而通过javaConfig配置的比较少,本人自己尝试了两种配置方法。
开发环境Eclipse+Maven+Tomcat
-----------------------------------------------------------
首先我们要清楚Spring整个工作过程--->
盗用Spring in Action里的这张图片,我们可以看到整个流程:(如果想全面了解可以去查看书籍,这里说一下个人理解,错了还请见怪)
1、网页浏览器Brower发送Request,服务器需要有个servlet的调度器(DispatcherServlet)----这个就是用来接受客户端的请求,可以理解成拦截器
2、这是一个处理器映射(好像很复杂)----其实就是能把客户的请求调度到对应的Controller
3、那么Controller是要做什么事情呢?----Controller顾名思义为控制层,就是说你在Brower里传递的相关参数要经过他的手里,然后他根据Brower的请求去寻找对应的jsp,把从Brower得到的参数去传递给jsp。
4、所以Controller就返回Model和View的名字给servlet的调度器,DispatcherServlet就知道了,“原来Brower需要的是A这个网页”。(我猜测这时应该是一个raw的)
5、这时候知道了是哪个页面,接下来我们要对网页A进行渲染,渲染什么内容?----就是我们需要告诉这个页面你这边需要填写什么内容,而这些内容就是我们在Controller返回的,也就是我们需要组装这个网页。
6、可以了,我们得到了我们需要的网页View
7、将其返回给Response to Brower
PS:可能会问,为什么需要Controller这个东西呢?直接都放在DispatcherServlet里面不就好了吗?简单而又实用。
Answer:这你就错了,MVC是很有道理的一个结构,仔细想想,为什么需要C(Controller)层呢?很关键的一点是我们能把网页实现的业务逻辑单独抽取出来操作,就比如你要访问数据库,你要进行第三方数据导入,OK的这些都是Controller去处理,我的View层和Model层对这些一无所知,这就是一个很棒的分工。我是View层,我只需要知道你Controller层会给我数据,我去显示在指定的位置就OK了,我不需要关心你这个数据是抢的,还是偷的。这样多好。Controller层告诉Model层我需要哪些哪些数据,Model层只需要去拿到指定数据提供给Controller层就可以。多简单的,多明了,各司其职。
-----------------------------------------------------------
(1)Web.xml ==HelloSpring
首先新建一个Maven工程,使用Maven导入spring所需要的jar包,具体就自己网上找一下都有的。然后因为spring工程是默认的读取工程内的Web.xml进行一系列配置,所以我们需要对web.xml进行编写。那么为什么要对这个Web.xml进行编写呢?写这个xml是为了干什么?
1、现在我们对照着上面这个流程来,web.xml就是要对DispatcherServlet进行定义,说明我使用的是什么样的Servlet的容器,怎么使用它的。
2、接下来我们需要去拦截客户的请求,所以我们需要一个拦截器,其实是需要另一个xml来实现。(在我的工程里我命名为springContext.xml)
3、那么现在我们需要去定义Controller了,ok的,我定义了HelloSpringController.java
4-6、最为简单的渲染就是你写的HTML网页代码。在我的工程中我默认为index.html还有一个home.html
7、发送给网页,显示内容。
至此一个简单的web.xml的SpringMVC就ok了,配置完Tomcat就可以运行了。
(2)JavaConfig ==other-spring
同样新建一个Maven工程,(这里不得不啰嗦一下,Maven真是一个太棒的工具!),这里值得一说的是,使用Config配置的时候,可能Eclipse或者Tomcat的会有很多奇怪的错误,我也经历了好多,因为旧版本都是用的xml,所以对Config的兼容有点不好,但请务必务必坚信使用Config是可以完成SpringMVC的配置的,而且个人感觉还比web.xml好理解。
1、同样的我们需要一个DispatcherServlet,在这里我们需要定一个类WebInitializer.java去继承一个类AbstractAnnotationConfigDispatcherServletInitializer(名字超长-.-)网上有其他说web什么的一个类,也是可以的,他们就只是继承的一些父子代的关系而已,并不影响。
2、然后这个WebInitializer需要我们去实现继承来的类getServletConfigClasses和其他的什么,其实道理都一样,就是说我们现在需要配置他所需要的Servlet的属性。
3、现在我们就可以去定义我们需要的Controller了。----在我的工程中是HelloController.java这个类
4-7、同样的也是HTML代码,然后发送到Brower
OK,这样就完成了。
其实Config想做的就是代替工程中的xml的工作,每次Tomcat启动的时候会去找到继承了AbstractAnnotationConfigDispatcherServletInitializer相关类进行初始化,就像去找web.xml一样,然后我们在WebInitializer.java指定我们的相关配置(在我的工程中是Web.config和Root.config),然后我们定义Controller进行业务操作,编写网页HTML代码,返回给浏览器。
------------------
结束了,接下来要进行volecity和tiles的集成,这个是关于渲染器那方面的。祝我好运!
GitHub地址:https://github.com/monster5475/2017.4.9