Spring MVC由于纳入Spring强大的框架体系而让人感觉到无比的强大。但对表单处理流程层面还是有些问题。一些初级用户遇到的大多数问题都可以通过重载相关的方法就能解决,例如动态路由不同的视图、与Request,Session相关的验证等。我这里提出的问题主要是Spring体系框架无法解决的问题,如果我们引入自己的解决方案,将会造成大量的冗余代码和频繁地数据库访问等问题。首先我对这个问题做一描述:
在Spring MVC表单处理中基本的思路是(精简了一些):
1、通过Http Method判断是初始化表单页面还是提交表单。如果是POST认为是提交表单,非POST认为是初始化表单输入页面。
2、非POST的过程基本是:formBackingObject->showNewForm->showForm->referenceData
3、POST的过程是:formBackingObject->bind and validate->onSubmit->showForm->referenceData
无论是POST还是非POST(最常见的是GET)在所有的过程中我们经常有两个需求:
1、整个过程中共享数据如何传递(例如在formBackingObject中为了准备对象从数据库导入的数据如何直接传递到其它各个环节)。唯一能解决的一个入口是errors.getModel,但在formBackingObject中根本没法得到,因为errors的形成是在 formBackingObject之后的。这也体现出Spring MVC在设计上的一个不合理,Model就Model为何要用Exception/Errors的方式来维护了。Spring MVC在很多地方都用errors.getModel来获得Model的传递。有些朋友可能想到在Command Object中进行自己的维护,但这种危险是显而易见的,因为Spring绑定的时候的数据来自客户端,它可能随意填充和覆盖我们维护的数据。
2、安全问题。我们解决安全无非有两种方式:从整体功能级别的能访问和不能访问和根据业务逻辑程序的检查。针对后者Spring MVC就会出现问题,例如formBacking意味着向用户显示数据,很可能需要进行权限逻辑,但往往进行权限逻辑又要进行大量的数据库操作,这和第一个问题结合起来,将会出现比较严重的频繁访问数据库问题。
这个问题就Spring2.5.2版本是有不足的,目前解决简便的解决方法没有。除非重写(变更流程不是一个框架让普通用户应该做的)一下Spring表单处理的核心流程方法。
分享到:
相关推荐
Spring MVC 是一个强大的Java web开发框架,用于构建可维护、可扩展且结构良好的Web应用程序。这个框架基于Spring IoC(Inversion of ...实践中遇到的问题和解决方法也会加深对Spring MVC的理解,有助于提升开发技能。
针对上述问题,有两种主要的方法可以解决 Spring MVC 无法直接接收 List 类型参数的问题: ##### 方法一:使用 jQuery 的 traditional 参数 在 AJAX 请求中添加 `traditional: true` 参数,以确保数组类型的参数被...
《Spring MVC与MYBatis企业应用实战》是一本深度探讨如何在实际企业环境中集成和运用Spring MVC和MYBatis两大主流技术的书籍。Spring MVC作为Spring框架的重要组成部分,是Java Web开发中的强大控制器,而MYBatis则...
6. **@Service** 和 **@Repository**:这两个注解通常用于标记服务层和数据访问层的类,以便Spring能够自动扫描并管理这些bean。 7. **DAO(Data Access Object)**:DAO层是数据库操作的接口,用于与数据库进行...
本项目 "spring-mvc-study" 对于初学者来说是一个很好的起点,它提供了一个基础的 Spring MVC 框架结构,并且鼓励有问题的交流,可以帮助学习者理解如何搭建、配置和运行一个基本的 Spring MVC 应用。通过阅读和实践...
【标题】"Spring MVC+MyBatis项目代码"是一个针对初学者的实践教程,它结合了两种主流的Java Web开发框架——Spring MVC和MyBatis,以帮助学习者理解如何在实际项目中整合这两个框架。Spring MVC是Spring框架的一...
《Spring MVC MYBatis企业应用实战+源码》是一份深度探讨如何在企业环境中整合并高效使用Spring MVC和MyBatis两大主流Java框架的资源包。这个资源包含了一本PDF电子书《spring+mybatis企业应用实战》以及配套的源...
模型负责业务逻辑和数据处理,视图负责用户界面展示,而控制器则协调这两个组件,处理用户的请求并更新模型。 2. **Spring MVC 架构** - **DispatcherServlet**:作为整个流程的起点,它是 MVC 的核心,负责接收...
本篇文章将详细讲解如何在MyEclipse2013环境中创建一个基本的Spring MVC HelloWorld示例,同时也会提供两个文档资源——`MyEclipse2013+SpringMVCHelloWorld.docx`和`SPring Hello World 说明.docx`,以帮助读者深入...
MVC模式将应用逻辑分为三个主要部分:模型(Model)处理数据,视图(View)负责展示,而控制器(Controller)协调这两个部分。Spring MVC使得开发者能够轻松地创建松耦合、可测试和可维护的Web应用。 Maven是一个...
3. **整合mybits和Spring MVC**:整合这两个框架通常涉及到Spring的ApplicationContext配置,可能需要配置Bean定义、AOP切面、数据源、事务管理等。同时,mybits的组件可能需要适配Spring的生命周期,通过Spring的...
通过这个简单的Spring MVC登陆示例,我们可以理解如何在Spring MVC框架下处理表单提交,以及如何利用控制器和视图进行数据展示。这只是一个基础的起点,实际的Web应用中,还需要考虑更多的功能和安全细节。
4. **@Service 和 @Repository**:`@Service`注解标记业务逻辑层的类,而`@Repository`用于数据库访问层,这两个注解配合Spring的依赖注入,可以实现服务和数据访问对象的自动装配。 5. **ModelAndView**:这是一个...
`ModelAndView`对象包含了两个主要部分:模型(Model)和视图(View)。模型是用来携带数据的,而视图则是定义了如何展示这些数据。 - **选择ViewResolver**:`DispatcherServlet`会根据返回的`ModelAndView`中的...
- **使用 `@RequestBody` 和 `@ResponseBody`**:这两个注解分别用于读取和写入 JSON 数据。 - **JSON 对象绑定**:Spring 支持直接将 JSON 字符串转换为 Java 对象。 ```java @RequestMapping(value = "/ajax", ...
《Spring MVC+MYBatis企业应用实战》这本书深入探讨了两个在Java企业级开发中广泛使用的框架——Spring MVC和MYBatis的集成与应用。Spring MVC作为Spring框架的一部分,是处理Web请求的强大工具,而MYBatis则是一个...
Spring Web模块和Spring Web MVC模块是Spring框架中的两个关键组成部分,它们在构建Web应用程序时起着至关重要的作用。 Spring Web模块(spring-web-5.2.3.RELEASE.jar)主要负责提供Web相关的功能支持,包括HTTP...
Spring 提供了JdbcTemplate和NamedParameterJdbcTemplate,这两个模板类简化了JDBC操作,减少了手动处理连接、预编译语句和结果集的代码。它们提供了事务管理、异常转换等功能,使得数据库操作更加健壮。 **Spring ...
2. **高性能**:Spring MVC 在设计时考虑到了性能问题,编写高性能的应用程序变得更为容易。 3. **灵活性**:Spring MVC 极其灵活,可以轻松集成其他技术或框架,例如数据访问技术等。 #### 二、Spring MVC 核心...
3.RequestParam和ModelAttribute:这两个注解用于方法的参数绑定,RequestParam通常与HTTP请求参数绑定,ModelAttribute可以绑定整个请求对象。分析这部分源代码,可以让我们了解Spring如何处理参数绑定的逻辑。 4....