chapter05_构建Spring Web应用程序_2_基本控
-
控制器的类上方要添加 @Controller 注解用于声明,@Controller是@Component的子注解,便于自动扫描 @ComponentScan
-
@RequestMapping注解
(1) 可以添加在控制器的类上方,也可以添加在方法上方。当控制器在类上添加@RequestMapping注解时,这个注解会应用到控制器的所有方法上
(2) value属性用于匹配路径,里面可以包含一个数组
(3) method属性用于设置请求方式,总共有GET, HEAD, POST, PUT, PATCH, DELETE, OPTIONS, TRACE几种
(4) 示例
HomeController.java
import static org.springframework.web.bind.annotation.RequestMethod.*; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.RequestMapping; @Controller @RequestMapping(value = {"/", "/homePage"}) public class HomeController { @RequestMapping(method = GET) public String home(Model model) { // the name of view is "home" return "home"; } }
(5) HomeController的home()方法返回了一个String,这样视图解析器就会查找相应的视图
-
传递模型数据到视图中
(1) 控制器的方法中,会有一个参数时Model类型,Model实际是一个Map,可以传递给视图
(2) 第一种传递数据到视图的方法 -- Model addAttribute(String attributeName, Object attributeValue);
示例 SpittleController.java(部分)
@Controller @RequestMapping("/spittles") public class SpittleController { ... private SpittleRepository spittleRepository; @Autowired public SpittleController(SpittleRepository spittleRepository) { this.spittleRepository = spittleRepository; } @RequestMapping(method = RequestMethod.GET) public String spittles(Model model) { model.addAttribute("spittleList", spittleRepository.findSpittles(100, 20)); return "spittles"; } ... }
(3) 第二种传递数据到视图的方法 -- Model addAttribute(Object attributeValue);
当不指定key的时候,key会根据值的对象类型进行推断。示例中spittleRepository.findSpittles(100, 20)返回一个List<Spittle>,因此key会推断为 spittleList
(4) 第三种传递数据到视图的方法 -- 不返回String类型的视图名,直接返回对象的value
示例 SpittleController.java(部分)
@Controller @RequestMapping("/spittles") public class SpittleController { ... private SpittleRepository spittleRepository; @Autowired public SpittleController(SpittleRepository spittleRepository) { this.spittleRepository = spittleRepository; } @RequestMapping(method = RequestMethod.GET) public String spittles(Model model) { return spittleRepository.findSpittles(100, 20); } ... }
-
JSP页面从模型中读取数据
(1) 当视图是JSP的时候,模型数据会作为请求属性放在request中,可以从request中读取