美文网首页
chapter05_构建Spring Web应用程序_2_基本控

chapter05_构建Spring Web应用程序_2_基本控

作者: 米都都 | 来源:发表于2019-01-14 09:34 被阅读0次
    • 控制器的类上方要添加 @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中读取

    相关文章

      网友评论

          本文标题:chapter05_构建Spring Web应用程序_2_基本控

          本文链接:https://www.haomeiwen.com/subject/ykxddqtx.html