赞
踩
@GetMapping、@PostMapping、@PutMapping等:他们相当于RequestMapping(value = “/xxx” , method = RequestMethod.GET)或 RequestMapping(value = “/xxx” , method = RequestMethod.POST),即限定请求方法的简写。
什么是请求映射?
个人理解:首先在浏览器搜索一个URL会向程序发送请求,程序会对其进行处理,找到对应的页面。或 当提交表单时也会对程序发送post或get请求。
protected void doDispatch(HttpServletRequest request, HttpServletResponse response) throws Exception { HttpServletRequest processedRequest = request; HandlerExecutionChain mappedHandler = null; boolean multipartRequestParsed = false; WebAsyncManager asyncManager = WebAsyncUtils.getAsyncManager(request); try { ModelAndView mv = null; Exception dispatchException = null; try { processedRequest = checkMultipart(request); multipartRequestParsed = (processedRequest != request); // 找到当前请求使用哪个Handler(Controller的方法)处理 mappedHandler = getHandler(processedRequest); //HandlerMapping:处理器映射。/xxx->>xxxx // HandlerMapping意思是处理器映射,把一个URL指定到一个Controller上 HandlerMapping的作用就是解析请求链接,然后根据请求链接找到执行这个请求的类(HandlerMapping所说的handler,也就是我们写的Controller或是Action)
从上面的代码可以看到,最终将会通过getHandler方法,找到合适的Handler(Controller的方法)处理。就是看request有无对应的@RequestMapping相对应,有的话就返回这个@RequestMapping绑定的方法(handle)。如下图
从下图可以看到handlerMapping中会有五个值:
其中排在第一的RequestMappingHandlerMapping:保存了所有Controller中的@RequestMapping 和handler的映射规则。从下图中可以看到左边的是@RequestMapping , 右边是其在Controller绑定的对应的方法,即handel
所有的请求映射都在HandlerMapping中。
首先, 请求进来,挨个尝试所有的HandlerMapping看是否有请求信息。如果有就找到这个请求对应的handler。如果没有就是下一个 HandlerMapping。
欢迎页的原理:
你啥也没传,也就是"/",那么在RequestMappingHandlerMapping中将不会找到合适的,然后他就会循环到下一个控制器WelcomePageHandlerMapping。而这个控制器就是专门处理"/"的,于是根据处理,转发到index.html中。
想要使用rest风格,需要在配置文件中手动开启(似乎新版本默认开启了)
mvc:
hiddenmethod:
filter:
enabled: true
核心Filter;HiddenHttpMethodFilter
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <h1> 你好!!!!</h1> <form action="/user" method="get"> <input value="Rest_GET提交" type="submit"/> </form> <form action="/user" method="post"> <input value="Rest_POST提交" type="submit"/> </form> <form action="/user" method="post"> <input name="_method" type="hidden" value="delete"/> <input value="Rest_delete提交" type="submit"/> </form> <form action="/user" method="post"> <input name="_method" type="hidden" value="PUT"/> <input value="Rest_Put提交" type="submit"/> </form> </body> </html>
package com.atguigu.boot.ccontroller; import org.springframework.web.bind.annotation.*; /** * @author Juneluo * @create 2021-08-15 20:52 */ @RestController public class HelloController { @RequestMapping("/user") // @RequestMapping(value = "/user",method = RequestMethod.GET) public String getUser(){ return "GET-张三"; } @PostMapping("/user") // @RequestMapping(value = "/user",method = RequestMethod.POST) public String saveUser(){ return "POST-张三"; } @PutMapping("/user") // @RequestMapping(value = "/user",method = RequestMethod.PUT) public String putUser(){ return "PUT-张三"; } @DeleteMapping("/user") // @RequestMapping(value = "/user",method = RequestMethod.DELETE) public String deleteUser(){ return "DELETE-张三"; } }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。