`

Spring MVC流程

 
阅读更多
在上一篇文章中我详细的介绍了如何搭建maven环境以及生成一个maven骨架的web项目,那么这章中我将讲述Spring MVC的流程结构,Spring MVC与Struts2的区别,以及例子中的一些配置文件的分析。
    一、Spring MVC 3.0介绍
    Spring MVC是一个典型的MVC框架,是Spring内置的Web框架,可以作为应用项目的展示层,继Spring 2.0对Spring MVC进行重大升级后,Spring 2.5又为Spring MVC引入了注解驱动功能,再到3.0时代,全面支持REST的网络服务和更容易的网络编程。这一系列的变革,无疑吸引着我们走进Spring MVC 3.0的世界。
    REST功能是Spring MVC 3.0新增的,它通过不带扩展名的URL来访问系统资源。REST是把访问的所有资源看成静态的,一个或一组,每个不同的URL地址都是一个静态资源。那么Spring MVC 3.0是如何支持REST的呢?简单的说,它是通过@RequestMapping及@PathVariable注解提供的,在@RequestMapping中指定value与method,就可以处理对应的请求。另外spring mvc框架还做了很多很多工作。
    二、Spring MVC流程
    大象根据官方文档的介绍,以及自己的理解,画了一个Spring MVC的流程结构图,大家可以参考下。看附件:springmvc_flow.jpg
   
    1、Spring MVC的核心是DispatcherServlet,当客户端发送一个请求时,这个请求经过一系列过滤器处理。然后DispatcherServlet会接收到这个请求。

    2、DispatcherServlet会从HandlerMapping对象中查找与请求匹配的Controller,并将结果返回给DispatcherServlet。
    3、DispatcherServlet将请求转发给目标Controller,如果定义有拦截器,则会经过这些拦截器处理。
    4、标Controller处理完成业务逻辑后,会返回一个结果给DispatcherServlet。

    5、DispatcherServlet根据结果查询ViewResolver,找到与之对应的视图对象,同样将结果返回给DispatcherServlet。
    6、DispatcherServlet根据指定的显示结果,调用模板对象渲染view。

    7、将view返回给客户端。
    根据上面的说明,可以很很明显的看出,Spring MVC的核心是Servlet,并且创建的Controller其实也是一个Servlet。
    三、Spring与struts2比较
    另一个非常有名的MVC框架是Struts2,Spring MVC的核心是Servlet,而Struts2的核心则是Filter。下表列出Spring MVC与Struts2的主要区别与比较结果。看附件:spring_vs_struts2-1.jpg 、spring_vs_struts2-2.jpg

   
   
    通过上面的综合比较,Spring MVC 3.0的优势要比Struts2大得多,虽然它还有些不足的地方,但随着后期版本的升级,必然会进行改进,会做的更好。所以采用Spring MVC 3.0作为系统的展示层要比Struts2好。

    四、线程安全
    由于Spring MVC默认是Singleton的,所以会产生一个潜在的安全隐患。根本核心是instance变量保持状态的问题。
    这个问题有两种解决办法:

        a) 在控制器中不使用实例变量

        b) 将控制器的作用域从单例改为原型
    这两种做法有好有坏,第一种,需要开发人员拥有较高的编程水平与思想意识,在编码过程中力求避免出现这种BUG,而第二种则是容器自动的对每个请求产生一个实例,由JVM进行垃圾回收,因此做到了线程安全。使用第一种方式的好处是实例对象只有一个,所有的请求都调用该实例对象,速度和性能上要优于第二种,不好的地方,就是需要程序员自己去控制实例变量的状态保持问题。第二种由于每次请求都创建一个实例,所以会消耗较多的内存空间。
    五、配置文件
    Spring MVC是Spring的一个组成部分,所以配置文件就会变得简单许多。以下就是本例子中最重要的几个配置文件。
    1、pom.xml
    管理项目依赖,编译,发布,插件配置等等。所有的依赖包都由配置决定,另外所需依赖包的其它依赖,无需配置,maven会自动获取并进行管理,这无疑帮我们减少了很多工作量,再也不用为到处找jar包,或版本不一致而头疼了。

    定义依赖版本属性
   

    Spring依赖,本例是一个很基础的例子,所以有这些就够了,以后有扩展再增加。

   

    MyBatis依赖,iBatis从3.0版之后就改名为MyBatis。这个例子,大象没有使用Hibernate,而是采用更轻量级的MyBatis来作为持久层框架,使用很简单,也很灵活。另外,本例还用到了一个mybatis-spring插件,这是因为spring 3.0.5仅支持ibatis 2.0,所以需要这个插件来处理底层数据源等工作。

   

    本例用到了AOP,所以需要这两个依赖

   
    下面是其它一些必须的依赖,值得说明的就是,因为在本例中,大象对Service还是用的类,没有进行基于接口的实现方式,所以需要cglib这个依赖。另外,页面使用html作为展示层,使用freemarker标签处理动态数据。
    2、web.xml
    与ssh2的web.xml主要的区别就是替换Struts2的启动配置,改为Spring MVC的设置,配置如下:

   
   
    servlet-context.xml包含容器启动时,所要执行的内容,而service-context.xml则是接下来由spring上下文监听器对其进行扫描执行。这两个配置文件可以合并成一个,大象为了便于管理,并且为了使用spring上下文,写成了两个文件。如果我们不指定init-param配置,默认的,在服务器启动时,会在WEB-INF目录下查找命名规则为<servlet-name>-servlet.xml的文件,对应到这里就是ssm3-servlet.xml文件,大象统一将所有文件都放在了classpath下面。
    3、servlet-context.xml
    Spring MVC启动时的配置文件,包含组件扫描、url映射以及设置freemarker参数,让spring不扫描带有@Service注解的类。为什么要这样设置?因为servlet-context.xml与service-context.xml不是同时加载,如果不进行这样的设置,那么,spring就会将所有带@Service注解的类都扫描到容器中,等到加载service-context.xml的时候,会因为容器已经存在Service类,使得cglib将不对Service进行代理,直接导致的结果就是在service-context中的事务配置不起作用,发生异常时,无法对数据进行回滚。另外能够将REST URL解析为请求映射的是DefaultAnnotationHandlerMapping这个类,它在启动时,对Controller中所有标注了@RequestMapping注解的方法,都放到了一个HandlerMapping对象中,当有请求时,就在这个对象中进行查找是否有与之匹配路径的处理方法,有则执行,没有就会输出一个Not Page Found警告信息。
   
    展示层使用freemarker模板引擎,为了便于编辑,大象在这里使用html作为展示页。Spring框架对freemarker进行了集成与封装,配置起来非常简单。主要是定义FreeMarker视图解析器与属性配置,网上有很多关于这些属性含义的介绍,大象就不在这里啰嗦了,后面讲到Spring MVC的时候会结合代码来进行说明。Spring MVC支持多种类型的视图文件。如:jsp、freemarker、velocity、tiles、jasperreports等。
   
    4、service-context.xml
    与ssh2里面的application.xml区别不大,主要是将hibernate那部分改为mybatis,还要将MybatisDao基类配置进来,以便Service类可以用注解的方式引入,然后就是扫描包路径,不扫描带有@Controller注解的类。因为这些类已经随容器启动时,在servlet-context中扫描过一遍了。
   
   
   
    5、mybatis-config.xml
    mybatis的主配置,里面包含了POJO的映射文件,这里了解一下就行,后面的章节会对这些进行说明,熟悉ibatis的朋友就很简单了,可以直接跳过。
   

    到此,关于配置文件的说明就讲完了,因为这个SSM3的例子采用maven来构建,与之前的SSH2不一样,大象对配置文件进行了简要的说明,使用maven的好处,大家应该看出来了,它对于开发构建来说显得简单一些,可以使你不需要到处去找jar包,也不用你去担心版本不一致的问题,另外,对于依赖的jar包,它还能自动去查找它自己的依赖,这可以减少我们很多不必要的重复劳动。下一章,我将分析下本例的层次结构与MyBatis的简单运用。
  • 大小: 85.3 KB
  • 大小: 120.6 KB
  • 大小: 57.9 KB
分享到:
评论

相关推荐

    Spring MVC 核心流程图

    Spring MVC 核心流程图,清晰介绍了spring mvc中的控制流程

    最全最经典spring-mvc教程

    Spring MVC 是一款强大的Java Web开发框架,用于构建高效、可维护和模块化的Web应用程序。它作为Spring框架的一部分,提供了一种优雅的方式来处理HTTP请求和响应,使得开发者可以专注于业务逻辑而不是底层实现。在这...

    Spring MVC 4.2.3

    Spring MVC是Spring框架的一个核心模块,专为构建Web应用程序而设计。它提供了模型-视图-控制器(MVC)架构,使开发者能够有效地分离业务逻辑、数据处理和用户界面。在"Spring MVC 4.2.3"版本中,我们看到了一系列的...

    Spring MVC 教程快速入门 深入分析

    三、Spring MVC核心流程图:描述了Spring MVC处理请求的流程,包括前端控制器接收请求,经过分发器分发给具体的控制器,然后由控制器处理业务逻辑,最后将结果返回给用户。 四、Spring MVC DispatcherServlet说明:...

    Mastering Spring MVC 4(2015.09)源码

    在2015年的版本中,Spring MVC 4已经相当成熟,提供了许多特性来简化开发流程并提高开发效率。在这个"Mastering Spring MVC 4(2015.09)源码"中,我们可以深入理解这个框架的核心概念和实际应用。 首先,Spring MVC ...

    Spring MVC + Mybatis+Spring实现的个人博客系统

    这是一个基于Spring MVC、Mybatis和Spring框架实现的个人博客系统,涵盖了Web开发中的后端架构设计、数据库管理和前端展示等多个方面。以下将详细介绍这个系统的关键知识点: **1. Spring MVC** Spring MVC是Spring...

    Spring MVC所需jar包

    这个框架提供了模型-视图-控制器(MVC)设计模式的实现,简化了Java Web应用的开发流程,提高了代码的可测试性和可维护性。 在 Spring MVC 的开发中,需要用到一系列的 jar 包来支持其功能。这些 jar 包通常包括...

    Spring MVC使用Demo

    通过分析这些文件,你可以看到Spring MVC的实际应用,加深对其工作流程的理解。 总之,"Spring MVC使用Demo"是一个很好的学习资源,涵盖了从环境搭建到实际编码的全过程。通过学习和实践,开发者能够熟练掌握Spring...

    spring mvc mybatis 整合源码,带数据库脚本,带详细注释

    Spring MVC 和 MyBatis 是两个在Java Web 开发中广泛使用的框架。Spring MVC 作为Spring...通过研究源码,你可以掌握Web应用的开发流程,理解Spring MVC和MyBatis的协同工作方式,以及如何在实际项目中有效利用它们。

    基本的spring mvc + spring security实现的登录(无数据库)

    - 理解Spring MVC的请求处理流程和配置方式。 - 学习Spring Security的核心概念,如认证、授权和过滤器链。 - 掌握如何在没有数据库的情况下模拟用户认证过程。 8. **实践应用**: - 可以扩展此项目,添加...

    Spring mvc 教程

    ### Spring MVC 教程知识点详解 #### Spring Web MVC 框架简介 Spring Web MVC 是 Spring Framework 的一个重要组成部分,主要用于构建基于 Java 的 Web 应用程序。它提供了一个灵活且强大的 MVC 实现,使得开发者...

    Spring MVC 简单Demo

    通过这个简单的Demo,我们可以了解到Spring MVC的基本工作流程:从HTTP请求到DispatcherServlet,再到Controller处理,然后返回视图名,最后由View Resolver找到视图资源进行渲染。这个过程展示了Spring MVC如何将...

    Spring MVC 基础实例源码01

    通过分析这些源码,你可以更好地理解Spring MVC的工作流程和各个组件的作用。对于初学者来说,动手实践是最有效的学习方式,你可以尝试运行这些示例,观察它们如何响应不同请求,逐步掌握Spring MVC的基础知识。

    spring mvc 的入门级资料

    在 Spring MVC 中,核心流程图如下: 1. 客户端发送 HTTP 请求 2. DispatcherServlet 接收到请求,并将其转发给 HandlerMapping 3. HandlerMapping 将 URL 映射到 Controller 中的方法上 4. HandlerAdapter 将 ...

    spring MVC简单示例

    这个"spring MVC简单示例"是为了帮助初学者理解Spring MVC的基本工作原理和配置,通过实践这个例子,你可以了解到如何创建一个简单的Controller、配置视图解析器并建立一个基本的请求处理流程。随着对Spring MVC的...

    开发Spring MVC应用程序补充—程序源码下载.rar_spring_spring mvc_spring mvc 源码_sp

    标题中的"开发Spring MVC应用程序补充—程序源码下载.rar_spring_spring mvc_spring mvc 源码_sp"表明这是一个关于Spring MVC框架的开发教程,其中包含了源代码供学习者参考。Spring MVC是Spring框架的一个核心组件...

Global site tag (gtag.js) - Google Analytics