`
yiwanxinyuefml
  • 浏览: 945 次
  • 性别: Icon_minigender_1
  • 来自: 厦门
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

小探Spring 2.5 MVC中基于注解的Controller控制器(转)

阅读更多
2.5发行版本中,开始相对比较全面的支持注解,通过注解可以大大简化Java EE应用开发的配置、精简开发人员的工作量从而提高开发效率。对于Spring MVC而言,我认为注解带来的好处更多:

1. 开发人员对Controller的代码实现变得更加灵活,不需要继承任何AbstractController等Controller。
2. 可以通过@Controller注解声明将该类的实例添加到Spring 容器中管理,而无需通过Spring MVC的配置文件来配置,大大简化了Spring MVC相关的配置量
3. 细粒度处理各种request请求,针对最基本的统一请求的GET/POST方式进行不同处理自然不在话下,还可以对拥有不同请求参数的同一 request请求分别用不同的方法处理,总之就是两个字:灵活!
4. 更加丰富的参数绑定机制,你可以在你的Controller方法定义中,通过注解将某个或者某些参数直接绑定到Controller方法的参数上,从而在 方法体内,你可以完全对HttpServletRequest视而不见,直接使用已经绑定好的参数。

Spring 2.5 中Web MVC的新特性带来的全新感觉还是让我们到真刀真枪的项目实践中去体会吧,这里我只做一个抛砖引玉,各位看官请跟着在下去体验一下2.5种的 Controller开发流程吧。

首先,我们需要告诉Spring容器,让他知道需要把我们的Controller 类加载到容器中,那么怎么做到呢?

第一, 通过以下配置启用注解
Java 代码
<context:annotation-config />  

<context:annotation-config />

第二, 在我们的Controller类定义之前加上@Controller注解
Java 代码
@Controller  
public class SimpleController {}  

@Controller public class SimpleController {}

第三, 在配置文件中添加一个类路径配置,让Spring 容器知道需要扫描该类路径下所有可以加载到容器中的类。
Java 代码
<context:component-scan base-package="com.test.web" />  

<context:component-scan base-package="com.test.web" />


然后,我们需要配置相应的HandlerMapping来处理类型级别的注解,例如@Controller,以及HandlerAdapter来 处理方法级别的注解:
Java 代码
<bean id="urlMapping"  
class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping">  
    <property name="interceptors" ref="interceptors" />  
</bean>  
<bean  
    class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter" />  

<bean id="urlMapping" class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping">  <property name="interceptors" ref="interceptors" /> </bean> <bean  class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter" />


到这里,我们的准备工作已经就绪,让我们进入Controller的开发。
以下是一个简单的Controller例子,让我们跟着这个例子来了解一下如何开发Controller:
Java 代码
@Controller  //注释1  
@RequestMapping("/menu_creator.do") //注释2  
public class MenuCreaterController {  
  
    @Autowired(required = false)  //注释3  
    private IJMSService jmsService;  
  
    @Autowired  
    private IMenuManager manager;  
  
    @ModelAttribute("treenodes") // 注释4  
    public List<Menu> getMenuList() {  
        return manager.getMenuList();  
    }  
  
    /** 
     * Show the menu creator form page 
     *  
     * @param menu 
     *            menu object 
     * @return menu_creator_view 
     */  
    @RequestMapping(method = { RequestMethod.GET })  //注释5  
    public String handleShow(@ModelAttribute("menu") Menu menu) {//注释6  
        // menu.setParent(new Menu());  
        return "menu_creator_view";  
    }  
  
    /** 
     * Process the menu creating 
     *  
     * @param menu 
     *            the menu object 
     * @param bindingResult 
     *            the binding errors result 
     * @return a redirect view to menu_show.do 
     */  
    @RequestMapping(method = { RequestMethod.POST })  
    public ModelAndView handleProcess(Menu menu, Errors bindingResult,  
            @RequestParam("parentid") Long parentId) { //注释7  
        Menu parent = new Menu();  
        parent.setId(parentId);  
        menu.setParent(parent);  
        manager.createMenu(menu);  
        if (jmsService != null)  
            jmsService.send();  
        return new ModelAndView(new RedirectView("menu_show.do"));  
    }  
}  

@Controller  //注释1 @RequestMapping("/menu_creator.do") //注释2 public class MenuCreaterController {   @Autowired(required = false)  //注释3  private IJMSService jmsService;   @Autowired  private IMenuManager manager;   @ModelAttribute("treenodes") //注释4  public List<Menu> getMenuList() {   return manager.getMenuList();  }   /**   * Show the menu creator form page   *    * @param menu   *            menu object   * @return menu_creator_view   */  @RequestMapping(method = { RequestMethod.GET })  //注释5  public String handleShow(@ModelAttribute("menu") Menu menu) {//注释6   // menu.setParent(new Menu());   return "menu_creator_view";  }   /**   * Process the menu creating   *    * @param menu   *            the menu object   * @param bindingResult   *            the binding errors result   * @return a redirect view to menu_show.do   */  @RequestMapping(method = { RequestMethod.POST })  public ModelAndView handleProcess(Menu menu, Errors bindingResult,    @RequestParam("parentid") Long parentId) { //注释7   Menu parent = new Menu();   parent.setId(parentId);   menu.setParent(parent);   manager.createMenu(menu);   if (jmsService != null)    jmsService.send();   return new ModelAndView(new RedirectView("menu_show.do"));  } }


注释1:@Controller注解标明该类需要Spring容器自动加载

注释2:@RequestMapping注解标识该Controller处理来自/menu_creator.do的请求

注释3:@Autowired告知Spring容器在实例化加载该 Controller的时候,需要自动注入该类的jmsSevice属性值,这里默认是根据类型自动注入,也就是说在容器中查找是和该属性相同类型的实 例,注入到该属性上来。而required=false表示,如果没有找到类型匹配的实例,那么就不注入这个属性的值,因为Spring 2.5中默认是required=true也就是必须找到相应的值来完成注入,否则会报异常。

注释4:@ModelAttribute属性,会将该属性标示的方法返回值作为一个Model Attribute放到Model中以供页面使用,假设一个用户注册页面中有一项选择国家,那么我们可以将国家列表通过一个单独的方法来获取,再通过 @ModelAttribute注解来将其置入Model中供页面使用。这样做的好处,是将一些比较共用的页面数据,从Controller方法中分离出 来,从而达到通用的目的。

注释5:此处又用了一个@RequestMapping注解,这里的这个注解是为了细粒度区分各个Controller方法,该例中针对 Request的POST和GET两种方式分别通过两个方法来处理。以GET形式请求menu_creator.do那么我们返回给客户端一个用户填写交 互数据的页面,而当用户点击提交按钮,则是通过POST方式提交到相同的menu_creator.do,只不过此时处理这个请求的方法变成了另外一个处 理用户提交数据的Controller方法。
此外,我们注意到此处返回值是一个String类型,Spring MVC会认为这是你告诉他返回的视图名称,当然此处你也可以返回一个ModelAndView类型,假若你什么也不返回-void,那么Spring会试图查找和你的请求URL同名的视图进行匹配。

注释6:@ModelAttribute同样可以用在Controller方法的参数上,标明该参数经过处理之后,需要添加到Model数据模型 中,以供View层使用。

注释7:此处参数中有一个Menu参数,Spring MVC会对Request中的Parameter参数进行绑定处理,将匹配的参数赋值到Menu的某些属性上,比如有一个参数叫做country,那么会 通过Menu类中的secCountry()方法绑定到Menu参数实例中,以供方法体内使用。而@RequestParam注解标明将Request中 具有某个名称的参数绑定到方法参数上,以供方法体内使用。

分享到:
评论

相关推荐

    spring2.5 mvc 完整项目

    在Spring 2.5中,可以通过定义自定义的异常处理器,结合`@ExceptionHandler`注解来处理特定的异常。此外,全局异常处理类可以统一管理所有未被特定处理器捕获的异常,提高代码的可维护性。 三、MySQL数据库脚本 在...

    Spring2.5MVC--基于注解的附件上传

    这篇博客"Spring2.5 MVC -- 基于注解的附件上传"详细介绍了如何在Spring MVC 2.5中实现这一功能。 首先,我们需要了解Spring MVC中处理文件上传的基本概念。文件上传主要涉及到两个组件:`MultipartResolver`和`@...

    使用Spring 2.5 基于注解驱动的 Spring MVC详解

    在 Spring 2.5 中,Spring MVC 框架引入了注解驱动功能,使得开发者可以使用注解来配置 Controller,代替传统的基于 XML 的配置方式。这种方式使得 Controller 的开发变得更加灵活和方便。 使用 @Controller 注解 ...

    spring2.5 mvc_ibatis2

    总结,Spring 2.5 MVC与iBatis 2的整合应用,既保留了Spring MVC的灵活控制,又充分利用了iBatis的SQL定制能力,是企业级开发中常见的技术栈。理解并掌握这两者的结合,能够提升开发效率,打造高性能的Web应用。

    Spring 2.5 基于注解驱动的Spring MVC

    Spring 2.5引入了一种基于注解的新方式来驱动Spring MVC框架,使得开发者能够更加简洁、直观地配置和管理控制器。这一变化显著提升了开发效率,减少了XML配置文件的复杂性,同时也使得代码更加模块化。 ### 1. 基于...

    使用 Spring 2.5 基于注解驱动的 Spring MVC

    在Spring 2.5中,无需让Controller继承特定的接口或者在XML配置文件中定义请求和Controller之间的映射关系,仅需通过使用注解即可使一个普通的Java对象(POJO)具备Controller的功能。 #### 注解驱动的重要性 注解...

    Spring 2.5 mvc例子

    Spring MVC 是 Spring 框架的一个重要组成部分,它是一个用于构建 Web 应用程序的模型-视图-控制器(MVC)框架。在 Spring 2.5 版本中,这个框架已经相当成熟,为开发者提供了强大的功能和灵活的配置选项。 ### 1. ...

    使用 Spring 2.5 基于注解驱动的 Spring MVC.doc

    本文将深入探讨Spring MVC注解的功能及其在Spring 2.5中的应用。 首先,Spring 2.5中的注解驱动的Spring MVC允许开发者摆脱对XML配置的依赖,从而减少了配置文件的复杂性。例如,传统的Spring MVC配置通常需要在`...

    Spring 2.5 基于注解驱动的 Spring MVC.docx

    总结,Spring 2.5 引入的基于注解的 Spring MVC 配置极大地简化了开发流程,提高了开发效率,降低了维护成本。通过注解,我们可以快速地定义控制器、处理请求、注入依赖,使得代码结构更加清晰,也更容易理解和维护...

    spring2.5基于注解例子程序

    `@Autowired`注解是Spring 2.5中的另一个重要特性,它能自动匹配并注入依赖的bean,无需在XML中配置。同时,`@Qualifier`注解可用于指定具体要注入哪个bean,特别是在存在多个相同类型的bean时。 7. **Spring的jar...

    Spring2.5_基于注解驱动的SpringMVC

    在Spring2.5中,注解驱动的核心概念主要体现在`@Controller`和`@RequestMapping`这两个注解上。这些注解简化了Controller的定义和请求处理过程,增强了SpringMVC框架的易用性和灵活性。 - **`@Controller`**: 此...

    struts2.0 spring2.5 hibernate3.2 注解最新框架

    在Spring2.5中,注解如`@Autowired`、`@Service`、`@Repository`和`@Controller`引入了无XML配置的可能性。`@Autowired`自动装配依赖,`@Service`、`@Repository`和`@Controller`分别用于标记业务、数据访问和控制层...

    Spring2.5-中文参考手册chm.zip

    Spring框架的核心特性包括依赖注入(Dependency Injection,DI)、面向切面编程(Aspect-Oriented Programming,AOP)以及模型-视图-控制器(Model-View-Controller,MVC)架构模式。在Spring 2.5中,这些主要功能...

    Spring2.5 MVC 处理管道使用参考手册

    在Spring 2.5中,你可以自定义HandlerMapping实现来满足特定的映射规则,比如基于URL、注解或者bean的名称进行映射。例如,`SimpleUrlHandlerMapping`根据URL路径匹配处理器,而`RequestMappingHandlerMapping`则是...

    使用 Spring 2_5 基于注解驱动的 Spring MVC

    1. **注解驱动的Controller**:在Spring 2.5中,你可以使用`@Controller`注解来标记一个类作为Spring MVC的控制器。这个注解告诉Spring该类包含处理HTTP请求的方法。例如: ```java @Controller public class ...

    使用 Spring 2.5 基于注解驱动的 Spring.pdf

    在Spring 2.5版本中,框架显著增强了对注解的支持,特别是针对SpringMVC(Model-View-Controller)模块,引入了基于注解的配置方式。这一改进不仅简化了开发流程,提高了框架的灵活性与易用性,还标志着SpringMVC在...

    spring 2.5中文帮助文档

    4. **注解支持**:在Spring 2.5中,注解开始广泛应用于配置,如@Service、@Repository、@Controller等,这减少了对XML配置的依赖,使代码更简洁。 5. **数据访问集成**:Spring支持多种数据库访问技术,包括JDBC、...

    配置整合DWR3.0和Spring2.5使用annotation注解

    在本文中,我们将探讨如何将Direct Web Remoting (DWR) 3.0与Spring 2.5框架整合,并利用注解(Annotation)进行配置。DWR是一个允许JavaScript与Java服务器端进行交互的库,而Spring 2.5引入了对注解的强大支持,...

    spring mvc+ibatis+spring2.5注解

    在实际项目中,"springdemo3" 这个文件可能包含了一个简单的 Spring MVC + iBatis + Spring 2.5 注解的应用示例,其中包括配置文件(如 applicationContext.xml 和 servlet-context.xml)、Controller 类、Service ...

Global site tag (gtag.js) - Google Analytics