点击此处查看 合集 https://blog.csdn.net/foyodesigner/category_12907601.html?fromshare=blogcolumn&sharetype=blogcolumn&sharerId=12907601&sharerefer=PC&sharesource=FoyoDesigner&sharefrom=from_link
DispatcherServlet[1] 是 Spring MVC 的“大脑”,它负责接收所有的 HTTP 请求,并把请求分发给对应的处理器(Controller)。DispatcherServlet 的工作原理,说白了就是“接单”和“派单”的过程。它就是个前台,是个咨询处,是个导航。
对应的Servlet,就是web.xml的配置内容的执行逻辑。
DispatcherServlet 是 Spring MVC 的前端控制器,所有的 HTTP 请求都得经过它。DispatcherServlet 接单后,会把请求交给 HandlerMapping[2] 去处理。
Java Code |
public class DispatcherServlet extends HttpServlet { protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // 处理请求 } } |
DispatcherServlet 接单后,会把请求交给 HandlerMapping 去处理。HandlerMapping 会根据请求的 URL,找到对应的 Controller。
Java Code |
HandlerMapping handlerMapping = getHandlerMapping(request); HandlerExecutionChain handler = handlerMapping.getHandler(request); |
HandlerMapping 是 Spring MVC 的“导航仪”,它负责根据请求的 URL,找到对应的 Controller。HandlerMapping 的核心思想是“路由”,它把请求的 URL 映射到对应的 Controller 上。
RequestMappingHandlerMapping 是 Spring MVC 的默认 HandlerMapping,它支持注解驱动的路由。开发者可以用 @RequestMapping 注解,把请求的 URL 映射到 Controller 的方法上。
Java Code |
@Controller public class MyController { @RequestMapping("/hello") public String hello() { return "hello"; } } |
BeanNameUrlHandlerMapping 是 Spring MVC 的另一种 HandlerMapping,它支持 Bean 名称驱动的路由。开发者可以把 Controller 的 Bean 名称设成 URL,Spring MVC 会自动把请求的 URL 映射到对应的 Controller 上。
XML Code |
|
Controller 是 Spring MVC 的“处理器”,它负责处理请求,生成响应。Controller 的核心思想是“业务逻辑”,它把请求的数据转换成业务数据,再把业务数据转换成响应的数据。
@Controller 是 Spring MVC 的注解,用来标记一个类是 Controller。Controller 通常用来处理 HTTP 请求,生成 HTTP 响应。
Java Code |
@Controller public class MyController { @RequestMapping("/hello") public String hello() { return "hello"; } } |
@RequestMapping 是 Spring MVC 的注解,用来把请求的 URL 映射到 Controller 的方法上。@RequestMapping 支持 GET、POST、PUT、DELETE 等 HTTP 方法。
Java Code |
@Controller public class MyController { @RequestMapping(value = "/hello", method = RequestMethod.GET) public String hello() { return "hello"; } } |
@RequestParam 是 Spring MVC 的注解,用来获取请求的参数。@RequestParam 支持默认值、必填等参数。
Java Code |
@Controller public class MyController { @RequestMapping("/hello") public String hello(@RequestParam(value = "name", defaultValue = "World") String name) { return "hello " + name; } } |
@PathVariable 是 Spring MVC 的注解,用来获取路径变量。路径变量是 URL 中的占位符,通常用来传递 ID 啥的。
Java Code |
@Controller public class MyController { @RequestMapping("/hello/{name}") public String hello(@PathVariable String name) { return "hello " + name; } } |
@ResponseBody 是 Spring MVC 的注解,用来把方法的返回值转换成 JSON 数据。@ResponseBody 通常和 @RestController 一起用。
Java Code |
@RestController public class MyController { @RequestMapping("/hello") public String hello() { return "Hello, World!"; } } |
ViewResolver 是 Spring MVC 的“视图解析器”,它负责把 Controller 返回的视图名称解析成实际的视图。ViewResolver 的核心思想是“视图解析”,它把视图名称转换成视图对象。
InternalResourceViewResolver 是 Spring MVC 的默认 ViewResolver,它支持 JSP 视图。开发者可以把视图名称设成 JSP 文件的路径,InternalResourceViewResolver 会自动把视图名称解析成 JSP 文件。
Java Code |
@Bean public ViewResolver viewResolver() { InternalResourceViewResolver resolver = new InternalResourceViewResolver(); resolver.setPrefix("/WEB-INF/views/"); resolver.setSuffix(".jsp"); return resolver; } |
ThymeleafViewResolver 是 Spring MVC 的另一种 ViewResolver,它支持 Thymeleaf 视图。开发者可以把视图名称设成 Thymeleaf 文件的路径,ThymeleafViewResolver 会自动把视图名称解析成 Thymeleaf 文件。(不建议使用,除非你需要动态响应视图)
Java Code |
@Bean public ViewResolver viewResolver() { ThymeleafViewResolver resolver = new ThymeleafViewResolver(); resolver.setTemplateEngine(templateEngine()); return resolver; } |
Spring MVC 从 Struts 的“小弟”变成了“大哥”,它的历史就是 JavaWeb 开发的“进化史”。
2003 年,Spring MVC 1.0 发布,它用“轻量级”和“灵活性”打败了 Struts,成为了 JavaWeb 开发的“新大哥”。
2009 年,Spring MVC 3.0 发布,它引入了注解驱动的开发模式,让 Spring MVC 的开发更加简单。
2017 年,Spring MVC 5.0 发布,它支持了 Reactive 编程模型,让 Spring MVC 的性能更加高效。
Spring MVC 支持全局异常处理,能用 @ControllerAdvice 和 @ExceptionHandler 统一处理异常。
Java Code |
@ControllerAdvice public class GlobalExceptionHandler { @ExceptionHandler(Exception.class) public ResponseEntity return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(e.getMessage()); } } |
Spring MVC 支持文件上传,能用 MultipartFile 自动处理文件上传。
Java Code |
@PostMapping("/upload") public String upload(@RequestParam("file") MultipartFile file) { // 处理文件上传 return "success"; } |
Spring MVC 支持拦截器,能用 HandlerInterceptor 统一处理请求的前后逻辑。
Java Code |
public class MyInterceptor implements HandlerInterceptor { @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { // 处理请求前的逻辑 return true; } } |