`
jbm3072
  • 浏览: 211115 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Spring MVC 框架学习笔记之BaseCommandController和AbstractCommandController

阅读更多

 

Spring的BaseCommandController继承自AbstractController。在看BaseCommandController之前先看他的继承类AbstractCommandController是如何实现

AbstractController的handleInternalRequest方法的:

protected ModelAndView handleRequestInternal(HttpServletRequest request, HttpServletResponse response)
throws Exception {
Object command = getCommand(request);
ServletRequestDataBinder binder = bindAndValidate(request, command);
BindException errors = new BindException(binder.getBindingResult());
return handle(request, response, command, errors);
}
<style type="text/css">.csharpcode, .csharpcode pre { font-size: small; color: black; font-family: Consolas, "Courier New", Courier, Monospace; background-color: #ffffff; /*white-space: pre;*/ } .csharpcode pre { margin: 0em; } .csharpcode .rem { color: #008000; } .csharpcode .kwrd { color: #0000ff; } .csharpcode .str { color: #006080; } .csharpcode .op { color: #0000c0; } .csharpcode .preproc { color: #cc6633; } .csharpcode .asp { background-color: #ffff00; } .csharpcode .html { color: #800000; } .csharpcode .attr { color: #ff0000; } .csharpcode .alt { background-color: #f4f4f4; width: 100%; margin: 0em; } .csharpcode .lnum { color: #606060; } </style>

getCommand就是BaseCommandController中的方法。

protected Object getCommand(HttpServletRequest request) throws Exception {
return createCommand();
}
protected final Object createCommand() throws Exception {
if (this.commandClass == null) {
throw new IllegalStateException("Cannot create command without commandClass being set - " +
"either set commandClass or (in a form controller) override formBackingObject");
}
if (logger.isDebugEnabled()) {
logger.debug("Creating new command of class [" + this.commandClass.getName() + "]");
}
return BeanUtils.instantiateClass(this.commandClass);
}
<style type="text/css">.csharpcode, .csharpcode pre { font-size: small; color: black; font-family: Consolas, "Courier New", Courier, Monospace; background-color: #ffffff; /*white-space: pre;*/ } .csharpcode pre { margin: 0em; } .csharpcode .rem { color: #008000; } .csharpcode .kwrd { color: #0000ff; } .csharpcode .str { color: #006080; } .csharpcode .op { color: #0000c0; } .csharpcode .preproc { color: #cc6633; } .csharpcode .asp { background-color: #ffff00; } .csharpcode .html { color: #800000; } .csharpcode .attr { color: #ff0000; } .csharpcode .alt { background-color: #f4f4f4; width: 100%; margin: 0em; } .csharpcode .lnum { color: #606060; } </style>

createCommand创建了一个CommandClass的对象。

然后再看bindAndValidate方法:

protected final ServletRequestDataBinder bindAndValidate(HttpServletRequest request, Object command)
throws Exception {
ServletRequestDataBinder binder = createBinder(request, command);
BindException errors = new BindException(binder.getBindingResult());
if (!suppressBinding(request)) {
binder.bind(request);
onBind(request, command, errors);
if (this.validators != null && isValidateOnBinding() && !suppressValidation(request, command, errors)) {
for (int i = 0; i < this.validators.length; i++) {
ValidationUtils.invokeValidator(this.validators[i], command, errors);
}
}
onBindAndValidate(request, command, errors);
}
return binder;
}
<style type="text/css">.csharpcode, .csharpcode pre { font-size: small; color: black; font-family: Consolas, "Courier New", Courier, Monospace; background-color: #ffffff; /*white-space: pre;*/ } .csharpcode pre { margin: 0em; } .csharpcode .rem { color: #008000; } .csharpcode .kwrd { color: #0000ff; } .csharpcode .str { color: #006080; } .csharpcode .op { color: #0000c0; } .csharpcode .preproc { color: #cc6633; } .csharpcode .asp { background-color: #ffff00; } .csharpcode .html { color: #800000; } .csharpcode .attr { color: #ff0000; } .csharpcode .alt { background-color: #f4f4f4; width: 100%; margin: 0em; } .csharpcode .lnum { color: #606060; } </style>

这个方法首先创建了 DataBinder对象,然后,获取创建绑定对象时发生的错误。报错在errors。接下来绑定对象,调用onBind处理绑定事件;接下来应用Validator。然后调用onBindAndValidate来处理绑定和验证事件。最后返回binder。

处理完之后调用handle方法进行处理。

综上所述,AbstractCommandController具有两个功能:

1、将请求参数转换为Command对象。在该Controller中,我们设置一个object对象。然后BaseCommandController将请求的参数进行转换。如果请求参数有value值,就会调用object的的setValue对象来设置对象里的值。如果请求参数中有address.city.就会调用object中getAddress().setCity()方法来赋值。这个object可以是任意的object,唯一的要求就是这个object类没有参数。

2、对数据进行验证。在转换和验证时发生错误时,需要在handle(request, response, command, errors)中进行处理。

分享到:
评论

相关推荐

    Spring MVC Demo.doc

    总的来说,Spring MVC Demo展示了如何设置和使用Spring MVC框架来处理Web请求,包括配置DispatcherServlet、创建控制器类以及与视图的交互。通过这个简单的实例,我们可以更好地理解Spring MVC的各个组件以及它们在...

    毕设 外文文献翻译--Spring的web-MVC-构架模式

    Spring框架的Web MVC架构模式以其灵活性、可扩展性和强大的功能特性而著称。相较于Struts和WebWork等早期框架,Spring提供了更多样的选择和更简洁的开发方式,极大地提高了开发效率和代码质量。无论是对于初学者还是...

    外文翻译Spring的MVC构架模式

    Spring 的 Web MVC 构架模式与 Struts 和 WebWork 有许多不同之处,例如: * Spring 的 Web MVC 构架模式提供了一个更加灵活的和可扩展的架构。 * Spring 的 Web MVC 构架模式可以使得开发者可以更容易地重用代码和...

    外文翻译_Spring的web MVC 构架模式.docx

    本文档的翻译内容详细介绍了Spring MVC的核心概念、设计思想以及与其他框架如Struts和WebWork的区别。 1. **Spring MVC概述** Spring MVC框架是Spring应用架构的一部分,它不仅关注Web层,还提供了诸如bean配置、...

    Spring Web MVC framework中英文对照.pdf

    ### Spring Web MVC框架知识点概述 #### 一、Spring Web MVC框架简介 ...综上所述,Spring Web MVC框架以其简洁的设计、强大的功能以及良好的可扩展性而受到广泛欢迎,是构建现代Java Web应用程序的首选工具之一。

    毕设 外文文献翻译-Spring的web MVC构架模式.docx

    Spring的Web MVC框架与其他轻量级应用框架如Struts和Webwork相比,具有更广泛的功能和更高的灵活性。 1. **组件概述** - **DispatcherServlet**:作为入口点,接收并分发HTTP请求,通过配置的映射来决定调用哪个...

    springMVC比较常见的配置以API

    `BaseCommandController`是Spring MVC中用于处理表单提交的控制器,它继承自`AbstractCommandController`,并提供了处理命令对象(Command Object)的基础功能。然而,Spring 3.0之后,推荐使用`@ModelAttribute`...

    计算机外文翻译-Spring的web-MVC-构架模式.pdf

    【Spring的Web MVC构架模式】是Spring框架中的核心组件,用于构建Web应用程序。Spring MVC设计的核心是一个称为DispatcherServlet的前端控制器,它负责接收HTTP请求并分发到相应的处理器。这种架构模式允许开发者将...

    计算机外文翻译-Spring的web-MVC-构架模式.docx

    【Spring的Web MVC构架模式】是Spring框架中的核心组件之一,主要负责处理Web应用程序的模型、视图和控制器的交互。Spring MVC以其高度模块化和可配置性,为开发者提供了一种优雅的方式来构建Web应用。 1. **构架...

    外文翻译-Spring的web-MVC-构架模式讲解学习.pdf

    Spring的Web MVC架构模式是一种在Java开发中广泛使用的轻量级框架,用于构建高效、可测试和可维护的Web应用程序。该框架的核心是DispatcherServlet,它作为中央调度器,负责接收HTTP请求并将其转发给合适的处理器。...

    外文翻译-Spring的web-MVC-构架模式讲解学习 (2).pdf

    本文将深入探讨Spring Web MVC框架的设计理念、特点以及与Struts和WebWork等其他框架的区别。 1. Spring构架模式概述: Spring作为一个全面的application framework,不仅提供Web支持,还涵盖了诸如bean配置、面向...

    毕设外文文献翻译--Spring的webMVC构架模式.pdf

    与传统的Struts和WebWork等框架相比,Spring的Web MVC更注重组件的解耦和重用,强调业务逻辑与表现层的分离。 1. **组件解耦和模块化** Spring Web MVC的核心组件是DispatcherServlet,它作为请求分发器,负责接收...

    外文翻译_Spring的webMVC构架模式.pdf

    综上所述,Spring的Web MVC构架模式以其灵活性、模块化和对标准技术的友好支持,成为了构建现代企业级Web应用程序的首选框架之一。开发者可以根据具体项目需求,选择Spring MVC的各个部分,构建出高效、可维护的Web...

    计算机外文翻译-Spring的web-MVC-构架模式 (2).pdf

    【Spring的Web MVC构架模式】是Spring框架的重要组成部分,主要负责处理Web应用程序中的用户请求。Spring MVC的设计理念是提供一种灵活且可扩展的架构,让开发者能够更好地分离业务逻辑和表示层,从而提高代码的可...

    外文翻译-Spring的web MVC 构架模式.pdf

    【Spring的Web MVC构架模式】是Spring框架的重要组成部分,主要设计用于构建高效、可测试且易于维护的Web应用程序。Spring MVC提供了一种基于模型-视图-控制器(MVC)架构模式的解决方案,旨在清晰地分离应用程序的...

    外文翻译-Spring的web-MVC-构架模式.pdf

    【Spring的Web-MVC构架模式】是Spring框架的核心组件之一,主要负责处理Web应用程序的请求和响应。本文档对外文原文进行了翻译,探讨了Spring如何与其他轻量级应用框架如Struts和Webwork区分开,并阐述了Spring的...

    毕设外文文献翻译-Spring的webMVC构架模式 (2).docx

    总的来说,Spring的Web MVC模式以其灵活性、可扩展性和解耦特性,成为了Java Web开发中广泛采用的框架之一。它简化了Web应用的开发,提升了代码的可读性和可维护性,同时提供了与各种技术和工具的优秀集成。

    毕设 外文文献翻译-Spring的web MVC构架模式 (3).docx

    为了适应复杂的应用场景,Spring提供了多种抽象控制器,如AbstractController、AbstractCommandController、MultiActionController、SimpleFormController和AbstractWizardFormController,允许开发者按需选择。...

Global site tag (gtag.js) - Google Analytics