墨风如雪博客

  • 源码小店
  • 导航站
  • 登录
  • java
  • 资源分享
让AI使用变得如此简单
  1. 首页
  2. java
  3. spring
  4. 正文

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

2023年 5月 3日 82点热度 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日

墨风如雪

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

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

文章评论

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

墨风如雪

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

最新 热点 随机
最新 热点 随机
告别机械感!OpenAudio S1让AI声音活起来 Sora触手可及!微软必应AI视频生成器,全民创作时代来临? 阿里WebAgent开源:引领自主搜索新纪元 重磅炸弹!字节跳动开源BAGEL:70亿参数,统一多模态理解与生成,AI“全能王”诞生记! 小米MiMo-VL:7B参数,怎么就成了多模态界的“越级打怪王”? 炸裂!DeepSeek 8B 量化版降临:告别显存焦虑,你的 3080 Ti 也能玩转顶级大模型了!
ComfyUI“打通任督二脉”:直接调用Veo2、GPT-4o等65大模型!一键串联你的AI工作流AI圈炸锅了!Mistral Medium 3:性能 SOTA,成本打骨折,企业玩家的新宠?字节终于开源“扣子”同款引擎了!FlowGram:AI 时代的可视化工作流利器告别“微信黑箱”!Chatlog:让你的聊天记录也能拥有“AI大脑”!字节跳动 Seed-Coder-8B:不靠人工洗数据,这80亿参数的小模型如何写出顶尖代码?85倍速的视觉革命:苹果发布 FastVLM,让你的 iPhone ‘看图说话’,快到飞起!
java 使用IBM DB2数据库的超详细教程 再见,5秒限制!昆仑万维SkyReels-V2开源,AI视频迈入“电影时代”? 推荐几款适合本地下载磁力链接的软件 SpringBoot四大核心组件详解 字节跳动炸开AI新边界!开源多模态模型BAGEL:这颗“魔法贝果”有多能打? 前端 Vue 基础知识
标签聚合
spring 动态规划 算法 java 设计模式 deepseek AI 教程

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

Theme Kratos Made By Seaton Jiang

免责声明 - 隐私政策