redirect叫做重定向,重定向其实就是最后跳转是靠浏览器去跳转的。对比的就是转发,所有的跳转都是有web服务器来跳转。
上面这个图说的不全面,因为除了页面,接口请求也是可以跳转的,比如请求接口1,接口1返回一个接口2,浏览器重定向接口2.
说了一下重定向的含义,说一下他的基本用处。
一 页面跳转
我们知道常见的servlet跳转的方式就两种,转发和重定向,转发解释收到请求返回数据跳转到指定的页面,旧的SSM或者一些spring mvc会用到,重定向也一样,只不过他返回一个别的路径,让浏览器再请求一次。
随着很多项目都已经前后端分离解耦,实际上后端只是返回接口数据给前端就可以了,实际上后端对于路径跳转已经很少去关心了。
二请求跳转(涉及到二维码)
实际上操作和前面差不多,之所以会出现请求重定向的情况,一般来说就是需要判断请求的数据,根据不同情况再去返回一个对应的请求让浏览器或者客户端根据情况返回到对应接口。
上面这句话有点绕,我结合一下实际情况。大家平常都用过,大家有没有很好奇一个二维码,若果是下载的二维码,苹果用户会去苹果商店,安卓的会去安卓市场。这些怎么做到的,同理还有一个二维码可以兼容各大支付平台的。别的不了解,我在做我们自己产品的下载二维码才用了重定向的来决这个问题。
首先要知道二维码是啥,实际二维码实际就是一端信息的图像化处理,你只要不把涉及到定位的三个点,遮住一个或者多个,实际上识别程序就能识别解析里面的内容。
如果我们是一个地址的二维码,不管你是手机自带的扫码还是别的都能解析出来,问你要不要跳转到这个地址(有的是直接就跳过去)。这里我们后台可以接受到请求,我们可以做个统计计数,或者加个参数啥的,在这后面我们想根据不同的系统类型(安卓,IOS,这些你要能分别出来否则你就别乱跳了),返回重定向不同的请求地址。IOS的给对应app store地址,安卓给你的应用市场地址,浏览器再请求到不同地址。这就是一个二维码,不同人不同的结果的重定向方式的实现。
String androidUrl = "redirect:"+appDownloadInfoDO.getAndroidUrl();
String iosUrl = "redirect:"+appDownloadInfoDO.getIosUrl();
if (userSupport.isAndroidLogin()){
logger.info(" device type : {}", "android" );
//android下载次数统计更新
Integer androidCount = appDownloadInfoDO.getAndroidCount();
if( androidCount == null ){
androidCount = 0;
}
androidCount = androidCount + 1;
appDownloadInfoDO.setAndroidCount(androidCount);
liveQrCodeConfigMapper.updateById(appDownloadInfoDO);
return new ModelAndView(androidUrl);
}else if(userSupport.isIOSLogin()) {
logger.info(" device type : {}", "ios" );
//android下载次数统计更新
Integer iosCount = appDownloadInfoDO.getIosCount();
if( iosCount == null ){
iosCount = 0;
}
iosCount = iosCount + 1;
appDownloadInfoDO.setIosCount(iosCount);
liveQrCodeConfigMapper.updateById(appDownloadInfoDO);
return new ModelAndView(iosUrl);
}else {
logger.info(" device type : {}", "other" );
return new ModelAndView(androidUrl);
}
所以说有些东西你能结合之前或者现在学习到的一些知识,会有超过书本带来的收获。