目录

  • HelloWorld
  • @RequestMapping注解
    • @RequestMapping注解的位置
    • @RequestMapping注解的value属性
    • @RequestMapping的method属性
    • @RequestMapping的params属性
    • @RequestMapping的headers属性
    • mvc支持ant风格路径
    • 路径中占位符
    • 通过控制器方法的形参获取请求参数
    • @RequestHeader处理请求头信息和控制器方法形参的映射关系
    • @CookieValue处理cookie数据和控制器方法形参的映射关系
    • 通过Model共享数据
    • 通过Map共享数据
    • 通过ModelMap共享数据
  • MVC视图
    • ThymeleafView
    • 转发视图
    • 重定向视图
    • 视图控制器
    • 开放静态资源访问
  • RESTFul
  • RESTFul案例
    • 删除功能
    • 添加功能
    • 实现修改、回显功能
    • 回顾
  • HttpMessageConverter
    • @RequestBody
    • RequestEntity
    • 通过HttpServletResponse响应浏览器数据
    • @ResponseBody
    • SpringMVC处理json
    • springMVC处理ajax
  • 文件上传和下载
    • 文件下载
    • 文件上传
  • 拦截器
    • 三抽象方法
    • 拦截器配置
    • 多拦截器的执行顺序
  • 异常处理器
    • 基于配置的异常处理
    • 基于注解的异常处理

HelloWorld


<dependencies> <!-- SpringMVC --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>5.3.1</version> </dependency> <!-- 日志 --> <dependency> <groupId>ch.qos.logback</groupId> <artifactId>logback-classic</artifactId> <version>1.2.3</version> </dependency> <!-- ServletAPI --> <dependency> <groupId>javax.servlet</groupId> <artifactId>javax.servlet-api</artifactId> <version>3.1.0</version> <scope>provided</scope> </dependency> <!-- Spring5和Thymeleaf整合包 --> <dependency> <groupId>org.thymeleaf</groupId> <artifactId>thymeleaf-spring5</artifactId> <version>3.0.12.RELEASE</version> </dependency> </dependencies>

创建webapp目录
在里面添加xml配置文件
file->project structure
项目路径和描述都能找到
xml的路径记得改成src下的main下的webapp下

自动创建了

配置web.xml


创建springMVC配置文件就不会报错了


创建控制器

表示已被ioc容器管理了

配置mvc的配置文件

<!-- 配置Thymeleaf视图解析器 --><bean id="viewResolver" class="org.thymeleaf.spring5.view.ThymeleafViewResolver"><property name="order" value="1"/><!--        视图解析器的优先级--><property name="characterEncoding" value="UTF-8"/><!--            模板--><property name="templateEngine"><!--            下面内部bean是给上面的属性的赋值--><bean class="org.thymeleaf.spring5.SpringTemplateEngine"><property name="templateResolver"><!--                    解析视图策略--><bean class="org.thymeleaf.spring5.templateresolver.SpringResourceTemplateResolver"><!-- 视图前缀 --><property name="prefix" value="/WEB-INF/templates/"/><!-- 视图后缀 --><!--                        视图名称加上前缀后缀能跳转指定页面--><property name="suffix" value=".html"/><!--                        模板模型--><property name="templateMode" value="HTML5"/><property name="characterEncoding" value="UTF-8"/></bean></property></bean></property></bean>

创建首页

配置tomcat

运行

和方法名没关系只和请求路径和requestmapping有关

访问指定页面




部署运行


总结:

地址栏有变成web-inf下的target.html呢?所以是用转发的方式

浏览器发送请求,若请求地址符合前端控制器的url-pattern,该请求就会被前端控制器
DispatcherServlet处理。前端控制器会读取SpringMVC的核心配置文件,通过扫描组件找到控制器,
将请求地址和控制器中@RequestMapping注解的value属性值进行匹配,若匹配成功,该注解所标识的
控制器方法就是处理请求的方法。处理请求的方法需要返回一个字符串类型的视图名称,该视图名称会
被视图解析器解析,加上前缀和后缀组成视图的路径,通过Thymeleaf对视图进行渲染,最终转发到视
图所对应页面


@RequestMapping注解

创建新module,配置pom.xml
创建webapp,如果没有蓝点的得配一下


@RequestMapping注解的位置





配置tomcat运行

注解标识的位置







@RequestMapping注解的value属性



运行

@RequestMapping的method属性

Get请求和Post请求
Get:每次提交请求参数会拼接在请求地址部分,用?拼接,名=值&。。。
就是表单的name=value
Post请求参数放请求体中(安全)(数据无限),格式也是name=value&…,Get无请求体(不安全)(数据有限)。
文件上传不能GET

如果RequestMapping的method属性不设置,点击链接和提交发现请求方式是啥都能匹配


运行发现POST方式不好使了

改一下,都好使了

GET查询、POST新增、PUT修改、DELETE删除(相同请求地址前提表示不同请求功能)
测试form能不能发put和delete请求

请求和请求映射的方式匹配不了就报405

@RequestMapping的params属性




@RequestMapping的headers属性

mvc支持ant风格路径





模糊匹配

路径中占位符


获取请求参数


通过控制器方法的形参获取请求参数



获取到了





多请求参数中出现多个同名的请求参数,可以再控制器方法的形参位置设置字符串类型或字符串数组接收请求参数。若使用字符串类型形参最终结果是每个值使用逗号拼接

注解处理请求参数和控制器方法的形参映射关系



没传可能400

设置为可以不传输,和不传、传空字符串时的默认值

@RequestHeader处理请求头信息和控制器方法形参的映射关系


运行

required为true表示请求头信息必须存在,defaultValue是没有信息的默认值

@CookieValue处理cookie数据和控制器方法形参的映射关系


第一次getSession时cookie是存在响应报文中的,因为检查请求报文发现没有cookie没有就是第一次,然后创建httpsession对象,然后将session放到服务器维护的map集合中,创建一个cookie,它的键是固定的JSESSIONID,值是随机序列,和uuid很像。再把cookie响应到浏览器。第二次以后是存在于请求报文中。


也有required和defaultValue属性。

通过实体类型的形参获取请求参数


创建User


请求参数和实体类属性名一致就行


乱码问题
在Tomcat里面servlet.xml设置,GET请求不会乱码




域对象中共享数据
原生servletAPI




通过Model共享数据


通过Map共享数据


通过ModelMap共享数据



通过servletAPI向session域中


通过servletAPI向application域对象共享数据


MVC视图

ThymeleafView

转发视图


重定向视图


视图控制器


404了
mvc配置文件中用了view-controller之后控制器中所有请求映射全部失效

请求映射重新实现效果

开放静态资源访问

同样需要配置注解驱动

创建项目



配置tomcat


RESTFul

RESTFul模拟操作用户资源








HiddenHttpMethodFilter处理PUT和DELETE请求



注册过滤器

设置编码前提条件是在此之前你不能获取任何的请求参数,获取之后编码就没有效果
先设置处理编码的过滤器再配置处理请求方式的过滤器
换一下过滤器顺序

RESTFul案例


依赖配置、web.xml最后创建springMVC配置文件






RESTFul案例:

删除功能

处理超链接路径
超链接发送不了DELETE请求,但是可以去控制一个表单的提交,表单里method=post,还要有请求参数_method


解析成id了
还有一种方式

表示请求地址的地方加上单引号解析成路径再拼接。
只能发送GET请求
要想发送DELETE得借助过滤器HiddenHttpFilter
过滤器要求请求方式必须是POST,请求参数是_method请求参数

web-inf下的内容必须通过转发访问




action没写的话会提交到当前页面


打包里面没有static


springMVC不处理静态资源的,defaultServlet才是

首先静态资源在访问的时候会被springMVC处理,也就是前端控制器处理,找不到请求映射,就交给默认servlet处理,如果找到了就访问,否则404;
如果是默认servlet找不到就不会在控制台显示No mapping

添加功能

因为不需要处理其他业务逻辑和处理数据
所以直接



运行

实现修改、回显功能



复制add成update




拿着th:field的值和value进行比较,一致就自动添加checked=checked,单选框的回显



先回显,回显完确定请求方式,请求方式是PUT所以要特殊处理。

回顾

列表页面请求方式是GET,查询所有信息。
删除用的是Vue.js,用超链接控制表单的提交,给超链接绑定点击事件,通过vue处理点击事件,form表单才是最终提交方式,不是超链接。

DispatchServlet和web容器Tomcat中默认servlet是重复的,都是处理所有请求,冲突了就近原则。处理请求:是每次把请求地址去控制器中找相对应的请求映射,控制器中没有访问静态资源的请求映射,

就是dispatchservlet处理不了就交给default,

如果没配置注解驱动则所有请求都被default处理。

HttpMessageConverter

@RequestBody

新建module


有请求体的请求必须是POST请求






不管GET还是POST传输数据的位置不一样,格式都一样n=v&n=v

RequestEntity

表示完整请求报文信息


运行

来源页面

哪个页面发的请求。

通过HttpServletResponse响应浏览器数据

转发重定向能响应浏览器整个页面
Response.getWriter响应浏览器数据
mvc中用



@ResponseBody



运行


运行

加了注解就变响应体了。

SpringMVC处理json




引入json依赖,数据交互用的

<dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>2.12.1</version> </dependency>


User转成json对象还是数组?
是对象,最外层是大括号是对象,方括号是数组。
其他java对象转json格式字符串(浏览器只能字符串)其他步骤咱之前做过了
json
数据交换多
xml
配置文件多

springMVC处理ajax








没跳转,ajax就是不发生跳转的情况下与页面进行交互。

文件上传和下载

文件下载

ResponseEntity实现下载功能




测试文件上传下载




能改的也就下载的文件和文件名

文件上传

文件上传解析器





解决文件重名问题

运行

拦截器

创建项目

三抽象方法

拦截器配置

mvc配置文件注册



放行



运行

多拦截器的执行顺序

拦截器各个方法执行顺序



pre是按配置拦截器顺序,post和after是反序

异常处理器

基于配置的异常处理







运行

基于注解的异常处理



创建WebInit
新建module

用来代替web.xml

过滤器

添加过滤器








SpringMVC‘s Ediary更新中相关推荐

  1. 本专栏所有力扣题目的目录链接, 刷算法题目的顺序(由易到难/面试频率)/注意点/技巧, 以及思维导图源文件问题(持续更新中)

    这篇文章为本专栏所有力扣题目提供目录链接, 更加方便读者根据题型或面试频率进行阅读, 此外也会介绍我在刷题过程中总结的刷算法题目的顺序/注意点/技巧, 最后说下文中出现的思维导图源文件的问题 和 打卡 ...

  2. JAVA面试大全(持续更新中...)

    本文旨在收集Java面试过程中出现的问题,力求全面,仅作学习交流,欢迎补充,持续更新中-,部分段落选取自网上,部分引用文章已标注,部分已记不清了,如侵权,联系本人 Java基础 1.面向对象的概述 面 ...

  3. 根据Spring-Security安全框架搭建问答论坛系统(更新中.....)

    论坛问答系统系统设计与实现 什么是Spring安全框架 为什么需要Spring-Security 启动Spring-Security 访问控制器方法 密码加密 Spring-Security的权限管理 ...

  4. 面试JAVA常被问到的问题(持续更新中)

    引言 有的面试会被问到有没有写博客,这时候我尴尬,不知道怎么回答,所以这篇文章仅仅是把我面试JAVA的遇到的问题记录下来而已,也算是我写博客迈出的第一步,起码,以后被问到:有没有写博客?我可以回答,我 ...

  5. Java自学视频整理(持续更新中...)

    1.Java基础视频 <张孝祥JAVA视频教程>完整版[RMVB](东西网) 历经5年锤炼(史上最适合初学者入门的Java基础视频)(传智播客) 张孝祥2010年贺岁视频:Java高新技术 ...

  6. 最值得收藏的 数字图像处理 全部知识点思维导图整理(武汉大学慕课课程)(持续更新中)

    本文的思维导图根据慕课上的武汉大学数字图像处理国家精品课程整理而来并标记出重点内容 思维导图就整理了这么多,之后应该也不会更新此内容了, 有需要的可以去 我的主页 了解更多学科的精品思维导图整理 本文 ...

  7. 我学习 Java 的历程和体会(写给新手看,欢迎老司机批评和建议,持续更新中)

    我学习 Java 的历程和体会(写给新手看,欢迎老司机批评和建议,持续更新中) 最初写这篇文章的时候,是在今年的 9 月中旬.今天,我想再写写这将近两个多月以来的感受. 在今年的 10 月我来到北京求 ...

  8. linux运维常用命令一句话(持续更新中)

    整理收集一些Linux运维管理.系统管理的常用命令,太多了记不住,只能记录下来方便日后查看.也可以和大家分享.如果你有好的一句话命令也贴出来吧.本文持续更新中. 1.linux启动过程 开启电源 -- ...

  9. 深入理解JS的面向对象(更新中)

    面向对象是软件开发方法.面向对象的概念和应用已超越了程序设计和软件开发,扩展到如数据库系统.交互式界面.应用结构.应用平台.分布式系统.网络管理结构.CAD技术.人工智能等领域.面向对象是一种对现实世 ...

最新文章

  1. 联想手机android系统耗电,联想 K900 Android 4.2 手机续航能力实测
  2. flash mini播放器
  3. MIT_18.03_微分方程_Fourier_Series_傅里叶级数_Notes
  4. 聊聊HTTPS和SSL/TLS协议
  5. LeetCode 题 - 20. 有效的括号
  6. 进程线程协程-基本概念及特点
  7. android mux协议,GSM 07.10 MUX 协议驱动解析
  8. 正则表达式匹配NOD用户名与密码
  9. 每日一词20190313——地图矢量化
  10. 计算机英语CMYK全称,CMYK是什么意思 CMYK与RGB的区别介绍
  11. win32gui操作
  12. 【解决】移动硬盘被MAC电脑识别为只读盘
  13. LR的日志,使用以及方法
  14. SSO (Single Sign On)
  15. 爆米花现象_爆米花雨是什么梗 看了电影昆池岩你就懂了
  16. coreldraw x4如何出血_coreldraw x4教程
  17. [ssh新闻发布系统五]删除新闻
  18. UE4渲染的整体流程(可视性、GBuffer、反射、动态光照阴影、后期处理)
  19. 2021年最新vue面试题及答案
  20. 【学习】深度学习代码各个步骤都是为了啥(三)

热门文章

  1. 软件推广样例:爱情银行APP日流超50w原因分析
  2. 网站空间和服务器在做站上的区别
  3. autobank渗流分析计算教程_实例分析Autobank在小型水库土石坝渗流稳定计算中的运用...
  4. python datetime与timestamp
  5. 电感的结构、分类及特性
  6. eclipse打开文件的快捷键是什么
  7. 三星 联通 i9502 root 未安装su二进制
  8. java 双击按键_java鼠标各按键单击和左键击双击
  9. 一文揭晓:手机号码归属地api的作用是什么?
  10. 【CSS3】CSS3 学习笔记(1w字+)