日常当咱们要发送短信,当短信里面包含连接地址的话,一般须要作一下长连接转短连接的功能,这样作就我理解有两个好处,一个是让传输的信息量更少,二个是安全性要好一些。html
大概讲一下长连接转短连接的原理:切记,不是压缩算法。而是重定向,当咱们在长连接转成短连接时会有一个短连接指向长连接的一个映射,而后当咱们请求一个短连接的时候,服务器会先根据映射关系从短连接找到长连接,而后重定向到对应的长连接。下面我就写一个简单的例子来演示这个过程。java
@Controller public class RedirectController { private static Map<String, String> container = new HashMap<>(); @GetMapping("/{shortLink}") public void test(@PathVariable String shortLink, HttpServletResponse response) throws IOException { String longLink = container.get(shortLink); response.sendRedirect(longLink); } @GetMapping("longLink2ShortLink") @ResponseBody public String longLink2ShortLink(@RequestParam String longLink){ String shortLink = getlinkNo(); container.put(shortLink, longLink); return shortLink; } public String getlinkNo() { String linkNo = ""; // 用字符数组的方式随机 String model = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"; char[] m = model.toCharArray(); for (int j = 0; j < 6; j++) { char c = m[(int) (Math.random() * 36)]; // 保证六位随机数之间没有重复的 if (linkNo.contains(String.valueOf(c))) { j--; continue; } linkNo = linkNo + c; } return linkNo; } }
很简单,一个是生成短连接的方法,一个是从长连接转成短连接,一个是从短连接转发到对应的长连接。算法
用一个长连接来测试一下看看。数组
例若有一下长连接浏览器
其实就是码农之家的百度搜索结果,咱们先调用生成短链的服务(longLink2ShortLink)服务器
curl 'http://localhost:/8080/longLink2ShortLink?longLink=https://www.baidu.com/s?wd=码农之家&rsv_spt=1&rsv_iqid=0xe09f154e0002f475&issp=1&f=8&rsv_bp=1&rsv_idx=2&ie=utf-8&rqlang=cn&tn=baiduhome_pg&rsv_enter=1&rsv_dl=tb&oq=java%25E7%2594%259F%25E6%2588%25906%25E4%25BD%258D%25E9%259A%258F%25E6%259C%25BA%25E5%25AD%2597%25E7%25AC%25A6%25E4%25B8%25B2&rsv_btype=t&inputT=3803&rsv_t=e2dd%2FYmXWkcaqwVIw2vOASAZm1Q9cPVyaP8MOIzBJ2njJMXmfJI8MfR6gAI90abmmCTi&rsv_pq=e42cb94a00037408&rsv_sug3=132&rsv_sug1=84&rsv_sug7=100&rsv_sug2=0&rsv_sug4=3803'app
返回短链 dom
AHVB5M
而后咱们在浏览器输入http://localhost:8080/AHVB5Mcurl
能够看到已经进行了重定向了。