SpringMVC框架(2)
1.在Controller获得请求参数
Controller是一个接口。
//实现该接口的类获得控制器功能 public interface Controller{ //处理请求且但返回一个模型与视图对象 ModelAndView handleRequet(HttpServletRequest vsr1,HttpServletResponse vsr2) throw }
但是实现接口Controller定义控制器是一个比较古老的办法。缺点是:一个控制器中只有一个办法,如果要用多个办法的时候就得需要定义多个Controller;定义方式比较麻烦
使用注解@Controller
@Controller注解类型用于Spring类的实例是一个控制器
Spring可以使用扫描机制来找到应用程序中所有基于注解的控制器类,为了保证Spring能找到你的控制器,需要在配置文件中声明组建扫描
<!--自动扫描指定的包,下面的所有的注解交给IOC容器管理--> <context:component-scan base-package = "com.KL.controller"/>
增加一个Controller Test2,使用注解实现:
//@COntroller注解的类会自动添加到spring上下文中 @Controller public class ControllerTest2{ //映射访问路径 @RequestMapping("/t2") public String index(Model model){ //spring MVC 会自动实例化一个model对象用于向视图中传值 model.addAttrubute("msg","ControllerTest2"); //返回视图位置 return "test"; } }
控制器与视图之间是弱耦合,注解方式是平时我们使用最多的方式。
RequestMapping
@Requestmaping
@RequestMapping注解用于映射url到控制器或 一个特定的处理程序的方法。用于类或方法上。用于类上的话,表示类上的所有请求的方法都是以该地址作为父路径。
RestFul风格
RestFul就是一个资源定位及资源操作的风格,不是标准和协议,只是一种风格。所以我们可以基于这种风格可以设计的软件更加的简洁,更有层次,更有实现缓存等机制
功能:
可以使用POST,GET,PUT,DELETE 资源的不同操作
测试:
1.新建一个类RestFulController
@Controller public vlass RestFulController{ }
2.我们可以在SpringMVC中使用@PathVariable注解:让方法参数的值对应绑定到一个URL模板变量上。
@Controller public class RestFulController { //映射访问路径 @RequestMapping("/commit/{p1}/{p2}") public String index(@PathVariable int p1, @PathVariable int p2, Model model){ int result = p1+p2; //Spring MVC会自动实例化一个Model对象用于向视图中传值 model.addAttribute("msg", "结果:"+result); //返回视图位置 return "test"; } }
使用路径变量的好处:使路径变得更加简洁,获得参数更加方便,框架会自动类型转换,通过路径变量的类型可以拘束访问参数,如果类型不一样,访问不到对应的请求方法。
使用method属性指定请求类型
用于约束请求的类型,可以收窄请求范围。指定请求谓词的类型如GET,POST,HEAD,OPTIONS,PUT,PATCH,DELETE,TRACE
//映射访问路径,必须是POST请求 @RequestMapping(value = "/hello",method = {RequestMethod.POST}) public String index2(Model model){ model.addAttribute("msg", "hello!"); return "test"; }
所有的地址栏请求默认都会是HTTP GET类型的
方法级别的注解变体:组合注解
@GetMapping
@PostMapping
@PutMapping
@DeleteMapping
@PatchMapping
@GetMapping 是一个组合注解,平时使用的会比较多!
它所扮演的是 @RequestMapping(method =RequestMethod.GET) 的一个快捷方式。