墨风如雪博客

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

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

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

墨风如雪

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

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

文章评论

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

墨风如雪

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

最新 热点 随机
最新 热点 随机
降维打击!Mistral Voxtral:开源语音的“终结者”已上线! AI“游侠”降临A股:16个“大脑”组团“炒股”,30秒“算命”市场! 视频魔法来了!AI能实时“变脸”直播,连游戏画面也能瞬间换装? 告别“听指令”,AI要“自己动手”了!ChatGPT Agent,AI界的“全能选手”已上线! 8B 模型吊打 671B?数学证明界“卷王”Goedel-Prover-V2 来了! Kiro来了!亚马逊放大招,软件开发要被AI“绑架”了吗?
昆仑万维扔出王炸:32B模型干翻671B,代码界迎来全能修理工!8亿参数撬动实时混音!谷歌开源“口袋DJ”,人人都能玩转音乐告别插件时代!OmniGen2:一个模型,通吃所有AIGC神操作2000万次呼唤背后,蓝骑士有了“赛博外挂”智能触手可及:Google Gemma-3n 系列模型,让万物皆能“思考”AI圈大地震!120亿参数的FLUX编辑器开源,你的显卡准备好了吗?
主流AI对话产品侧重点与综合体验指南 只闻其声,不见其人:OpenAI的“声音魔盒”Voice Engine,15秒克隆是魔法还是潘多拉? 重塑AI推理格局?微软Phi-4模型震撼发布:轻量化性能炸裂 java IOC框架PicoContainer的(超详细总结) 推荐8款非常实用的 ChatGPT 浏览器插件 MySQL 事务隔离级别详解:读未提交、读提交、可重复读和串行化
标签聚合
AI spring deepseek 大模型 设计模式 算法 教程 java

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

Theme Kratos Made By Seaton Jiang

免责声明 - 隐私政策