概念
有接口实现和注解两种实现方式,但是不建议使用,推荐使用注解。
注解编写一个控制类:
package controller;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
public class ControllerDemo2 {
@RequestMapping("/t1")
public String hello(Model model){
model.addAttribute("msg","ControllerDemo2");
return "test";
}
@RequestMapping("/t2")
public String test2(Model model){
model.addAttribute("msg","test2");
return "test";
}
}
可以发现实现了不同的方法指向同一个jsp网页,实现了复用性.
RestFul风格
概念
Restful就是一个资源定位及资源操作的风格。不是标准也不是协议,只是一种风格。基于这个风格设计的软件可以更简洁,更有层次,更易于实现缓存等机制。
功能:
资源:互联网所有的事物都可以被抽象为资源
资源操作:使用POST、DELETE、PUT、GET,使用不同方法对资源进行操作。
分别对应 添加、 删除、修改、查询。
与传统的url不同的是网页的地址更加简单,没有复杂的?之类的符合。
简单例子:
新建一个类 RestFulController
在Spring MVC中可以使用 @PathVariable 注解,让方法参数的值对应绑定到一个URI模板变量上。
package controller;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
public class RestFulController {
@RequestMapping("/commit/{p1}/{p2}")
public String test(@PathVariable int p1,@PathVariable int p2, Model model){
int result=p1+p2;
model.addAttribute("msg","结果:"+result);
return "test";
}
}
运行测试:
使用路径变量的好处?
使路径变得更加简洁;
获得参数更加方便,框架会自动进行类型转换。
通过路径变量的类型可以约束访问参数,如果类型不一样,则访问不到对应的请求方法,如这里访问是的路径是/commit/1/a,则路径与方法不匹配,而不会是参数转换失败。
通过其他注释区分不同的请求方式
package controller;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
public class RestFulController {
@GetMapping("/commit/{p1}/{p2}")
public String test(@PathVariable int p1,@PathVariable int p2, Model model){
int result=p1+p2;
model.addAttribute("msg","结果:"+result);
return "test";
}
@PostMapping("/commit/{p1}/{p2}")
public String test2(@PathVariable int p1,@PathVariable int p2, Model model){
int result=p1*p2;
model.addAttribute("msg","结果:"+result);
return "test";
}
}
直接访问走get方法
通过表单请求访问
可以看到路径一样,但是执行的方法并不一样。