IOC的基础实现
org.springframework.context-3.0.3.RELEASE.jar
IOC基础上的扩展服务
org.springframework.core-3.0.3.RELEASE.jar
spring的核心包
org.springframework.expression-3.0.3.RELEASE.jar
spring的表达式语言
org.springframework.web-3.0.3.RELEASE.jar
web工具包
org.springframework.web.servlet-3.0.3.RELEASE.jar
mvc工具包
@Controller控制器定义
和Struts1一样,Spring的Controller是Singleton的。这就意味着会被多个请求线程共享。因此,我们将控制器设计成无状态类。
在spring 3.0中,通过@controller标注即可将class定义为一个controller类。为使spring能找到定义为controller的bean,需要在spring-context配置文件中增加如下定义:
|
|
注:实际上,使用@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") publicclass 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); //通过ModelMap传参 map.put("name", uname); return"index"; } |
这样,就会将name参数的值付给uname。当然,如果请求参数名称和形参名称保持一致,则不需要这种写法。
@SessionAttributes
将ModelMap中指定的属性放到session中。示例代码如下:
| @Controller @RequestMapping("/user.do") @SessionAttributes({"u","a"}) //将ModelMap中属性名字为u、a的再放入session中。这样,request和session中都有了。 publicclass UserController { @RequestMapping(params="method=reg4") public String reg4(ModelMap map) { System.out.println("HelloController.handleRequest()"); map.addAttribute("u","uuuu"); //将u放入request作用域中,这样转发页面也可以取到这个数据。 return"index"; } } |
|
**********${requestScope.u.uname}
**********${sessionScope.u.uname}
|
注:名字为”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"}) publicclass 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()"); Syst |