美文网首页程序员
(三)基于注解的控制器

(三)基于注解的控制器

作者: 杀死一只程序猿 | 来源:发表于2016-03-31 19:45 被阅读238次

    在第一个Spring MVC实例中,我编写的控制器(两个Controller类)是实现了控制器接口,属于传统风格。从Spring 2.5版本开始引入了一个新的途径:通过使用控制器注释类型。

    注解的优点

    • 一个控制器类可以处理多个动作(而实现了Controller接口的控制器只能处理一个动作),从而减少应用程序的数量。
    • 基于注解的控制器的请求映射不需要存储在配置文件中。

    最重要的两个注解类型

    • Controller
    • RequestMapping

    Controller注解类型

    Controller的全名为:

    org.springframework.stereotype.Controller
    

    用于指示Spring类的实例是一个控制器,如下所示:
    UserController.java

      package com.zpq.springmvc.controller;
    
      import org.springframework.stereotype.Controller;
    
      @Controller
      public class UserController
      {
      }
    

    那么问题来了,如何让Spring找到这个控制器呢?上述的注解好比是给一个类装载了一个信号发射器,接下来该做的就是让这个信号发射器被发现——给Spring装一个雷达!

    • Spring使用扫描机制来找到应用程序中所有的基于注解的控制器类。

      为了保证Spring能找到我的控制器,我需要做三件事情”

    • 首先,需要在Spring MVC的配置文件中声明spring-context,如下所示:
      springmvc-config.xml

    <beans  
           ...... 
           xmlns:context="http://www.springframework.org/schema/context"  
           ......
    /beans>
    
    • 然后,需要应用<component-scan/>元素,如下所示:
      springmvc-config.xml
     <context:component-scan base-package="com.zpq.springmvc.controller"/>
    

    双引号中的值为UserController类的类名,尽量写的精确,不要太广泛,否则就会扫描无关紧要的类。

    RequestMapping注解类型

    声明了控制器之后,就要往控制器类中为每一个动作开发相应的处理方法。
    RequestMapping的全名为:

    org.springframework.web.bind.annotation.RequestMapping
    

    用于映射一个请求和一种方法
    使用@Controller注解可以在一个控制器类中编写多个方法,如下所示:
    UserController.java

       @Controller
       public class UserController
       {
            @RequestMapping("/user_input")
            public String inputUser()
            {
                System.out.println("inputUser called!");
                return "UserForm";//返回一个名称为UserForm的View
            }
        
            @RequestMapping("/user_save")
            public String SaveUser(UserForm userForm, Model model)
            {
                System.out.println("saveUser called!");
                //populate action properties
                User user = new User();
                user.setName(userForm.getName());
                user.setDescription(userForm.getDescription());
                model.addAttribute("User", user);//返回一个User bean
                return "UserDetails";//返回一个名称为UserDetails的视图
            }
    }
    

    @RequestMapping("/user_input")与以下配置的作用是一样:
    springmvc-config.xml

    <bean name="/user_input.action"
            class="com.zpq.springmvc.controller.InputUserController">
    </bean>
    

    启动项目后,在浏览器地址栏中输入如下:

    http://localhost:8080/SpringMVC01/user_input
    

    出现页面,如下所示:

    user_input

    总结

    • 使用注解@Controller可以声明一个控制器,供Spring MVC扫描,并且这样的控制器内部可以定义多个请求方法。
    • 使用注解@RequestMapping可以声明一个请求方法,省去在springmvc-config.xml配置的工程。

    相关文章

      网友评论

        本文标题:(三)基于注解的控制器

        本文链接:https://www.haomeiwen.com/subject/lyuelttx.html