`
江南白衣
  • 浏览: 548391 次
  • 来自: 广州
社区版块
存档分类
最新评论

简化Spring(3)--Controller层

阅读更多
    作者:江南白衣 

    Struts与Webwork的扇子请跳过本篇。

    MVC不就是把M、V、C分开么?至唯物朴素的做法是两个JSP一个负责View,一个负责Controller,再加一个负责Model的Java Bean,已经可以工作得很好,那时候一切都很简单。
    而现在为了一些不是本质的功能,冒出这么多非标准的Web框架,实在让人一阵郁闷。像Ruby On Rails那样简捷开发,可用可不用,而且没有太多的限制需要学习的,比如Webwork这型还可以考虑。但像Struts那样越用框架越麻烦,或者像Tapestry那样有严重自闭倾向,额上凿着"高手专用玩具"的,用在团队里就是不负责任的行为了。

    so,我的MVC方案是使用Spring MVC的Controller接口,写最普通的JavaBean作为Controller,本质就和当年拿JSP作Controller差不多,但拥有了Spring IOC的特性。
    之所以用这么消极的选择标准,是因为觉得这一代MVC框架注定了只是一段短暂的,过渡的技术,不值得投资太多精力和团队学习成本。

1. 原理
     Spring MVC按植物分类学属于Martin Flower〈企业应用模式〉里的静态配置型Front Controler,使用DispatchServlet截获所有*.do的请求,按照xml文件的配置,调用对应的Command对象的handleRequest(request,response)函数,同时进行依赖对象的注入。
     我们的Controller层,就是实现handleRequest(request,response)函数的普通JavaBean。

2. 优势
    
Spring MVC与struts相比的优势:
     一是它的Controller有着从松到紧的类层次结构,用户可以选择实现只有一个HandleRequest()函数的接口,也可以使用它有很多回调函数的SimpleFormController类。
     二是不需要Form Bean,也不需要Tapestry那所谓面向对象的页面对象,对于深怕类膨胀,改一个东西要动N个地方的人最适合不过。
     三是不需要强XML配置文件,宣告式编程是好的,但如果强制成框架,什么都要在xml里面宣告,写的时候繁琐,看的时候也要代码配置两边看才能明白就比较麻烦了。
 
     那Webwork呢?没有实战过,不过因为对MVC框架所求就不多,单用Spring MVC的Controller已经可以满足需求,就不多搞一套Webwork来给团队设坎,还有给日后维护spring,ww2之间的版本升级添麻烦了。真有什么需要添加的,Spring MVC源代码量很少,很容易掌控和扩展。
 
3.化简
3.1. 直接implement Controller,实现handleRequest()函数
      首先,simple form controller非我所好,一点都不simple。所以有时我会直接implement Controller接口。这个接口的唯一函数是供Front Controller调用的handleRequest(request,response)。
      如果需要application对象,比如想用application.getRealPath()时,就要extends webApplicationObjectSupport。

3.2.每个Controler负责一组相关的action
       我是坚决支持一个Controler负责多个action的,一个Controler一个action就像一个function一个类一样无聊。所以我用最传统的方式,用URL参数如msg="insert"把一组相关action交给一个Controler控制。ROR与制作中的Groovy On Rails都是这种模式,Spring也有MultiActionController支持。
       以上三者都是把URL参数直接反射为Controller的函数,而Stripes的设计可用annotation标注url action到响应函数的映射。
      
3.3.xml宣告式编程的取舍 
    我的取舍很简单,反正Spring没有任何强制,我只在可能需要不重新编译而改变某些东西的时候,才把东西放在xml里动态注入。jsp路径之类的就统统收回到controller里面定义.
 
3.4.Data Binder
       Data Binder是Controller的必有环节,对于Spring提供的DataBinder,照理完全可用,唯一不爽是对象如果有内嵌对象,如订单对象里面包含了Customer对象,Spring需要你先自行创建了Customer对象并把它赋给了Order对象,才可能实现order.customer.customer_no这样的绑定。我偷懒,又拿Jakarta BeanUtils出来自己做了一个Binder。

3.5.提取基类
      最后还是忍不住提取了一个基类,负责MultiAction和其他一些简便的方法。Sprnig的MultiActionController做得太死,规定所有函数的第1,2个参数必须是request和response,不懂动态的,温柔的进行参数注入。

      
      经过化简再化简,已经是很简单一个Java Bean ,任谁都可以轻松上手,即使某年某月技术的大潮把现在所有MVC框架都淹没了,也不至于没人识得维护。

相关文章
简化Spring(1)--配置文件
简化Spring(2)--Model层
简化Spring(3)--Controller层
简化Spring(4)--View层


 

分享到:
评论

相关推荐

    SpringDemo-master.zip

    在`src/main/java`目录下,我们预期会看到Spring的Controller、Service、DAO层的实现。Controller层负责接收HTTP请求并调用Service层的方法,Service层则封装了业务逻辑,而DAO层则通过MyBatis的Mapper接口与数据库...

    官方原版spring-framework-4.3.18.RELEASE.zip

    Spring Framework支持多种开发模式,比如模型-视图-控制器(Model-View-Controller,MVC)架构,用于构建Web应用。Spring Data提供了一组模块,简化了与各种数据存储的交互,包括JDBC、ORM框架如Hibernate和MyBatis...

    spring-5.3.9-dist.zip

    在Web层,Spring MVC(Model-View-Controller)是一个强大的MVC框架,用于构建高性能、灵活的Web应用程序。它提供了请求处理、视图解析、模型绑定等功能,与其他Spring组件紧密集成,如Spring Security用于安全控制...

    spring-boot-reference2018最新版

    Spring Boot是基于Spring Framework的轻量级开发框架,它旨在简化Spring应用的初始搭建以及开发过程。通过内嵌Tomcat或Jetty服务器,可以无需额外配置就能实现应用的部署。 2. **起步依赖(Starters)** Spring ...

    struts2-spring-plugin-2.2.1.jar

    3. **Spring事务管理**:插件允许Struts2的Action方法直接参与到Spring的事务管理中,无需关心事务的开启和提交。 4. **AOP集成**:结合Spring的AOP能力,可以为Struts2的Action提供切面增强,如性能监控、日志记录...

    spring3--最小系统

    描述中的“博文链接:https://iluoxuan.iteye.com/blog/1724829”可能提供了更深入的讲解,包括如何从零开始设置Spring MVC 3项目,以及如何利用注解来简化配置。这篇文章可能会涵盖以下知识点: 1. **Spring MVC...

    spring boot-mybatis demo

    Spring Boot 是一个由 Pivotal 团队开发的框架,旨在简化初始搭建以及开发新 Spring 应用的复杂性。它集成了大量常用的第三方库配置,如数据源、JPA、事务管理、邮件服务等,使得开发者能够快速地创建一个独立的、...

    spring-mybatis-spring-1.3.2.tar.gz

    在"spring-mybatis-spring-1.3.2"中,MyBatis主要负责数据库操作,通过XML配置文件或者注解方式定义SQL语句,将Java对象与数据库记录进行映射,简化了数据访问层的开发工作。MyBatis与Spring的整合,实现了DAO(Data...

    spring-framework-3.2.3.RELEASE-dist.zip

    3. **AOP**:Spring的AOP模块允许开发者定义“切面”,实现代码的解耦和模块化。它可以用于日志记录、事务管理、权限控制等跨切面的业务逻辑,提高了代码的可维护性和可重用性。 4. **Web MVC**:Spring Web MVC是...

    Spring3-Mybatis-Spring3MVC所需架包

    "Spring3-Mybatis-Spring3MVC所需架包"这个标题揭示了我们需要关注的是这三个技术的整合,而描述则强调了这是为了实现一个简单的整合所需的库文件。下面,我们将深入探讨这些技术及其整合的关键知识点。 **1. ...

    spring-boot-04-web-restfulcrud

    Spring Data JPA是Spring的一个模块,简化了ORM(对象关系映射)操作。我们将使用它与Hibernate集成,处理数据库交互。通过定义Repository接口,我们可以轻松地完成数据的CRUD操作,而无需编写大量的DAO层代码。 4...

    spring-boot-demo

    Spring Boot是Java开发中的一个热门框架,它由Pivotal团队提供,旨在简化Spring应用的初始搭建以及开发过程。Spring Boot通过提供开箱即用的设置,使得我们可以快速地创建独立的、生产级别的基于Spring的应用。本文...

    Spring3-Login-Annotaction.rar_login spring _spring 3 login_sp

    1. **Spring MVC**:Spring 3中的MVC(Model-View-Controller)模式用于构建Web应用。控制器类可能会使用`@Controller`注解来标识,而处理HTTP请求的方法可能会用`@RequestMapping`注解。 2. **依赖注入**:Spring ...

    spring-framework-2.5.6

    总结,Spring Framework 2.5.6版本在多个方面体现了其强大的功能和灵活性,无论是对于控制层、业务层还是数据访问层,都提供了全面且深入的支持。对于Java开发者来说,理解和掌握这个版本的Spring框架,无疑能极大地...

    springboot整合spring-data-jps

    Spring Data JPA则是Spring框架的一部分,用于简化Java Persistence API(JPA)的使用,允许开发者以声明式的方式处理数据库交互。 **1. Spring Boot基本概念** - Spring Boot的核心特性包括自动配置、起步依赖和...

    Spring.NET-1.3.2

    3. **数据访问支持**:Spring.NET包含对多种数据访问技术的抽象,如ADO.NET、NHibernate、Entity Framework等,提供了一致的编程模型,使开发者能更轻松地切换数据库供应商。 4. **事务管理**:Spring.NET提供了...

    spring-5.3.8-dist.zip

    5. **Spring Data**:这是Spring框架的一个子项目,用于简化数据访问层的开发,支持多种数据存储技术,如JPA、JDBC、NoSQL数据库等。它通过提供统一的API和自动配置,使数据访问变得更加简单。 6. **Spring ...

    spring-boot-1-demo

    Spring Boot 是一个基于 Spring 框架的快速开发工具,它简化了新 Spring 应用程序的初始搭建以及开发过程。这个名为 "spring-boot-1-demo" 的项目是 Spring Boot 的一个入门示例,旨在帮助开发者理解如何创建并运行...

    spring.jar spring-webmvc-struts.jar spring-webmvc.jar

    标题中的"spring.jar"、"spring-webmvc-struts.jar"和"spring-web...此外,还需要了解Spring的安全模块(Spring Security)和数据访问模块(如Spring Data JPA),以及如何利用Spring Boot简化Spring应用的启动和配置。

Global site tag (gtag.js) - Google Analytics