墨风如雪博客

  • 源码小店
  • 传家宝VPS
让AI使用变得如此简单
  1. 首页
  2. java
  3. spring
  4. 正文

java Web框架Spring MVC的(超详细总结)

2023年 5月 3日 157点热度 0人点赞 0条评论

知识点总结

  1. MVC设计模式

Spring MVC是基于MVC设计模式实现的框架,MVC设计模式将应用程序分为三个部分:模型(Model)、视图(View)和控制器(Controller)。

  • 模型:负责存储和处理数据,通常与数据库交互。
  • 视图:负责UI的展示,通常是HTML页面或者JSP页面。
  • 控制器:负责接收用户的请求并对请求进行处理,通常与业务逻辑交互。

通过MVC设计模式,Spring MVC清晰地分离了业务逻辑和UI展示,提高了代码的可维护性和灵活性。

  1. Spring MVC工作流程

Spring MVC的工作流程如下:

  • 发送请求:用户发起一个请求到服务器。
  • 前端控制器DispatcherServlet接收请求:DispatcherServlet是Spring MVC的核心控制器,负责接收所有请求并将请求路由到对应的处理器处理。
  • 处理器映射器HandlerMapping映射处理器:HandlerMapping负责根据请求的URL和其他信息将请求映射到对应的处理器。
  • 处理器适配器HandlerAdapter执行处理器:HandlerAdapter负责将请求交给映射器映射的处理器进行实际处理,并返回处理结果。
  • 视图解析器ViewResolver解析视图:ViewResolver负责根据处理器返回的结果和其他信息来确定哪个视图(即哪个JSP页面)将被展示。
  • 响应结果:根据最终选择的视图来生成相应的响应结果。
  1. Handler映射与适配器

HandlerMapping和HandlerAdapter是Spring MVC中的重要组件,它们负责将请求路由到对应的处理器进行处理,并将处理结果返回给前端控制器。

  • HandlerMapping:负责根据请求的URL和其他信息将请求映射到对应的处理器。常见的HandlerMapping有RequestMappingsHandlerMapping和AnnotationMethodHandlerMapping。
  • HandlerAdapter:负责将请求交给映射器映射的处理器进行实际处理,并返回处理结果。常见的HandlerAdapter有HttpRequestHandlerAdapter、SimpleControllerHandlerAdapter和AnnotationMethodHandlerAdapter。
  1. 控制器(Controller)

在Spring MVC中,控制器负责处理用户的请求并返回响应结果。Controller的设计需要根据具体的业务场景进行优化,尽量保持简洁易懂、易于扩展和维护。

常见的控制器有:

  • 基于注解的Controller:使用注解声明控制器类和请求处理方法,可以更直观地描述请求的处理过程。
  • 基于XML的Controller:使用Spring XML配置文件来声明控制器和请求处理方法,可以统一管理控制器和请求处理方法。
  • Restful风格的Controller:使用Restful风格的URL结构来处理请求,使得URL更加简洁明了,方便其他系统的接入和调用。
  1. 视图解析器(ViewResolver)

在Spring MVC中,视图解析器负责根据处理器返回的结果和其他信息来确定哪个视图(即哪个JSP页面)将被展示。常见的视图解析器有:

  • InternalResourceViewResolver:通过字符串拼接的方式返回JSP页面的名称,实现简单。
  • JstlView:基于JSTL实现的视图解析器。
  • VelocityViewResolver:基于Velocity模板实现的视图解析器。
  1. 数据绑定与数据校验

数据绑定指的是将请求参数绑定到相应的对象属性上。Spring MVC通过DataBinder来实现数据绑定,将请求参数绑定到指定的Java Bean对象属性上。

数据校验是验证请求参数是否符合规定的校验规则。Spring MVC中通过Validator来实现数据校验,使用注解来声明校验规则。

  1. 异常处理

Spring MVC的异常处理方式比较丰富,可以定制化地实现异常处理逻辑。常见的异常处理方式有:

  • 定义全局的异常处理器:通过在@ControllerAdvice注解的类中定义异常处理方法,实现全局的异常处理逻辑。
  • 定义局部的异常处理器:通过在@Controller或@RequestMapping注解的方法中定义异常处理方法,实现局部的异常处理逻辑。
  • 使用统一错误页面:在Spring MVC的配置文件中配置通用的错误处理页面,使得系统出现异常时能够返回通用的错误页面给用户。
  1. 文件上传

Spring MVC支持通过多种方式实现文件上传,如Servlet 3.0的标准API、Commons FileUpload和Spring MVC的Multipart Request API。同时,Spring MVC还提供了方便的上传进度监控和文件下载功能。

代码演示

Spring MVC作为基于MVC设计模式实现的框架,它将应用程序分为三个部分:模型(Model)、视图(View)和控制器(Controller)。在Spring MVC中,Controller负责处理用户的请求并返回响应结果。下面详细介绍其中的工作流程:

  1. 发送请求

在Spring MVC中,用户发起一个请求到服务器。请求可以通过浏览器输入URL、点击链接或者通过Ajax等方式发起。

  1. 前端控制器DispatcherServlet接收请求

DispatcherServlet是Spring MVC的核心控制器,负责拦截所有的请求并将请求路由到对应的处理器处理。在Web.xml文件中配置DispatcherServlet:

<servlet>
   <servlet-name>dispatcher</servlet-name>
   <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
   <load-on-startup>1</load-on-startup>
</servlet>

<servlet-mapping>
  <servlet-name>dispatcher</servlet-name>
  <url-pattern>/</url-pattern>
</servlet-mapping>
  1. 处理器映射器HandlerMapping映射处理器

HandlerMapping负责将请求路由到对应的处理器进行处理,并返回处理结果。在Spring MVC中,常见的HandlerMapping有RequestMappingHandlerMapping和AnnotationMethodHandlerMapping。下面是通过注解方式来实现RequestMappingHandlerMapping:

@Controller
@RequestMapping("/user")
public class UserController {

   @RequestMapping(value = "/list", method = RequestMethod.GET)
   public String listUsers(Model model) {
       //处理请求
       return "userList";
   }
}
  1. 处理器适配器HandlerAdapter执行处理器

HandlerAdapter负责将请求交给映射器映射的处理器进行实际处理,并返回处理结果。在Spring MVC中,常见的HandlerAdapter有HttpRequestHandlerAdapter、SimpleControllerHandlerAdapter和AnnotationMethodHandlerAdapter。下面是通过注解方式来实现AnnotationMethodHandlerAdapter:

@Controller
@RequestMapping("/user")
public class UserController {

   @RequestMapping(value = "/list", method = RequestMethod.GET)
   public String listUsers(Model model) {
       //处理请求
       return "userList";
   }
}
  1. 视图解析器ViewResolver解析视图

ViewResolver负责根据处理器返回的结果和其他信息来确定哪个视图(即哪个JSP页面)将被展示。在Spring MVC中,常见的视图解析器有InternalResourceViewResolver、JstlView和VelocityViewResolver等。下面是通过InternalResourceViewResolver来实现视图解析:

@Bean
public ViewResolver internalResourceViewResolver() {
   InternalResourceViewResolver resolver = new InternalResourceViewResolver();
   resolver.setPrefix("/WEB-INF/jsp/");
   resolver.setSuffix(".jsp");
   return resolver;
}
  1. 数据绑定与数据校验

数据绑定指的是将请求参数绑定到相应的对象属性上。Spring MVC通过DataBinder来实现数据绑定,将请求参数绑定到指定的Java Bean对象属性上。同时,为了保证数据的有效性,Spring MVC提供了数据校验的机制。下面是实现数据绑定和数据校验的示例代码:

@RequestMapping(value = "/saveUser", method = RequestMethod.POST)
public String saveUser(@ModelAttribute("user") @Valid User user, BindingResult result, Model model) {
   if (result.hasErrors()) {
     return "userForm";
   } else {
     //处理请求
     return "redirect:/user/list";
   }
}

@InitBinder
protected void initBinder(WebDataBinder binder) {
   binder.addValidators(new UserValidator());
}

其中,@ModelAttribute用于将表单数据绑定到User对象中,@Valid用于开启数据校验,BindingResult用于存储校验失败的结果,@InitBinder用于注册数据校验器。

  1. 异常处理

Spring MVC的异常处理方式比较丰富,可以定制化地实现异常处理逻辑。常见的异常处理方式有定义全局的异常处理器、定义局部的异常处理器和使用统一错误页面等。下面是通过@ControllerAdvice和@ExceptionHandler实现全局的异常处理:

@ControllerAdvice
public class GlobalExceptionHandler {

    @ExceptionHandler(Exception.class)
    public ModelAndView handleException(Exception ex) {
        ModelAndView mv = new ModelAndView();
        mv.addObject("exception", ex);
        mv.setViewName("error");
        return mv;
    }
}

其中,@ControllerAdvice用于指定处理所有Controller中的异常,@ExceptionHandler用于指定处理特定类型的异常。

  1. 文件上传

在Spring MVC中,文件上传可以使用Servlet 3.0的标准API、Commons FileUpload和Spring MVC的Multipart Request API等多种方式。下面是通过Spring MVC的Multipart Request API实现文件上传:

@RequestMapping(value="/uploadFile", method=RequestMethod.POST)
public String uploadFile(@RequestParam("file") MultipartFile file) {
   //处理请求
   return "redirect:/user/list";
}

其中,@RequestParam用于获取请求中的上传文件,MultipartFile是Spring MVC提供的文件上传对象。

本作品采用 知识共享署名 4.0 国际许可协议 进行许可
标签: java spring springMVC Web
最后更新:2023年 5月 3日

墨风如雪

一个热爱生活,热爱分享的程序员

打赏 点赞
< 上一篇
下一篇 >

文章评论

您需要 登录 之后才可以评论

墨风如雪

一个热爱生活,热爱分享的程序员

最新 热点 随机
最新 热点 随机
OpenAI重磅发布ChatGPT Atlas:告别传统浏览器的AI新纪元! DeepSeek OCR:用'眼睛'阅读长文本,AI记忆新纪元? 告别代码苦海:Manus 1.5 让你的创意以光速落地 Anthropic Haiku 4.5:这波AI性能,我愿称之为“超值”! 美团LongCat-Audio-Codec:给语音大模型装上“顺风耳”与“巧舌” 告别无声AI视频!谷歌Veo 3.1打造沉浸式视听盛宴
10秒100MB,ChatExcel一键PPT:它真把报告变“魔法”了?深思熟虑的“终章”:DeepSeek-V3.1-Terminus,不止于“完善”英伟达Audio2Face开源:AI给虚拟角色注入灵魂告别纸上谈兵:Meta CWM让AI代码真正活起来告别指令,迎接AI同事!Kimi“OK Computer”模式震撼登场AI视频革命奇点:Sora 2的数字幻境
DeepSeek-V3-0324幻觉率翻倍:大模型能力跃升背后的隐忧与应对策略 Dify平台:企业级AI开发的快速部署与自定义指南 OpenAI的“阳谋”:ChatGPT不想再当你枪手了 不容错过的AgentGPT:最新部署教程一览 设计模式:状态设计模式 java Web框架SpringBoot的(超详细总结)
标签聚合
spring java AI 教程 算法 大模型 deepseek 设计模式

COPYRIGHT © 2023 墨风如雪博客. ALL RIGHTS RESERVED.

Theme Kratos Made By Seaton Jiang