springboot 实现长链接转短链接

您所在的位置:网站首页 在线长链接转短链接软件 springboot 实现长链接转短链接

springboot 实现长链接转短链接

2023-09-03 20:10| 来源: 网络整理| 查看: 265

文章目录 前言转换原理核心代码代码结构建表语句URLUtil.javaShortLinkController.javaShortLinkServiceImpl.java完整代码链接接口

前言

平时再给别人分享链接时,有时看到这长长的连接很不人性,然后就会有了长链转短链的服务。 这里将使用java springboot 以及 mybatis-plus 来实现长链转短链。 完整代码将在文章最末尾。 至于mybatis-plus SpringBoot整合mybatis-plus–入门超详细

转换原理

将原url通过一系列方式,转换成8位短码(只要能不重复,随便怎么方式都行);将长短链接存入数据库,形成一条对应关系;访问短链接的时候,在数据库找到对应的长链接,并通过重定向实现原url的访问;(如果你的转换方式能过还原,也可以不要数据库,但必须保证转换后的短码不能重复)

核心代码 代码结构

在这里插入图片描述 这里为了篇幅只贴出重要代码

建表语句 DROP TABLE IF EXISTS `short_link`; CREATE TABLE `short_link` ( `id` int(0) NOT NULL AUTO_INCREMENT, `shorts` varchar(30) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, `short_link` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, `long_link` text CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, `create_time` timestamp(0) NOT NULL, `flag` int(0) NOT NULL DEFAULT 0, PRIMARY KEY (`id`) USING BTREE ) ENGINE = InnoDB AUTO_INCREMENT = 4 CHARACTER SET = utf8 COLLATE = utf8_bin ROW_FORMAT = Dynamic; URLUtil.java public class URLUtil { //生成短链接的八个字符 public static String getShortURL() { Random random = new Random(); // 要使用生成 URL 的字符 char[] chars = new char[]{'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z' }; int ln = chars.length; StringBuilder key = new StringBuilder(); for (int i = 0; i @Autowired ShortLinkServiceImpl shortLinkService; //生成分享链接 @RequestMapping(value = "/share.do") public Result shareLink(HttpServletRequest request, String longLink) { Result result = new Result(); if (longLink != null) { result.setData(shortLinkService.addShortLink(longLink, getUrlStart(request))); result.setStatus(true); } return result; } //实现短链跳转 @RequestMapping(value = "/short/{shortLink}") public void sendRedirect(HttpServletResponse response, @PathVariable String shortLink) { ShortLink shorts = shortLinkService.getLongLink(shortLink); if (shorts != null) { try { response.sendRedirect(shorts.getLongLink()); } catch (IOException e) { e.printStackTrace(); } } } //获取请求的协议域名,端口号生成连接的前半部分 public String getUrlStart(HttpServletRequest request) { StringBuilder url = new StringBuilder(); url.append(request.getScheme()); System.out.println(url); url.append("://").append(request.getServerName()); System.out.println(url); url.append(":").append(request.getServerPort()); System.out.println(url); // url.append(request.getServletPath()); // System.out.println(url); return url.toString(); } } ShortLinkServiceImpl.java @Service public class ShortLinkServiceImpl { private ShortLinkMapper shortLinkMapper; @Autowired public void setShortLinkMapper(ShortLinkMapper shortLinkMapper) { this.shortLinkMapper = shortLinkMapper; } //通过长链生成对应短链并存在数据库中 public ShortLink addShortLink(String longLink, String url) { url += "/short"; ShortLink shortLink = new ShortLink(); shortLink.setLongLink(longLink); shortLink.setShorts(URLUtil.getShortURL()); shortLink.setShortLink(url + "/" + shortLink.getShorts()); shortLinkMapper.insert(shortLink); return shortLink; } //通过短链查询到对应长链 public ShortLink getLongLink(String shorts) { QueryWrapper queryWrapper = new QueryWrapper(); queryWrapper.eq("shorts", shorts); return shortLinkMapper.selectOne(queryWrapper); } } 完整代码链接

Github https://github.com/KingJin-web/springboot/tree/master/other/src/main/java/com/king/other/short_link 短链 http://www.wuzhaoqi.top:9000/short/6LMAGNDt

接口

生成短链

http://www.wuzhaoqi.top:9000/share.do?longLink=https://github.com/KingJin-web/springboot/tree/master/other/src/main/java/com/king/other/short_link

返回示例

{ "status": true, "message": null, "data": { "id": 2, "shorts": "6LMAGNDt", "shortLink": "http://www.wuzhaoqi.top:9000/short/6LMAGNDt", "longLink": "https://github.com/KingJin-web/springboot/tree/master/other/src/main/java/com/king/other/short_link", "createTime": "2021-09-20T04:11:37.758", "flag": 0 } }

data.shortLink 就是生成的短链了

温馨提示服务器将在国庆结束后过期

最后附上源代码

Github https://github.com/KingJin-web/springboot/tree/master/other gitee https://gitee.com/KingJin-web/springboot/tree/master/other

以上内容属于个人笔记整理,如有错误,欢迎批评指正!



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3