Spring中的注解

来源:互联网 发布:80卡盟主站域名填什么 编辑:程序博客网 时间:2024/04/29 03:32

@Controller控制器定义

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


spring 3.0中,通过@controller标注即可将class定义为一个controller类。为使spring能找到定义为controllerbean,需要在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方法。我们发现控制台打印出来:尚学堂高淇









0 0