SpringMVC的注解关键词解释

SpringMVC的注解关键词解释

@Controller控制器定义

Struts1一样,SpringControllerSingleton。这就意味着会被多个请求线程共享。因此,我们将控制器设计成无状态类。

spring 3.0中,通过@controller标注即可将class定义为一个controller类。为使spring能找到定义为controllerbean,需要在spring-context配置文件中增加如下定义

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

注:实际上,使用@component,也可以起到@Controller同样的作用。

@RequestMapping

在类前面定义,则将url和类绑定。

在方法前面定义,则将url和类的方法绑定,如下所示:

package com.lhn.web;

import javax.annotation.Resource;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import com.sxt.service.UserService;

@Controller
@RequestMapping("/user.do")
public class UserController  {

  @Resource
  private UserService userService;

  @RequestMapping(params="method=reg")
  public String reg(String uname) {
    System.out.println("HelloController.handleRequest()");
    userService.add(uname);
    return "index";

  }

  public UserService getUserService() {
    return userService;
  }

  public void setUserService(UserService userService) {
    this.userService = userService;
  }

}

@RequestParam 

一般用于将指定的请求参数付给方法中形参。示例代码如下:

 1 @RequestMapping(params="method=reg5")
 2 
 3 public String reg5(@RequestParam("name")String uname,ModelMap map) {
 4 
 5     System.out.println("HelloController.handleRequest()");
 6 
 7     System.out.println(uname);
 8 
 9     return "index";
10 
11 }

这样,就会将name参数的值付给uname。当然,如果请求参数名称和形参名称保持一致,则不需要这种写法。

@SessionAttributes

ModelMap中指定的属性放到session中。示例代码如下:

 1 @Controller
 2 @RequestMapping("/user.do")
 3 @SessionAttributes({"u","a"})   //将ModelMap中属性名字为u、a的再放入session中。这样,request和session中都有了。
 4 public class UserController  {
 5 
 6     @RequestMapping(params="method=reg4")
 7     public String reg4(ModelMap map) {           
 8         System.out.println("HelloController.handleRequest()");
 9 
10         map.addAttribute("u","uuuu");  //将u放入request作用域中,这样转发页面也可以取到这个数据。
11 
12         return "index";
13 
14     }
15 }    
  <body>

   <h1>**********${requestScope.u.uname}</h1>

   <h1>**********${sessionScope.u.uname}</h1>

  </body>

注:名字为user的属性再结合使用注解@SessionAttributes可能会报错。 

@ModelAttribute

这个注解可以跟@SessionAttributes配合在一起用。可以将ModelMap中属性的值通过该注解自动赋给指定变量。

示例代码如下:

 1 package com.lhn.web;
 2 
 3 import javax.annotation.Resource;
 4 import org.springframework.stereotype.Controller;
 5 import org.springframework.ui.ModelMap;
 6 import org.springframework.web.bind.annotation.ModelAttribute;
 7 import org.springframework.web.bind.annotation.RequestMapping;
 8 import org.springframework.web.bind.annotation.SessionAttributes;
 9 
10 @Controller
11 @RequestMapping("/user.do")
12 @SessionAttributes({"u","a"})  
13 public class UserController  {
14 
15     @RequestMapping(params="method=reg4")
17     public String reg4(ModelMap map) {
19         System.out.println("HelloController.handleRequest()");
20         map.addAttribute("u","张三");
21         return "index";
22     }
23 
24     @RequestMapping(params="method=reg5")
25     public String reg5(@ModelAttribute("u")String uname,ModelMap map) {
27         System.out.println("HelloController.handleRequest()");
28         System.out.println(uname);   
29         return "index";
30 }
31 }            

先调用reg4方法,再调用reg5方法。我们发现控制台打印出来:张三

@ResponseBody  

@RequestMapping("/login")
public @ResponseBody User login(User user){ return user; }

  User字段:userName pwd
  那么在前台接收到的数据为:'{"userName":"xxx","pwd":"xxx"}'

  效果等同于如下代码:
  

@RequestMapping("/login")
  public void login(User user, HttpServletResponse response){
    response.getWriter.write(JSONObject.fromObject(user).toString());
  }

 

posted @ 2018-03-02 16:34  苏戏  阅读(1075)  评论(0编辑  收藏  举报