精华内容
下载资源
问答
  • 最近要实现一个推广链接的链接转换到短链接的功能,不能接的第三方接口,如何生成短连接网上这些都说的明明白白了,这里只讲如何通过短连接访问链接即真实地址。首先说看一下: 转换原理: 将原url通过一系列...

    最近要实现一个推广链接的长链接转换到短链接的功能,不能接的第三方接口,如何生成短连接网上这些都说的明明白白了,这里只讲如何通过短连接访问长链接即真实地址。首先说看一下:

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

    如何生成短链接我就不说了,网上各种方法都可以用,生成的短链接其实一小段字符窜,然后在把域名端口拼接起来就好了。来看一下这个接口是如何实现的。

    @RequestMapping("/{shortUrl}")     
    public ModelAndView jumpLongLink(HttpServletRequest request, ModelAndView mav, @PathVariable("shortUrl")String shortUrl) {
    
        String longUrl = "";
        String longurl = shorturlService.restoreUrl(shortUrl);
    
        if (longUrl!=null) {
    
            longUrl = longurl;
        }
        mav.setViewName("redirect:" + longUrl);
        return mav;
    }

    第一行注解我就不讲了,{shortUrl}这个就是动态变化的生成的短链接,shorturlService.restoreUrl()方法是通过传入得短链接到库里查询对应的长链接即真实地址。然后转发重定向到真实的地址即可。完整的短链接本地访问:127.0.0.1/端口号/短链接,如:127.0.0.1/8888/2MnQFj,线上的访问地址:域名/短链接,如:www.baidu.com/2MnQFj,如果项目有拦截器,因为短链接是动态变化的,需要在前面加一层路径,像这样:127.0.0.1/8888/go/2MnQFj然后就完事了。

    展开全文
  • java长连接连接

    千次阅读 2017-11-14 20:18:26
    我们经常看到短信和微博中用到短链接短链接的主要职责就是把原始链接很的地址压缩成只有6 个字母的短链接地址, 当点击这6 个字母的链接后,又可以跳转到原始链接地址。 转换原理: 并不是采用压缩算法...

    我们经常看到短信和微博中用到短链接,短链接的主要职责就是把原始链接很长的地址压缩成只有6 个字母的短链接地址,

    当点击这6 个字母的链接后,又可以跳转到原始链接地址。

    转换原理:

    并不是采用压缩算法(如gzip)url的方法,越压缩长度越长。

    可以用MD5 算法对原始链接进行加密(这里使用的MD5 加密后的字符串长度为32 位),然后对加密后的字符串进行处理以得到短链接的地址。

    [java] view plain copy
    1. import org.apache.commons.codec.digest.DigestUtils;  
    2.   
    3. public class ShortUrl {  
    4.       
    5.     public static void main(String[] args) {  
    6.         // 长连接  
    7.         String longUrl = "http://data.13322.com/basket/team/27_0_1.html";  
    8.         // 转换成的短链接后6位码  
    9.         String[] shortCodeArray = shortUrl(longUrl);  
    10.           
    11.         for (int i = 0; i < shortCodeArray.length; i++) {  
    12.             System.out.println(shortCodeArray[i]);// 任意一个都可以作为短链接码  
    13.         }  
    14.     }  
    15.   
    16.     public static String[] shortUrl(String url) {  
    17.         // 可以自定义生成 MD5 加密字符传前的混合 KEY  
    18.         String key = "";  
    19.         // 要使用生成 URL 的字符  
    20.         String[] chars = new String[] { "a""b""c""d""e""f""g""h",  
    21.                 "i""j""k""l""m""n""o""p""q""r""s""t",  
    22.                 "u""v""w""x""y""z""0""1""2""3""4""5",  
    23.                 "6""7""8""9""A""B""C""D""E""F""G""H",  
    24.                 "I""J""K""L""M""N""O""P""Q""R""S""T",  
    25.                 "U""V""W""X""Y""Z" };  
    26.   
    27.         // 对传入网址进行 MD5 加密  
    28.         String sMD5EncryptResult = DigestUtils.md5Hex(key + url);  
    29.         String hex = sMD5EncryptResult;  
    30.         String[] resUrl = new String[4];  
    31.         for (int i = 0; i < 4; i++) {  
    32.             // 把加密字符按照 8 位一组 16 进制与 0x3FFFFFFF 进行位与运算  
    33.             String sTempSubString = hex.substring(i * 8, i * 8 + 8);  
    34.             // 这里需要使用 long 型来转换,因为 Inteper .parseInt() 只能处理 31 位 , 首位为符号位 , 如果不用  
    35.             // long ,则会越界  
    36.             long lHexLong = 0x3FFFFFFF & Long.parseLong(sTempSubString, 16);  
    37.             String outChars = "";  
    38.             for (int j = 0; j < 6; j++) {  
    39.                 // 把得到的值与 0x0000003D 进行位与运算,取得字符数组 chars 索引  
    40.                 long index = 0x0000003D & lHexLong;  
    41.                 // 把取得的字符相加  
    42.                 outChars += chars[(int) index];  
    43.                 // 每次循环按位右移 5 位  
    44.                 lHexLong = lHexLong >> 5;  
    45.             }  
    46.   
    47.             // 把字符串存入对应索引的输出数组  
    48.             resUrl[i] = outChars;  
    49.         }  
    50.         return resUrl;  
    51.     }  
    52.   
    53. }  


    依赖md5加密jar包:

    [html] view plain copy
    1. <dependency>  
    2.     <groupId>commons-codec</groupId>  
    3.     <artifactId>commons-codec</artifactId>  
    4.     <version>1.5</version>  
    5. </dependency>  

    跳转原理

    当我们生成短链接之后,只需要在表中(数据库或者NoSql )存储原始链接与短链接的映射关系即可。

    当我们访问短链接时,只需要从映射关系中找到原始链接,即可跳转到原始链接。


    利用第三方接口生成短链接

    百度的短网址http://dwz.cn/ 除了提供在线生成外,还提供了API接口调用。

    展开全文
  • 很多人一定想的是短连接是通过一定的算法将长链接变成短连接的,然后访问的时候再还原,恩,非常高大上,但是仔细想想,怎么可能,那得多牛逼的压缩算法,多的url都可以压缩为几个字节,而且还能还原,还是无损...
  • 网址应用已经在全国各大微博上开始流行了起来。例如QQ微博的url.cn,新郎的sinaurl.cn...微博限制字数为140字一条,那么如果我们需要发一些连接上去,但是这个连接非常的,以至于将近要占用我们内容的一半篇幅,...

    短网址应用已经在全国各大微博上开始流行了起来。例如QQ微博的url.cn新郎的sinaurl.cn,六度短网址6du.in等。

    我们在QQ微博上发布网址的时候,微博会自动判别网址,并将其转换,例如:http://url.cn/2hytQx

    为什么要这样做的,原因我想有这样几点:

    微博限制字数为140字一条,那么如果我们需要发一些连接上去,但是这个连接非常的长,以至于将近要占用我们内容的一半篇幅,这肯定是不能被允许的,所以短网址应运而生了。
    短网址可以在我们项目里可以很好的对开放级URL进行管理。有一部分网址可以会涵盖色情,暴力,广告等信息,这样我们可以通过用户的举报,完全管理这个连接将不出现在我们的应用中,应为同样的URL通过加密算法之后,得到的地址是一样的。
    我们可以对一系列的网址进行流量,点击等统计,挖掘出大多数用户的关注点,这样有利于我们对项目的后续工作更好的作出决策。
    其实以上三点纯属个人观点,因为在我接下来的部分项目中会应用到,所以就了解了一下,下面先来看看短网址映射算法的理论(网上找到的资料):

    将长网址md5生成32位签名串,分为4段,每段8个字节;
    对这四段循环处理,取8个字节,将他看成16进制串与0x3fffffff(30位1)与操作,即超过30位的忽略处理;
    这30位分成6段,每5位的数字作为字母表的索引取得特定字符,依次进行获得6位字符串;
    总的md5串可以获得4个6位串;取里面的任意一个就可作为这个长url的短url地址;
    很简单的理论,我们并不一定说得到的URL是唯一的,但是我们能够取出4组URL,这样几乎不会出现太大的重复。

    下面来看看程序部分:

    [java] view plaincopyprint?在CODE上查看代码片派生到我的代码片

    public static string[] ShortUrl(string url)
    {
    //可以自定义生成MD5加密字符传前的混合KEY
    string key = “Leejor”;
    //要使用生成URL的字符
    string[] chars = new string[]{
    “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”
    };

    //对传入网址进行MD5加密  
    string hex = System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(key + url, "md5");  
    
    string[] resUrl = new string[4];  
    
    for (int i = 0; i < 4; i++)  
    {  
        //把加密字符按照8位一组16进制与0x3FFFFFFF进行位与运算  
        int hexint = 0x3FFFFFFF & Convert.ToInt32("0x" + hex.Substring(i * 8, 8), 16);  
        string outChars = string.Empty;  
        for (int j = 0; j < 6; j++)  
        {  
            //把得到的值与0x0000003D进行位与运算,取得字符数组chars索引  
            int index = 0x0000003D & hexint;  
            //把取得的字符相加  
            outChars += chars[index];  
            //每次循环按位右移5位  
            hexint = hexint >> 5;  
        }  
        //把字符串存入对应索引的输出数组  
        resUrl[i] = outChars;  
    }  
    return resUrl;  
    

    }

    现在可以直接使用该方法,可以等到下面四组值:

    [html] view plaincopyprint?在CODE上查看代码片派生到我的代码片

    ShortUrl(http://www.me3.cn)[0]; //得到值fAVfui
    ShortUrl(http://www.me3.cn)[1]; //得到值3ayQry
    ShortUrl(http://www.me3.cn)[2]; //得到值UZzyUr
    ShortUrl(http://www.me3.cn)[3]; //得到值36rQZn

    在存放这个URL的数据方面,我个人推荐TTServer,有的朋友可以没有听说过,下面是这个数据库的介绍:

    Tokyo Cabinet 是日本人 Mikio Hirabayashi(平林幹雄)のページ 开发的一款DBM数据库(注:大名鼎鼎的DBM数据库qdbm就是他开发的),该数据库读写非常快。insert:0.4sec/1000000 recordes(2500000qps),写入100万数据只需要0.4秒。search:0.33sec/1000000 recordes (3000000 qps),读取100万数据只需要0.33秒。

    可以看到对于字典类型的数据Key/Value的查询,这个数据库可以说是我目前见过效率非常高的,况且他如此的小巧,用来对short url/long url的配对再好不过。

    该系统使用6个短码字符来表示任何长度的网址。 有效的字符代码是ASCII ‘A’到’Z’和’0’的’5’,其中每个字符包含2 ^ 5(32)状态。 6短码字符可用于绘制32 ^ 6(1073741824)的网址

    首先,你需要一个数据库表来存储和检索你映射的网址。

    [html] view plaincopyprint?在CODE上查看代码片派生到我的代码片

    CREATE TABLE mappedURL (的CREATE TABLE mappedURL(
    shortCode char(6) not null,
    lognURL text not null,
    PRIMARY KEY shortCodeInd (shortCode),
    );

    其次,你需要定义一个算法将长的URL映射到短的URL。 算法上面已经介绍过了。

    第三,你需要创建一个网页,从数据库的短网址的映射找到原始的URL,并重定向之。

    展开全文
  • 短链接的主要职责就是把原始链接很的地址压缩成只有6 个字母的短链接地址,当我们点击这6 个字母的链接后,我们又可以跳转到原始链接地址。 开始以为短链接是按照某种算法把原始链接压缩短链接,再根据算法从...

    最近看到微博的短链接真是很火啊,新浪、腾讯、搜狐等微博网站都加入了短链接的功能。之所以要是使用短链接,主要是因为微博只允许发140 字,如果链接地址太长的话,那么发送的字数将大大减少。短链接的主要职责就是把原始链接很长的地址压缩成只有6 个字母的短链接地址,当我们点击这6 个字母的链接后,我们又可以跳转到原始链接地址。

    开始以为短链接是按照某种算法把原始链接压缩为短链接,再根据算法从短链接反算成原始链接的。后来尝试了下压缩算法(gzip 压缩算法),发现对于url 这种字符串越是压缩,长度就越长。通过对压缩算法的一些了解,发现靠压缩算法来实现这个功能不太靠谱。

    后来在网上找到一个生成算法,该算法主要使用MD5 算法对原始链接进行加密(这里使用的MD5 加密后的字符串长度为32 位),然后对加密后的字符串进行处理以得到短链接的地址。原始的算法是C# 版本的,这里我把该算法修改成Java 版本的. 算法的具体代码如下,代码中有注释:

    一、  代码

    package com.csdn.shorturl;

    public class ShortUrlGenerator {

        /**

          * @param args

          */

        public static void main(String[] args) {

           // 长连接: http://tech.sina.com.cn/i/2011-03-23/11285321288.shtml

           // 新浪解析后的短链接为: http://t.cn/h1jGSC

           String sLongUrl = "http://tech.sina.com.cn/i/2011-03-23/11285321288.shtml" ; // 3BD768E58042156E54626860E241E999

           String[] aResult = shortUrl (sLongUrl);

           // 打印出结果

           for ( int i = 0; i < aResult. length ; i++) {

               System. out .println( "[" + i + "]:::" + aResult[i]);

           }

        }

        public static String[] shortUrl(String url) {

           // 可以自定义生成 MD5 加密字符传前的混合 KEY

           String key = "wuguowei" ;

           // 要使用生成 URL 的字符

           String[] chars = new String[] { "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"

           };

           // 对传入网址进行 MD5 加密

           String sMD5EncryptResult = ( new CMyEncrypt()).getMD5OfStr(key + url);

           String hex = sMD5EncryptResult;

           String[] resUrl = new String[4];

           for ( int i = 0; i < 4; i++) {

               // 把加密字符按照 8 位一组 16 进制与 0x3FFFFFFF 进行位与运算

               String sTempSubString = hex.substring(i * 8, i * 8 + 8);

               // 这里需要使用 long 型来转换,因为 Inteper .parseInt() 只能处理 31 位 , 首位为符号位 , 如果不用 long ,则会越界

               long lHexLong = 0x3FFFFFFF & Long.parseLong (sTempSubString, 16);

               String outChars = "" ;

               for ( int j = 0; j < 6; j++) {

                  // 把得到的值与 0x0000003D 进行位与运算,取得字符数组 chars 索引

                  long index = 0x0000003D & lHexLong;

                  // 把取得的字符相加

                  outChars += chars[( int ) index];

                  // 每次循环按位右移 5 位

                  lHexLong = lHexLong >> 5;

               }

               // 把字符串存入对应索引的输出数组

               resUrl[i] = outChars;

           }

           return resUrl;

        }

    }

    二、  输出结果

    执行上面代码的结果如下,会产生4 组6 位字符串,任意一组都可以作为当前字符串的短链接地址。

    [0]:::7nUFJn

    [1]:::f6Zzy2

    [2]:::j6jmQb

    [3]:::2eAjea

    三、  跳转原理

    当我们生成短链接之后,只需要在表中(数据库或者NoSql )存储原始链接与短链接的映射关系即可。当我们访问短链接时,只需要从映射关系中找到原始链接,即可跳转到原始链接。

    展开全文
  • 根据长连接生成一个短链接。 根据短链接解析出长链接。 简单实现 如何实现这个功能呢?也许你会考虑实现一个算法,将长链接转成短链接,实现长短的一一对应。然后再实现逆运算,将短链接换算回长链接。当然这种...
  • rar压缩软件.rar

    2016-02-13 10:52:44
    RAR 是一个让你在命令行模式中管理压缩文件的控制台应用。RAR 提供压缩、加 密、数据恢复和许多其它此手册中描述的其它功能。 RAR 只支持 RAR 格式压缩文件,它默认有 .rar 扩展名。不支持ZIP 和其他格 式。即使...
  • 网址生成器 v1.0

    2019-11-05 05:20:19
    淘宝客推广神器——超实惠网址生成工具作为一名淘宝客 群发消息还在为连接超级而烦恼吗? 超实惠网址生成器助您推广更方便;我们提供多种方式分享网址方式:1.生成网址后会弹出生成结果窗口,你可以直接...
  • 4.最新显示排行代码加入防刷功能,即同一网站2分钟内访问只记录一次(多时间可设置)! 5.特别提醒所有客户,网站上传后一定要修改data下在数据库名(改了数据库名,要改conn.asp和adminmaster/conn.asp和iP/conn.asp)!...
  • 分享100常用的网页

    万次阅读 2019-05-25 07:35:39
    网页链接压缩:https://www.985.so/ 将长连接变成一个短链接,后台可以统计短链接的访问的次数 在线二维码解码器:https://www.sojson.com/deqr.html 可以二维码在线解压的从新制作 小蚂蚁:在线微信...
  • 浅谈RPC与HTTP区别

    2020-09-16 16:01:05
    网络7层协议如图所示. 层级关系与对应的协议。...(长连接,指在一个连接上可以连续发送多个数据包,在连接保持期间,如果没有数据包发送,需要双方发链路检测包。) RPC协议传递数据是加密压缩传输.HTTP协
  • 12.5 数据压缩 440 第五部分 附 录 附录a 可下载文件... 444 ↑折 叠 译者序回到顶部↑  还是在2008年7月的时候,一次在线闲聊中,我和阿里巴巴B2B的童家旺谈及写本数据库方面的技术图书的想法。我曾与他在...
  • 12.5 数据压缩 440 第五部分 附 录 附录a 可下载文件... 444 ↑折 叠 译者序回到顶部↑  还是在2008年7月的时候,一次在线闲聊中,我和阿里巴巴B2B的童家旺谈及写本数据库方面的技术图书的想法。我曾与他在...
  • 12.5 数据压缩 440 第五部分 附 录 443 附录A 可下载文件 444 译者序  还是在2008年7月的时候,一次在线闲聊中,我和阿里巴巴B2B的童家旺谈及写本数据库方面的技术图书的想法。我曾与他在一个DBA团队共事,...
  • 耗时比较的sql查询,可以先进行预编译,提高网站访问速度。 【增加】单图片简洁模式也可以查看缩略图 【增加】随机数字段,在指定范围内随机生成 【增加】多模型数据调用,可以在一个列表中调用多个模型的数据...
  • 耗时比较的sql查询,可以先进行预编译,提高网站访问速度。 【增加】单图片简洁模式也可以查看缩略图 【增加】随机数字段,在指定范围内随机生成 【增加】多模型数据调用,可以在一个列表中调用多个模型的数据...
  • 源于实际项目开发,帮助读者时间掌握更多实用技术、提高编程水平。范例经过精心编排,重点、难点突出,易查易学。附录提供快速索引,查找方便。一部久享盛誉的程序开发宝典。 目录 第1章 搭建ASP.NET开发环境 1.1...
  • 源于实际项目开发,帮助读者时间掌握更多实用技术、提高编程水平。范例经过精心编排,重点、难点突出,易查易学。附录提供快速索引,查找方便。一部久享盛誉的程序开发宝典。 目录 第1章 搭建ASP.NET开发环境 1.1...
  • 源于实际项目开发,帮助读者时间掌握更多实用技术、提高编程水平。范例经过精心编排,重点、难点突出,易查易学。附录提供快速索引,查找方便。一部久享盛誉的程序开发宝典。 目录 第1章 搭建ASP.NET开发环境 1.1...
  • resin-jvm 调优

    2009-03-11 16:05:25
    这种方法适用于生存期的对象,持续复制生存期的对象则导致效率降低。 2.4.增量收集器 增量收集器把堆栈分为多个域,每次仅从一个域收集垃圾。这会造成较小的应用程序中断。 2.5.分代收集器 这种收集器把堆栈...
  • ProComm Plus安装与连接脚本文件;Astound介绍文件 AST:Astound多媒体文件;ClarisWorks“助手”文件 Axx:ARJ压缩文件的分包序号文件,用于将一个大文件压至几个小的压缩包中(xx取01-99的数字) A3L:...
  • 入门学习Linux常用必会60个命令实例详解doc/txt

    千次下载 热门讨论 2011-06-09 00:08:45
    选项必须用的参数在使用选项时也是必须的。 3.主要参数 --backup[=CONTROL]:为每个已存在的目的地文件进行备份。 -b:类似 --backup,但不接受任何参数。 -c:(此选项不作处理)。 -d,--...
  • IDE 1号接口检测到光驱,IDE 2号接口检测到希捷硬盘为80GB,其它为NONE表示检测没有设备连接到接口上。 Warning!! Now system is in safe mode. Please re-setting CPU frequency in CMOS setup. 警告:现在系统处在...
  • Foxpro 开发答疑160问

    2014-10-07 19:55:45
    126. 如何将一个文件名转换为文件名 471 127. 如何获得操作系统的语言设置 472 128. 如何管理开始菜单中文档中的内容 472 129. 如何用Windows Script Host创建桌面快捷方式 473 130. 如何用Windows Script ...
  • 让你时间内由一名菜鸟到高手绝对没问题! 由于权限有限,分3部份下载 PHP程序开发范例宝典 内容提要 《PHP程序开发范例宝典》全面介绍了应用PHP进行网站开发的各种技术和技巧。《PHP程序开发范例宝典》分为20章...
  • 让你时间内由一名菜鸟到高手绝对没问题! 由于权限有限,分3部份下载 PHP程序开发范例宝典 内容提要 《PHP程序开发范例宝典》全面介绍了应用PHP进行网站开发的各种技术和技巧。《PHP程序开发范例宝典》分为20章...
  • GetShortPathName 获取指定文件的路径名 GetSystemDirectory 取得Windows系统目录(即System目录)的完整路径名 GetTempFileName 这个函数包含了一个临时文件的名字,它可由应用程序使用 GetTempPath 获取为...

空空如也

空空如也

1 2 3
收藏数 56
精华内容 22
关键字:

长连接压缩短链接