您的位置:首页 > 编程语言 > Java开发

控制逻辑的分离——springMVC

2015-09-28 21:41 323 查看
    最近开始了4.0的项目,由于是后来加入的项目组,所以这两天一直在进行项目环境的搭建,项目的整体架构的熟悉以及应用到的技术点的学习。环境搭建过程中也遇到了很多问题,接下来的博客我会一一记录下来,和大家一起分享。开发工具我们使用的是eclipse,服务器使用的是Jboss,项目中包管理使用的是maven,关于这些工具的使用,下篇博客我们详细的介绍。在项目架构中值得一提的就是采用了SpringMVC框架,使得开发方便了很多,下面我们本篇博客先来了解一下关于SpringMVC的内容。

    首先关于MVC,我们是很熟悉的,其中的主要思想就是分离显示层和业务逻辑层,那spring又是我们java开发中经常使用的S2SH三大框架之一,其核心就是IoC和AOP,所以个人冒昧的说一句,今天所说的springMVC就是集两个框架的优点于一身,很强大。今天我们从原理入手,后面的博客我会结合项目中具体分析SpringMVC是如何应用的。

    标准的MVC架构三元组概念就是模型、视图和控制器,这些我们都很熟悉,不详细说了。最简单的MVC架构本身具有一定的缺陷,现在已经不能活跃在主流市场中,下面是一个一般的Web MVC的架构图也就是我们经常所说的Model2模型(该模型在DRP项目中是一个重点使用的框架):



    这个模型在Model1的模型基础上进行了改进,在JSP页面上分离出了一个servlet,在servlet中进行业务逻辑,这样就实现了页面和业务逻辑的分离,其中这个servlet就起到了控制的作用,他就代表了Controler层。但是从图中我们可以看到,所有的业务逻辑全部放到了servlet中,确实是实现了页面和逻辑的分离,但是出现了新的问题,servlet中的业务逻辑会很多很庞大。另外参数到模型的封装会很复杂,在开发程序过程中我们就需要大部分的精力放在这些不是主要的任务上,而且一个视图就会固定的绑定到一个jsp中,这样也不利于我们更换视图。为了解决这些问题,springMVC出现了,在Model2模型也就是Web
MVC的基础上,同样也分离了控制器层,分离出不同的控制器进行不同的逻辑,这样使我们的开发变得简单又灵活。下面是SpringMVC的架构图:



   首先用户发出请求之后,会先通过一个DispatcherServlet前端控制器,然后由前端控制器委托给其他的解析器进行处理,在我们的web.xml配置文件的开头都会有一个DispatcherServlet的配置,对访问流程进行一个全局控制:

<servlet>
<servlet-name>chapter2</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<load-on-startup>1</load-on-starup>
</servlet>
<servlet-mapping>
<servlet-name>chapter2</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
   然后到达一个HandlerMapping将请求映射为一个HandlerExcutionChain对象,然后通过HandlerAdapter将处理的请求进行适配,从而适合于不同类型的处理器,在spring的配置文件中会进行HandlerMapping和HandlerAdapter的配置:
<!- -HandlerMapping - ->
<bean class=”org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping”/>
<!- -HandlerAdapter - ->

<bean class=”org.springframework.web.servlet.mvc.SimpleConrollerHandlerAdapter”/>

<p><span style="font-family:KaiTi_GB2312;font-size:18px;"> 然后根据适配的结果找到真正的处理器完成相应的功能,然后返回一个ModelAndView对象,该对象中包含了模型数据和逻辑视图名,然后通过ViewResolver解析逻辑视图名称为真正的view,更换视图:</span></p>
<!- - ViewResolver  - - >
<bean class=”org.springframework.web.servlet.view InternalResourceViewResolver”>
<property name=”viewClass” value=”org.springframework.web.servlet.view.JstlView”/>
<property name=”prefix” value=”/WEB-INF/jsp”/>
<property name=”suffix” value=”.jsp”/>
</bean>

然后就是渲染页面显示给用户。

    以上就是SpringMVC的实现原理,通过WebMVC和SpringMVC的比较,我们可以很好的感受到SpringMVC带来的好处,原理的不同正好也体现了一种思想的进步,从最开始Model1的页面和逻辑的混合引出了model2的分离页面显示和业务逻辑,因为model2的逻辑部分的缺陷引出了springMVC中逻辑的分离,在结合spring本身的优点能够很好的支持与Hibernate框架的结合,使得springMVC在如今的框架市场上如日中天。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: