您的位置:首页 > 编程语言 > Java开发

Spring中的注解

2016-03-16 17:47 381 查看
@Controller控制器定义

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

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

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

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

@RequestMapping

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

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

package com.sxt.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 UserServiceuserService;

//http://localhost:8080/springmvc02/user.do?method=reg&uname=zzzz

@RequestMapping(params="method=reg") 

public String reg(String uname) {

System.out.println("HelloController.handleRequest()");

userService.add(uname); 

return"index";

}

public UserService getUserService() {

returnuserService;

}

publicvoid setUserService(UserService userService) {

this.userService = userService;

}

}

@RequestParam 

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

@RequestMapping(params="method=reg5")

public String reg5(@RequestParam("name")String uname,ModelMap map) { 

System.out.println("HelloController.handleRequest()");

System.out.println(uname); 

return"index";

}

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

@SessionAttributes

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

@Controller

@RequestMapping("/user.do")

@SessionAttributes({"u","a"})  //ModelMap中属性名字为ua的再放入session中。这样,requestsession中都有了。

public class UserController  {

@RequestMapping(params="method=reg4")

public String reg4(ModelMap map) { System.out.println("HelloController.handleRequest()");

map.addAttribute("u","uuuu"); //u放入request作用域中,这样转发页面也可以取到这个数据。

return"index";

}

}

 <body>

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

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

  </body>

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



@ModelAttribute

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

示例代码如下:

package com.sxt.web;

import javax.annotation.Resource;

import org.springframework.stereotype.Controller;

import org.springframework.ui.ModelMap;

import org.springframework.web.bind.annotation.ModelAttribute;

import org.springframework.web.bind.annotation.RequestMapping;

import org.springframework.web.bind.annotation.SessionAttributes;

@Controller

@RequestMapping("/user.do")

@SessionAttributes({"u","a"})  

public class UserController  {

@RequestMapping(params="method=reg4")

public String reg4(ModelMap map) {

System.out.println("HelloController.handleRequest()");

map.addAttribute("u","尚学堂高淇");

return
"index";

}

@RequestMapping(params="method=reg5")

public String reg5(@ModelAttribute("u")String uname,ModelMap map) { 

System.out.println("HelloController.handleRequest()");

System.out.println(uname); 

return
"index";

}

}

先调用reg4方法,再调用reg5方法。我们发现控制台打印出来:尚学堂高淇
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: