最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

java實現短地址服務的方法(附代碼)

 更新時間:2015年07月29日 15:57:55   作者:王爵  
大多數情況下URL太長,字符多,不便于發(fā)布復制和存儲,本文就介紹了通過java實現短地址服務,減少了許多使用太長URL帶來的不便,需要的朋友可以參考下

假設下面是你的視頻網站鏈接列表,如果別人想爬取你的數據十分輕松,看規(guī)則就知道數據庫是序列自增的

http://www.xxxx.com/video/1
http://www.xxxx.com/video/2
http://www.xxxx.com/video/3

那么解決這一問題,我們可以使用短地址,不對外暴露真實鏈接,使用對稱加密是一個很好的方案。

Hashids是一個很好的選擇,它提供了JS/PHP/JAVA/PYTHON等編程語言的實現,這里我使用的就是它。

下面是我基于blade框架搭建的java短地址服務。

CREATE TABLE `t_url` (
 `id` int(10) NOT NULL AUTO_INCREMENT,
 `url` text NOT NULL,
 PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=15 DEFAULT CHARSET=utf8;

路由

@Path
public class IndexRoute {
    // 鹽值
  private static final Hashids HASHIDS = new Hashids("blade-shorturl");
   
  private UrlModel urlModel = new UrlModel();
 
  @Route("/:key")
  public void get(Request req, Response response) {
    String key = req.pathParam(":key").replaceAll("[^A-Za-z0-9]", "");
    long[] numbers = HASHIDS.decode(key);
 
    if (null == numbers || numbers.length < 1) {
      response.text("沒有找到");
      return;
    }
    int id = (int) numbers[0];
    String result = get(id).getUrl();
    if (result == null) {
      response.text("沒有找到");
      return;
    }
    response.redirect(result);
  }
   
  @Route(value = "/", method = HttpMethod.GET)
  public String index() {
    return "index";
  }
   
  @Route(value = "/", method = HttpMethod.POST)
  public String save(Request request, Response response) {
    String resJsp = "index";
     
    String longUrl = request.query("url");
     
    if (!isURL(longUrl)) {
      request.attribute("error", "無效的URL");
      return resJsp;
    }
     
    Integer id = this.save(longUrl);
    if (id == 0) {
      request.attribute("error", "保存失敗");
      return resJsp;
    }
     
    String hash = HASHIDS.encode(id);
    request.attribute("url_hash", hash);
     
    System.out.println("id = " + id + ",url_hash=" + hash);
     
    return resJsp;
  }
 
  private Integer save(String url) {
    return urlModel.insert().param("url", url).executeAndCommit();
  }
   
  private UrlModel get(int id) {
    return urlModel.fetchByPk(id);
  }
   
  private final String REGEX = "\\b(https?|ftp|file)://[-a-zA-Z0-9+&@#/%?=~_|!:,.;]*[-a-zA-Z0-9+&@#/%=~_|]";
   
  private boolean isURL(String url) {
    if(StringKit.isNotBlank(url)){
      Pattern pattern = Pattern.compile(REGEX);
      Matcher matcher = pattern.matcher(url);
      if (matcher.find()) {
        return true;
      }
    }
    return false;
  }
}

實現效果:

代碼位置:https://github.com/bladejava/blade-shorturl

以上就是本文的全部內容,希望對大家的學習有所幫助。

相關文章

  • java實現文件斷點續(xù)傳下載功能

    java實現文件斷點續(xù)傳下載功能

    這篇文章主要為大家詳細介紹了java實現文件斷點續(xù)傳下載功能的具體代碼,感興趣的小伙伴們可以參考一下
    2016-05-05
  • Java操作ElasticSearch的實例詳解

    Java操作ElasticSearch的實例詳解

    Elasticsearch?是一個分布式的搜索和分析引擎,廣泛用于全文搜索、日志分析等場景,本文將介紹如何在?Java?應用中使用?Elasticsearch?客戶端來連接和操作?Elasticsearch?集群,希望對大家有所幫助
    2025-01-01
  • 淺析如何高效格式化輸出JSON字符串

    淺析如何高效格式化輸出JSON字符串

    JSON(JavaScript?Object?Notation)作為一種輕量級的數據交換格式,已經成為了各種編程語言間傳遞數據的標準,下面我們就來聊聊如何高效格式化輸出JSON字符串吧
    2025-01-01
  • Java ==,equals()與hashcode()的使用

    Java ==,equals()與hashcode()的使用

    本文主要介紹了Java ==,equals()與hashcode()的使用,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-05-05
  • Java緩存ehcache的使用步驟

    Java緩存ehcache的使用步驟

    這篇文章主要介紹了Java緩存ehcache的使用步驟,文中有非常詳細的代碼示例,對正在學習java的小伙伴們有很好的幫助,需要的朋友可以參考下
    2021-05-05
  • Java web自定義filter代碼實例

    Java web自定義filter代碼實例

    這篇文章主要介紹了Java web自定義filter代碼實例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-12-12
  • Java中try catch處理異常示例

    Java中try catch處理異常示例

    這篇文章主要給大家介紹了關于Java中try catch 的基本用法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-12-12
  • Spring Boot+Drools規(guī)則引擎整合詳解

    Spring Boot+Drools規(guī)則引擎整合詳解

    本篇文章主要介紹了Spring Boot+Drools規(guī)則引擎整合,小編覺得挺不錯的,現在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-09-09
  • java 完全二叉樹的構建與四種遍歷方法示例

    java 完全二叉樹的構建與四種遍歷方法示例

    本篇文章主要介紹了java 完全二叉樹的構建與四種遍歷方法示例,具有一定的參考價值,感興趣的小伙伴們可以參考一下。
    2017-03-03
  • 詳談Java中instanceof和isInstance的區(qū)別

    詳談Java中instanceof和isInstance的區(qū)別

    下面小編就為大家?guī)硪黄斦凧ava中instanceof和isInstance的區(qū)別。小編覺得挺不錯的,現在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-01-01

最新評論

昭觉县| 客服| 固始县| 清原| 和硕县| 河曲县| 北辰区| 永清县| 奈曼旗| 天柱县| 广水市| 平顶山市| 长沙市| 凤阳县| 乌鲁木齐县| 仁怀市| 绵阳市| 固安县| 隆尧县| 江川县| 遂昌县| 峨眉山市| 杭锦旗| 普陀区| 武宣县| 辽阳县| 弋阳县| 壶关县| 南昌市| 濮阳县| 贡觉县| 葫芦岛市| 民勤县| 茶陵县| 德钦县| 连江县| 岑巩县| 芜湖市| 泗水县| 曲松县| 玉龙|