package test;
成都創(chuàng)新互聯(lián)基于分布式IDC數(shù)據(jù)中心構(gòu)建的平臺(tái)為眾多戶提供內(nèi)江機(jī)房主機(jī)托管 四川大帶寬租用 成都機(jī)柜租用 成都服務(wù)器租用。
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
public class HttpTest {
private String u;
private String encoding;
public static void main(String[] args) throws Exception {
HttpTest client = new HttpTest("", "UTF-8");
client.run();
}
public HttpTest(String u, String encoding) {
this.u = u;
this.encoding = encoding;
}
public void run() throws Exception {
URL url = new URL(u);// 根據(jù)鏈接(字符串格式),生成一個(gè)URL對(duì)象
HttpURLConnection urlConnection = (HttpURLConnection) url
.openConnection();// 打開URL
BufferedReader reader = new BufferedReader(new InputStreamReader(
urlConnection.getInputStream(), encoding));// 得到輸入流,即獲得了網(wǎng)頁的內(nèi)容
String line; // 讀取輸入流的數(shù)據(jù),并顯示
while ((line = reader.readLine()) != null) {
System.out.println(line);
}
}
}
根據(jù)具體問題類型,進(jìn)行步驟拆解/原因原理分析/內(nèi)容拓展等。
具體步驟如下:/導(dǎo)致這種情況的原因主要是……
① 將長網(wǎng)址用md5算法生成32位簽名串,分為4段,,每段8個(gè)字符;
② 對(duì)這4段循環(huán)處理,取每段的8個(gè)字符, 將他看成16進(jìn)制字符串與0x3fffffff(30位1)的位與操作,超過30位的忽略處理;
③ 將每段得到的這30位又分成6段,每5位的數(shù)字作為字母表的索引取得特定字符,依次進(jìn)行獲得6位字符串;
④ 這樣一個(gè)md5字符串可以獲得4個(gè)6位串,取里面的任意一個(gè)就可作為這個(gè)長url的短url地址。
很簡(jiǎn)單的理論,我們并不一定說得到的URL是唯一的,但是我們能夠取出4組URL,這樣幾乎不會(huì)出現(xiàn)太大的重復(fù)。
用百度搜索一下,就用“JAVA源代碼“做為搜索條件。一般能找到很多網(wǎng)站。
要學(xué)JAVA最好還是找本書看一看。JAVA能做的東西很多,你要決定你的主攻方向然后就去找相應(yīng)的資料。
你要學(xué)哪方面:
JAVA應(yīng)用程序開發(fā),
JAVA網(wǎng)絡(luò)開發(fā):JSP,APPLET。
JAVA手持設(shè)備軟件開發(fā),像手機(jī)軟件等。
如果對(duì)程序還不是很懂,最好找本JAVA入門級(jí)的書看看,然后再?zèng)Q定。
因公司推廣需要,需要一套短鏈接生成方案,正好前幾天在MSDN看到有人發(fā)了一個(gè).net版的短鏈接算法,我就把它轉(zhuǎn)換成java版,拿出來共享一下
生成思路:
1.將"原始鏈接(長鏈接)+key(自定義字符串,防止算法泄漏)"MD5加密
2.把加密字符按照 8 位一組 16 進(jìn)制與 0x3FFFFFFF 進(jìn)行位與運(yùn)算,把得到的值與 0x0000003D 進(jìn)行位與運(yùn)算,取得字符數(shù)組 chars 索引,把取得的字符相加,每次循環(huán)按位右移 5 位,把字符串存入對(duì)應(yīng)索引的輸出數(shù)組(4組6位字符串)
3.生成4以下的隨機(jī)數(shù),從輸入數(shù)組中取出隨機(jī)數(shù)對(duì)應(yīng)位置的字符串,作為短鏈,存入數(shù)據(jù)庫或者NoSql
解析方式
編寫一個(gè)web處理程序,把從ur(如:中解析短鏈接,將解析到的短鏈接(zAnuAn)與數(shù)據(jù)庫中存入的原始鏈接進(jìn)行匹配,跳轉(zhuǎn)到匹配到的原始鏈接
package com.bjdata.test;
import java.security.MessageDigest;
import java.util.Random;
public class ShortUrlTest {
public static void main(String[] args) {
String sLongUrl = "/bbs/_t_278433840/"; // 原始鏈接
System.out.println("長鏈接:"+sLongUrl);
String[] aResult = shortUrl(sLongUrl);//將產(chǎn)生4組6位字符串
// 打印出結(jié)果
for (int i = 0; i aResult.length; i++) {
System.out.println("[" + i + "]:" + aResult[i]);
}
Random random=new Random();
int j=random.nextInt(4);//產(chǎn)成4以內(nèi)隨機(jī)數(shù)
System.out.println("短鏈接:"+aResult[j]);//隨機(jī)取一個(gè)作為短鏈
}
public static String[] shortUrl(String url) {
// 可以自定義生成 MD5 加密字符傳前的混合 KEY
String key = "test";
// 要使用生成 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"
};
// 對(duì)傳入網(wǎng)址進(jìn)行 MD5 加密
String hex = md5ByHex(key + url);
String[] resUrl = new String[4];
for (int i = 0; i 4; i++) {
// 把加密字符按照 8 位一組 16 進(jìn)制與 0x3FFFFFFF 進(jìn)行位與運(yùn)算
String sTempSubString = hex.substring(i * 8, i * 8 + 8);
// 這里需要使用 long 型來轉(zhuǎn)換,因?yàn)?Inteper .parseInt() 只能處理 31 位 , 首位為符號(hào)位 , 如果不用long ,則會(huì)越界
long lHexLong = 0x3FFFFFFF Long.parseLong(sTempSubString, 16);
String outChars = "";
for (int j = 0; j 6; j++) {
// 把得到的值與 0x0000003D 進(jìn)行位與運(yùn)算,取得字符數(shù)組 chars 索引
long index = 0x0000003D lHexLong;
// 把取得的字符相加
outChars += chars[(int) index];
// 每次循環(huán)按位右移 5 位
lHexLong = lHexLong 5;
}
// 把字符串存入對(duì)應(yīng)索引的輸出數(shù)組
resUrl[i] = outChars;
}
return resUrl;
}
/**
* MD5加密(32位大寫)
* @param src
* @return
*/
public static String md5ByHex(String src) {
try {
MessageDigest md = MessageDigest.getInstance("MD5");
byte[] b = src.getBytes();
md.reset();
md.update(b);
byte[] hash = md.digest();
String hs = "";
String stmp = "";
for (int i = 0; i hash.length; i++) {
stmp = Integer.toHexString(hash[i] 0xFF);
if (stmp.length() == 1)
hs = hs + "0" + stmp;
else {
hs = hs + stmp;
}
}
return hs.toUpperCase();
} catch (Exception e) {
return "";
}
}
}
運(yùn)行結(jié)果
長鏈接:
[0]:fa6bUr
[1]:ryEfeq
[2]:zAnuAn
[3]:auIJne
短鏈接:zAnuAn
你說的java源代碼是指編譯成的class文件前的java文件。
當(dāng)我們運(yùn)行.java文件時(shí),它會(huì)被系統(tǒng)編譯成.class文件,例如Test.java編譯之后就是Test.class,
源文件就是指Test.java文件,
一般部署項(xiàng)目時(shí),有.class文件就可以發(fā)布運(yùn)行了,但是如果想修改這個(gè)系統(tǒng),.class是不能修改的,要有.java文件才能修改
也可以上網(wǎng)去下反編譯軟件,就是能把.class文件大部分還原成.java文件的工具,但不是100%還原,而且如果不是正版的,小心有毒啊,什么的。
package com.zhidao.www;
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
public class TestShort {
public static void main(String[] args) {
// TODO Auto-generated method stub
String httpUrl = "";
String httpArg = "url_long=http%3A%2F%2Fapistore.baidu.com%2Fastore%2Fshopready%2F1973.html";
String jsonResult = request(httpUrl, httpArg);
System.out.println(jsonResult);
}
/**
* @param urlAll
* :請(qǐng)求接口
* @param httpArg
* :參數(shù)
* @return 返回結(jié)果
*/
public static String request(String httpUrl, String httpArg) {
BufferedReader reader = null;
String result = null;
StringBuffer sbf = new StringBuffer();
httpUrl = httpUrl + "?" + httpArg;
try {
URL url = new URL(httpUrl);
HttpURLConnection connection = (HttpURLConnection) url
.openConnection();
connection.setRequestMethod("GET");
// 填入apikey到HTTP header
connection.setRequestProperty("apikey", "自己的apikey");
connection.connect();
InputStream is = connection.getInputStream();
reader = new BufferedReader(new InputStreamReader(is, "UTF-8"));
String strRead = null;
while ((strRead = reader.readLine()) != null) {
sbf.append(strRead);
sbf.append("\r\n");
}
reader.close();
result = sbf.toString();
} catch (Exception e) {
e.printStackTrace();
}
return result;
}
}
這個(gè)可以用 不過要自己申請(qǐng)下api key 得到的字符串也要自己解析
當(dāng)前文章:java短網(wǎng)址源代碼 javaweb網(wǎng)站源碼
當(dāng)前URL:http://jinyejixie.com/article18/dosspgp.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供微信公眾號(hào)、網(wǎng)站導(dǎo)航、云服務(wù)器、品牌網(wǎng)站建設(shè)、全網(wǎng)營銷推廣、定制網(wǎng)站
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)