程序员

(三)基于注解的控制器

2016-03-31  本文已影响238人  杀死一只程序猿

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

注解的优点

最重要的两个注解类型

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装一个雷达!

<beans  
       ...... 
       xmlns:context="http://www.springframework.org/schema/context"  
       ......
/beans>
 <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

总结

上一篇下一篇

猜你喜欢

热点阅读