前文分别介绍了 Spring IOC 与 Spring AOP 的相关知识,本文将为各位大概带来 Spring MVC 的知识点。关注我的公众号「Java面典」,每天 10:24 和你一起了解更多 Java 相关知识点。

处理流程

  1. 用户发送请求至前端控制器 DispatcherServlet;
  2. DispatcherServlet 收到请求调用 HandlerMapping 处理器映射器;
  3. 处理器映射器找到具体的处理器(可以根据 xml 配置、注解进行查找),生成处理器对象及处理器拦截器(如果有则生成)一并返回给 DispatcherServlet;
  4. DispatcherServlet 调用 HandlerAdapter 处理器适配器;
  5. HandlerAdapter 经过适配调用具体的处理器(Controller,也叫后端控制器);
  6. Controller 执行完成返回 ModelAndView;
  7. HandlerAdapter 将 Controller 执行结果 ModelAndView 返回给 DispatcherServlet;
  8. DispatcherServlet 将 ModelAndView 传给 ViewReslover 视图解析器;
  9. ViewReslover 解析后返回具体 View;
  10. DispatcherServlet 根据 View 进行渲染视图(即将模型数据填充至视图中);
  11. DispatcherServlet 响应用户。

常用注解

基本注解

@RequestMapping:给控制器方法绑定一个 uri;

@ResponseBody:将 Java 对象转成 json,并且发送给客户端;

@RequestBody:将客户端请求过来的 json 转成 Java 对象;

@RequestParam:当表单参数和方法形参名字不一致时,做一个名字映射;

@PathVarible:用于获取 uri 中的参数,比如 user/1 中 1 的值。

Rest风格的新api

@RestController:相当于 @Controlle r+ @ResponseBody;

@GetMapping:还包括 @DeleteMapping、@PostMapping、@PutMapping 等相当于 @RequestMapping 加对应的 http 请求方法;

其他注解

@SessionAttribute:声明将什么模型数据存入session;

@CookieValue:获取 cookie 值;

@ModelAttribute:将方法返回值存入 model 中;

@HeaderValue:获取请求头中的值。

使用技巧

中文乱码

通过配置 Spring MVC 字符编码过滤器来解决Post 请求中文乱码的问题,在 web.xml 中添加:

<filter>
<filter-name>CharacterEncodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<!-- 设置编码格式 -->
<param-value>utf-8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>CharacterEncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>

文件上传

  1. 引入jar包: commons-io-1.3.2.jar 和 commons-fileupload-1.2.1.jar;
  2. 配置xml:
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"/>
  1. 控制器兼容:
@RequestMapping("/upload")
public void upload(@RequestParam("file") MultipartFile file) throws Exception {
System.out.println(file.getOriginalFilename());
}

Spring 系列推荐

Spring03——有关于 Spring AOP 的总结

Spring02——Spring 中 Bean 的生命周期及其作用域

Spring01——你应该了解的,有关 IOC 容器的一切

Spring04——Spring MVC 全解析的更多相关文章

  1. java spring mvc 全注解

    本人苦逼学生一枚,马上就要毕业,面临找工作,实在是不想离开学校.在老师的教导下学习了spring mvc ,配置文件实在繁琐,因此网上百度学习了spring mvc 全注解方式完成spring的装配工 ...

  2. spring mvc: 多解析器映射(资源绑定视图解析器 + 内部资源[普通模式/]视图解析器)

    spring mvc: 多解析器映射(资源绑定视图解析器 + 内部资源[普通模式/]视图解析器) 资源绑定视图解析器 + 内部资源(普通模式)视图解析器 并存方式 内部资源视图解析器: http:// ...

  3. Spring MVC视图解析器

    Spring MVC提供的视图解析器使用ViewResolver进行视图解析,实现浏览器中渲染模型.ViewResolver能够解析JSP.Velocity模板.FreeMarker模板和XSLT等多 ...

  4. Spring MVC 全注解配置 (十一)

    完整的项目案例: springmvc.zip 目录 实例 项目结构: 父级的pom配置: <?xml version="1.0" encoding="UTF-8&q ...

  5. 【Spring学习笔记-MVC-12】Spring MVC视图解析器之ResourceBundleViewResolver

    场景 当我们设计程序界面的时候,中国人希望界面是中文,而美国人希望界面是英文. 我们当然希望后台代码不需改变,系统能够通过配置文件配置,来自己觉得是显示中文界面还是英文界面. 这是,Spring mv ...

  6. Spring MVC多解析器映射

    如果想在spring mvc应用程序中使用多个视图解析器,那么可以使用order属性设置优先级顺序. 以下示例显示如何在Spring Web MVC框架中使用ResourceBundleViewRes ...

  7. Spring MVC原理解析

    SpringMVC Spring MVC的工作原理 ①客户端的所有请求都交给前端控制器DispatcherServlet来处理,它会负责调用系统的其他模块来真正处理用户的请求. ② Dispatche ...

  8. Spring MVC视图解析器(ViewResolver)

    视图解析器(ViewResolver)是 Spring MVC 的重要组成部分,负责将逻辑视图名解析为具体的视图对象.Spring MVC 提供了很多视图解析类,其中每一项都对应 Java Web 应 ...

  9. spring mvc:视图解析器

    ModelAndView对象中的view对象,可以使用字符串来让Spring框架进行解析获得适合的视图.而解析View的就是ViewResolver技术. ViewResolver的定义如下: pub ...

随机推荐

  1. 从赴美IPO绝迹 看那些烧成泡沫的互联网企业

    曾经,赴美上市是很多中国企业的终极梦想.然而在当下,随着中概股在美国股市股价的不断走低.中国赴美上市企业私有化速度的加快,大众才发现,原来美国股市并不是那么好混的.但不管怎样,赴美上市始终是一种荣耀. ...

  2. Linux统计目录下文件个数及代码行数

    1. 统计当前目录下,php文件数量 find ./ -name "*.php" | wc -l 2. 统计当前目录下所有php文件代码行数 find ./ -name " ...

  3. C++走向远洋——56(项目二1、动物这样叫、虚函数)

    */ * Copyright (c) 2016,烟台大学计算机与控制工程学院 * All rights reserved. * 文件名:text.cpp * 作者:常轩 * 微信公众号:Worldhe ...

  4. python 保存两位小数

    一.代码 import decimal decimal.getcontext().rounding = decimal.ROUND_HALF_UP def index(number): n = str ...

  5. 002-DOM事件实例-实现一个可以拖拽的登陆窗口

    前言:这是跟着慕课网一个老师的视频做的,这几天在重新的梳理自己,写完这个例子要系统的学一下jQuery,我司现在用的还是比较多,毕竟用了它不用考虑IE兼容性,可以让开发更有效率. 1.项目需求及基本的 ...

  6. js移动端滑倒顶部加载历史消息解决方案!

    最近做了一个语音直播聊天的项目,有一个功能是当没有直播时,进入房间可以查看历史消息,滑动到顶部加载之前的历史消息,我用jquery scroll事件,来判断是否滚动到顶部,问题来了: 首先触发请求事件 ...

  7. Java 8 Optional 良心指南,建议收藏

    想学习,永远都不晚,尤其是针对 Java 8 里面的好东西,Optional 就是其中之一,该类提供了一种用于表示可选值而非空引用的类级别解决方案.作为一名 Java 程序员,我真的是烦透了 Null ...

  8. go 下载qq音乐

    //go下载qq音乐 package main import ( _ "fmt" jsoniter "github.com/json-iterator/go" ...

  9. axios下载文件乱码问题 无法解压 文件损坏

    /* 下载附件 */ downloadFile(fileName) { // window.open(url); var that = this; var url = "PO2116&quo ...

  10. 简单的编写java的helloWord

    那么在上一章章节 http://www.cnblogs.com/langjunnan/p/6814641.html 我们简单的俩了解了一下什么是java和配置编写java的环境,本章呢我们学习如何编写 ...