1.前言现在搞前端的不学好http有关的知识已经不行啦~笔者也是后知后觉,在搞node的时候意识到网络方面的薄弱,开始学起http相关知识。这一篇是非常基础的讲解,适合入门人员掌握content-type的知识和有经验的人员查阅。可以说,弄懂了content-type,你才能在学习http的道路上走的更加顺畅,让我们满怀激情的开始吧~~2.Http请求头中的content-type2.1认识content-type要学习content-type,必须事先知道它到底是什么,是干什么用的。HTTP协议(RFC2616)采用了请求/响应模型。客户端向服务器发送一个请求,请求头包含请求的方法、URI、
CORS全称Cross-OriginResourceSharing,即跨域资源共享,是一个由一系列HTTP头组成的系统,这些HTTP头决定浏览器是否阻止前端javascript代码获取跨域请求的响应。为什么需要CORS?这是因为浏览器存在同源安全策略,当我们在当前域请求另外一个域的资源时,浏览器默认会阻止脚本读取它的响应,这时CORS就有了用武之地。目录[TOC]1、同源策略同源策略是浏览器的一个重要的安全策略,它用于限制一个源的文档或其加载的脚本如何与另外一个源进行交互,它能够隔绝恶意文档,减少被攻击的媒介。1.1、同源的定义如果两个URL的协议、主机名和端口号都是相同的,那么这两个URL就
CORS是一个W3C标准,全称是“跨域资源共享”(Cross-originresourcesharing)。它允许浏览器向跨域的服务器,发出XMLHttpRequest请求,从而克服了AJAX只能同源使用的限制。1、目录[TOC]2、简介CORS需要浏览器和服务器同时支持。目前,所有浏览器都支持该功能。整个CORS通信过程,都是浏览器自动完成,不需要用户参与。对于开发者来说,CORS通信与普通的AJAX通信没有差别,代码完全一样。浏览器一旦发现AJAX请求跨域,就会自动添加一些附加的头信息,有时还会多出一次附加的请求,但用户不会有感知。因此,实现CORS通信的关键是服务器。只要服务器实现了CO
1、SpingMVC还必要学了?有很多粉丝一直要求直接上SpringBoot系列,说SpringMVC没有公司用了,说的没错,可以这么说,已经没有公司单纯用SpringMVC开发项目了,基本都会使用SpringBoot或SpringCloud,这俩开发效率确实非常高,这就是我们要抛弃SpringMVC的理由么?SpringBoot是在Spring和SpringMVC的基础上搭建起来的,只是对其进行了封装,更便于快速开发。但是如果想用好SpringBoot,那么Spring和SpringMVC这2关是必须要过的,且只有吃透了Spring和SpringMVC,才能够吃透SpringBoot,所以要
本文将介绍SpringMVC中内容协商,可能有朋友听过,没听过的估计觉得很陌生,不管怎么样,先告诉你一点,这篇是非常重要的一个知识点,一定不要错误,坚持看完,一定会有大量收获,末尾有pdf版本,需要的自行获取。目录[TOC]1、预备知识接口测试利器HTTPClient2、先来做一个测试思考下,下面这个springmvc接口会输出什么?@RequestMapping(value="/cn/test1")@ResponseBodypublicList<String>test1(){List<String>result=Arrays.asList(&quo
今天又给大家带来了一个很重要的知识点:SpringMVC中如何处理跨域问题,本文的内容同样适合于SpringBoot1、跨域访问报错当一个请求url的协议、域名、端口三者之间任意一个与当前页面url不同即为跨域。出于安全原因,浏览器禁止Ajax调用驻留在当前原点之外的资源,比如从a.com发送一个ajax请求到b.com,则浏览器控制台会报跨域访问错误。如下图,从http://localhost:63342/站点页面中向ttp://localhost:8080/chat21/cors/test2发送一个ajax请求,则出现了红色的错误信息,错误中包含了Access-Controll-Allow
本文将讲解Spring中的另外一个知识点:SpringMVC中转换器Converter的使用。好陌生啊,这玩意是干啥的呢?请往下看。1、来看一个需求如下,有一个UserDto类,表示用户信息publicclassUserDto{//用户名privateStringname;//年龄privateIntegerage;//省略getter、setter方法}要求后台所有接口接受UserDto数据时,参数的值格式为:name,age,比如下面接口@RequestMapping("/convert/test1")publicUserDtotest1(@RequestParam(&
1、本文内容3个知识点SpringMVC中转发如何实现?SpringMVC重定向如何实现?重定向3种传参方式2、转发2.1、servlet原生实现转发request.getRequestDispatcher(path).forward(request,response);2.2、SpringMVC实现转发接口需满足下面这3条的会被SpringMVC当做转发进行处理接口返回值为String类型返回值格式:forward:转发的路径方法或者类上不要标注@ResponseBody注解案例代码如下,当访问/forward/test1的时候,返回值以forward:开头,SpringMVC会将请求转发到
本文将介绍SpringMVC中的@SessionAttribute注解。1、预备知识接口测试利器HTTPClient参数解析器HandlerMethodArgumentResolver解密2、@SessionAttribute注解2.1、作用用来标注在接口的参数上,参数的值来源于session作用域。2.2、用法如下代码,site参数上使用了@SessionAttribute("site")注解,site参数的值等于session.getAttribute("site")@ResponseBodypublicStringtest2(@SessionAtt
本文将介绍SpringMVC中的@RequestAttribute注解。1、预备知识接口测试利器HTTPClient参数解析器HandlerMethodArgumentResolver解密2、@RequestAttribute注解2.1、作用用来标注在接口的参数上,参数的值来源于request作用域。2.2、用法如下代码,site参数上使用了@RequestAttribute("site")注解,site参数的值等于request.getAttribute("site")@ResponseBodypublicStringtest2(@RequestAtt
当我们在接口中想获取cookie值的时候,怎么写代码更简单呢?此时可以使用SpringMVC中的@CookieValue注解来标注参数,下面来看具体的用法。1、预备知识接口测试利器HTTPClient参数解析器HandlerMethodArgumentResolver解密2、@CookieValue该注释指示应将方法参数绑定到HTTPcookie。方法参数可以声明为javax.servlet.http.Cookie类型,也可以声明为Cookie值类型(String、int等)。@Target(ElementType.PARAMETER)@Retention(RetentionPolicy.RU
当我们在接口中想获取请求头的值的时候,怎么写代码更简单呢?SpringMVC中提供了@RequestHeader注解,用来获取请求头中的信息。本文将介绍@RequestHeader的4种用法及原理。1、预备知识接口测试利器HTTPClient参数解析器HandlerMethodArgumentResolver解密2、@RequestHeader介绍@RequestBody注解源码如下,可以用来标注在接口的参数上,用来获取HTTP请求header中的值,下面通过案例列出常见的4种用法。@Target(ElementType.PARAMETER)@Retention(RetentionPolicy
本文将介绍@RequestBody注解常见的一些用法和原理,这个注解日常用到的特别多。1、预备知识接口测试利器HTTPClient参数解析器HandlerMethodArgumentResolver解密2、@RequestBody介绍标注在接口的参数上,用来获取HTTP请求body中的值,下面通过案例列出常见的用法。@Target(ElementType.PARAMETER)@Retention(RetentionPolicy.RUNTIME)@Documentedpublic@interfaceRequestBody{/***body是不是必须的,默认为true,若不传body,会有异常;若
前面没有详细介绍SpringMVC中各种注解的用法,这里准备一一补上,今天来看@RequestParam注解的用法。1、预备知识接口测试利器HTTPClient参数解析器HandlerMethodArgumentResolver解密2、@RequestParam注解的作用标注在接口的方法参数上,被标注的参数的值来源于request.getParameter或request.getParameterValues。推荐阅读:2021最新版Java微服务学习线路图+视频3、@RequestParam源码@Target(ElementType.PARAMETER)@Retention(Retentio
1、来看2个好问题大家在使用SpringMVC或者SpringBoot开发接口的时候,有没有思考过下面这2个问题接口的参数到底支持哪些类型?有什么规律可循么?接口参数的值是从哪里来的呢?说实话,这2个问题非常关键,搞懂原理之后,开发接口将得心应手,今天就带大家从原理上来搞懂这俩问题。2、SpringMVC处理请求大概的过程step1、接受请求step2、根据请求信息找到能够处理请求的控制器方法step3、解析请求,组装控制器方法需要的参数的值step4、通过反射调用送控制器方法step5、响应结果等咱们重点来看step3参数值组装这个过程。3、解析处理器方法参数的值解析参数需要的值,Sprin
本文介绍Springweb中特别牛逼的一个类RestTemplate。目录[TOC]1、RestTemplate概述发送http请求,估计很多人用过httpclient和okhttp,确实挺好用的,而Springweb中的RestTemplate和这俩的功能类似,也是用来发送http请求的,不过用法上面比前面的2位要容易很多。spring框架提供的RestTemplate类可用于在应用中调用rest服务,它简化了与http服务的通信方式,统一了RESTful的标准,封装了http链接,我们只需要传入url及返回值类型即可。相较于之前常用的HttpClient,RestTemplate是一种更优
本文主要2个主题:介绍RESTful、SpringMVC中RESTful案例。目录[TOC]1、RESTful简介REST:RepresentationalStateTransfer,表现层资源状态转移。a>资源资源是一种看待服务器的方式,即,将服务器看作是由很多离散的资源组成。每个资源是服务器上一个可命名的抽象概念。因为资源是一个抽象的概念,所以它不仅仅能代表服务器文件系统中的一个文件、数据库中的一张表等等具体的东西,可以将资源设计的要多抽象有多抽象,只要想象力允许而且客户端应用开发者能够理解。与面向对象设计类似,资源是以名词为核心来组织的,首先关注的是名词。一个资源可以由一个或多个U
1、前言上一篇中介绍了RequestBodyAdvice接口,可以对@RequestBody进行增强,本文介绍另外一个相似的接口:ResponseBodyAdvice,这个可以对@ResponseBody进行增强,可以拦截@ResponseBody标注的方法的返回值,对返回值进行统一处理,比如进行加密、包装等操作;比如通过他可以实现统一的返回值。2、接口如何实现统一返回值?要求系统中所有返回json格式数据的接口都需要返回下面格式的数据。{"success":true,"code":null,"msg":"操作成功!&quo
1、前言在实际项目中,有时候我们需要在请求之前或之后做一些操作,比如:对参数进行解密,对所有的返回值进行加密等。这些与业务无关的操作,我们没有必要在每个controller方法中都写一遍,这里我们就可以使用springmvc中的@ControllerAdvice和RequestBodyAdvice、ResponseBodyAdvice来对请求前后进行处理,本质上就是aop的思想。RequestBodyAdvice:对@RquestBody进行增强处理,比如所有请求的数据都加密之后放在body中,在到达controller的方法之前,需要先进行解密,那么就可以通过RequestBodyAdvic
本文将通过阅读源码的方式带大家了解springmv容器启动的过程,SpringMVC中的各种组件都是在容器启动的过程中组装的,所以如果熟悉整个过程后,你可以随意对SpringMVC进行扩展,SpringMVC会被你玩的出神入化。目录[TOC]1、前言SpringMVC,建议大家使用全注解的方式,全注解的方式及原理不了解的,先去看一下这篇文章:SpringMVC全注解方式如何使用?上面的文章看懂以后再来看本文,否则将出现消化不良的现象。本文以全注解的方式为基础,来解说SpringMVC容器启动的整个流程。2、回顾全注解方式2个关键类全注解的方式重点就在于2个类:MVC初始化类、MVC配置类2.1
本文将通过阅读源码的方式带大家了解springmvc处理请求的完整流程,干货满满。目录[TOC]1、先了解下SpringMVC常用的10组件1.1、DispatcherServlet:前端控制器这个大家是最熟悉的,是一个servlet,是springmvc处理请求的入口,不需要咱们开发,由框架提供。作用:统一处理请求和响应,整个流程控制的中心,由它来调用其他组件处理用户的请求。1.2、HandlerMapping:处理器映射器作用:根据请求的信息(如url、method、header等)查找请求处理器,即找到自定义的controller中处理请求的方法。HandlerMapping接口源码如下
前面写的14篇springmvc文章中都用到了配置文件,比如web.xml,springmvc的配置文件等等,使用起来比较繁琐,本文将把所有配置文件抛弃掉,采用全注解的方式使用springmvc,且会带大家了解其原理。1、本文内容全注解方式使用springmvc全注解方式原理解析2、全注解方式使用springmvc2.1、新建mavenweb项目项目中不需要web.xml配置文件,maven配置如下<?xmlversion="1.0"encoding="UTF-8"?><projectxmlns="http://maven.a
1、本文目的目前多数系统都采用前后端分离的方式,后端只负责提供restfull接口,返回json格式的数据就可以了,前端负责渲染。本文带大家主要解决2个问题,在springmvc提供json格式的接口的时候,需要解决2个问题问题1:所有接口的返回值采用统一的格式问题2:系统中异常处理设计的问题,采用一种非常好的方式来解决这个问题下面咱们一起来解决这2个问题。2、解决问题1:实现统一的返回值所有的接口均返回ResultDto类型的数据,ResultDto类的代码如下,主要有4个字段success:表示接口是成功还是失败code:错误码,当有异常的时候,可以返回具体的错误码msg:提示信息,比如:
1、本文内容带大家掌握springmvc中统一异常处理的使用。2、通常我们是如何处理异常的?看一下下面的代码,每个方法中有一段trycatch,用来对业务异常进行处理,不知道大家是否写过这种类似的代码,这种代码有什么问题么?publicclassDemo{publicvoidm1(){try{//业务代码}catch(Exceptione){}}publicvoidm2(){try{//业务代码}catch(Exceptione){}}....}3、上面代码存在的问题先来思考一个问题,当系统发生异常了,我们会怎么做?为了方便排查错误,我们会在catch中将异常信息记录到日志文件中,变成了下面这
1、本文内容回顾下springmvc处理请求的过程(流程图)如何干预springmvc的处理流程?加入拦截器后springmvc的处理过程拦截器的用法(具体2个步骤)多个拦截器的执行顺序通过案例验证拦截器的执行顺序一起读源码领取后端必备的200本书籍2、回顾下springmvc处理请求的过程简化下过程,如下图,过程还是非常简单的3、如何干预springmvc的处理流程?比如我们的系统中,除了登录的方法,其他所有方法都需要先验证一下用户是否登录了,若未登录,让用户先跳转到登录页面,最笨的方法是在所有需要验证的方法内部都加上验证的代码,那么有没有更好的方法呢?如下图,如果我们将验证登录的代码放在调
1、本文内容静态资源&jsp是被谁处理的?如何让springmvc处理所有请求?springmvc如何处理静态资源?springmvc处理静态资源的2种方案、区别、原理详解领取后端必备的200本书籍2、静态资源&jsp是被谁处理的?不知大家是否注意了一个问题,我们将web项目发布到tomcat后,可以直接访问jsp后缀的文件,或者直接访问项目中的静态资源(js/css/图片之类的文件),只要路径写的没有问题,都可以正常在浏览器中显示,大家是否思考过,是谁在处理这个请求呢?tomcat是一个servlet容器,servlet容器中通常有servlet来处理各种请求,那么当我们访问
1、本篇内容本文让大家掌握springmvc中异步处理请求,特别牛逼的一个功能,大家一定要掌握。看本文之前,需要一些预备知识,大家先看下这篇文章:servlet3.0中的异步处理。2、看段代码,分析问题@ResponseBody@RequestMapping("/async/m1.do")publicStringm1()throwsInterruptedException{longst=System.currentTimeMillis();System.out.println("主线程:"+Thread.currentThread()+",&q
1、回顾一下目前为止,springmvc系列中,已经介绍了大量Controller的用法,大家有没有注意到,目前所有controller中的方法接收到请求之后,都是有返回值的,返回值主要有2种类型:1、输出的是页面:也就是视图(会向客户端输出页面),此时方法的返回值可以是String(视图名称)、ModelAndView(页面中有数据的情况)2、输出的是json格式的数据:需要用到@ResponseBody注解这2种情况中,都是springmvc来处理返回值的,接受到返回值之后,会调用response来进行页面跳转或者调用输出流将json格式的数据输出。2、思考一个问题当方法的返回值为void
目前比较流行前后端分离,后端只需为前端提供restfull接口,所有的接口都返回json格式的数据,前端接收到json数据之后再进行处理。那么在SpringMVC中如何向前端输出json格式的数据呢?常见的有3种方式,我们来了解下。1、方式1:方法上添加@ResponseBody需求使用springmvc提供一个接口,以json格式输出用户列表。3个步骤step1:maven配置引入jackjsonjackjson用于将java对象转换为json格式的字符串,也可以将json格式的字符串转换为java对象我们的接口需要将java对象转换为json格式的字符串输出到客户端,所以我们需要用到这个包
当http请求被自定义的controller处理时,如何指定响应的页面呢?这个就是我们本文需要讨论的问题。在controller中响应页面有很多种方式,稍后我们会一一介绍,大家需要掌握每种方式的用法以及这些方式之间的区别,以后能够灵活使用。本文用到的页面我都以jsp为例,其他页面模板技术,比如freemarker、velocity、thymeleaf、enjoy,这些我们后面专门再开篇讲解。1、本文内容SpringMVC返回页面的3种方式及区别SpringMVC重定向的2种方式及区别2、软件版本idea2020.3.3jdk1.8≥maven3.6.1spring5.3.6apache-tom