java實(shí)現(xiàn)短信通信的完整教程
前言
短信信息的發(fā)送目前已經(jīng)是項(xiàng)目中必不可少的部分,我們怎么通過web頁面來實(shí)現(xiàn)把信息推送到別人手機(jī)上呢?簡單點(diǎn),編碼的方式簡單點(diǎn)!看完本篇文章,以后要實(shí)現(xiàn)短信的發(fā)送都只需要知道發(fā)什么?發(fā)給誰?就OK了,代碼如下,是不是很簡單^_^
String result= "";//返回狀態(tài) Note note = new Note(); String Tel = "17089490559";//接收人手機(jī)號 String message = "您好!";//短信內(nèi)容 result = note.sendNote(Tel,message);//信息發(fā)送狀態(tài)
要實(shí)現(xiàn)在頁面或控制臺(tái)輸入一些信息再指定一個(gè)電話號碼就能把信息發(fā)送給對方,這對B/S結(jié)構(gòu)的項(xiàng)目來說可是頭疼的,但我們能不能把要發(fā)送的信息和要發(fā)送的電話號碼交給一個(gè)負(fù)責(zé)發(fā)送短信的服務(wù)器,由它來幫我們完成信息的發(fā)送呢?答案是肯定的,只是錢的問題…….(畢竟天下沒有免費(fèi)的午餐),明白了這一點(diǎn),接下來就好辦了,我們只要知道服務(wù)器在哪,以及怎么聯(lián)系服務(wù)器不就搞定了。所幸的是Apache給我們提供了一個(gè)HttpClient 子類,用于幫助我們連接到發(fā)送短信的服務(wù)器,那發(fā)送短信的服務(wù)器在哪呢?網(wǎng)上有各種各樣的短信服務(wù)平臺(tái),接下來我們以中國網(wǎng)建為例來講解短信信息的發(fā)送。
首先,你需要注冊一個(gè)賬號,注冊完成后系統(tǒng)會(huì)為你提供一個(gè)用戶名和一個(gè)密鑰(在修改短信密鑰里找到)并且提供5條免費(fèi)短信,對于測試來說足夠了,我們需要的就是id和key這兩個(gè)東西,接下來開始吧!
1、導(dǎo)入相關(guān)jar包
相關(guān)jar包:

jar包下載:短信通信
2、制作短信小工具
我們希望的是一勞永逸,做一個(gè)項(xiàng)目就要導(dǎo)包改各種參數(shù)是很費(fèi)勁的,接下來我們用單例模式來為我們的項(xiàng)目提供信息修改吧,有信息變動(dòng)我們只需要改配置文件就可以了,代碼部分完全不用變。這樣我們通過一個(gè)note.properties來放配置文件,一個(gè)ConfigNoteInfo.java調(diào)用配置文件參數(shù)的類,以及一個(gè)Note.java實(shí)現(xiàn)短信的發(fā)送的類就實(shí)現(xiàn)小工具的制作了,接下來依次教大家配置這三個(gè)文件。
第一步,我們在項(xiàng)目里新建一個(gè)叫note.properties的文件,里面的參數(shù)就兩個(gè)(這里是放在src根目錄下里)。
id=xxx(xxx是你注冊的用戶名) key=********(注冊成功后平臺(tái)提供的短信密鑰)
第二步,ConfigNoteInfo.java獲取配置文件中的id和key
public class ConfigNoteInfo {
private static ConfigNoteInfo configNoteInfo;
private static Properties properties;
private ConfigNoteInfo(){
//note.properties是你在根目錄新建的配置文件
String configFile="note.properties";
properties=new Properties();
InputStream in=ConfigNoteInfo.class.getClassLoader().getResourceAsStream(configFile);
try {
properties.load(in);
in.close();
} catch (IOException e) {
e.printStackTrace();
}
}
public static ConfigNoteInfo getInstance(){
if(configNoteInfo==null){
configNoteInfo = new ConfigNoteInfo();
}
return configNoteInfo;
}
public String getString(String key){
return properties.getProperty(key);
}
}
第三步,Note.java類實(shí)現(xiàn)短信信息的發(fā)送,基于OOP思想,我們還是把短信發(fā)送單獨(dú)提出來成為一個(gè)方法,讓以后的工作中只需要傳一個(gè)手機(jī)號和一個(gè)消息字符串就能實(shí)現(xiàn)短信的發(fā)送。(如果是多個(gè)手機(jī)號可傳手機(jī)號的數(shù)組或List集合)
package cn.hs.tools;
import java.io.IOException;
import org.apache.commons.httpclient.*;
import org.apache.commons.httpclient.methods.PostMethod;
/***
* @author HeShuang
*@Create_date:2017-5-4
*/
public class Note {
//短信接口,傳參(手機(jī)號,短信內(nèi)容)即可發(fā)送短信。
public String sendNode(String Tel,String message) throws HttpException, IOException{
HttpClient client = new HttpClient();
PostMethod post = new PostMethod("http://utf8.sms.webchinese.cn");
post.addRequestHeader("Content-Type",
"application/x-www-form-urlencoded;charset=UTF-8");// 在頭文件中設(shè)置轉(zhuǎn)碼,這里為UTF-8
NameValuePair[] data = {
new NameValuePair("Uid", ConfigNoteInfo.getInstance().getString("id")), // 注冊的用戶名,我們通過單例模式從配置文件id中讀取用戶名。
new NameValuePair("Key",ConfigNoteInfo.getInstance().getString("key")), // 注冊成功后,登錄網(wǎng)站后得到的密鑰 ,同樣從配置文件讀取。
new NameValuePair("smsMob", Tel), // 傳遞過來的手機(jī)號碼
new NameValuePair("smsText", message) // 傳遞過來的短信內(nèi)容
};
post.setRequestBody(data);
client.executeMethod(post);
Header[] headers = post.getResponseHeaders();
int flag = post.getStatusCode(); //返回狀態(tài),參照API
System.out.println("statusCode:" + flag);
for (Header h : headers) {
System.out.println("---" + h.toString());
}
String result = new String(post.getResponseBodyAsString().getBytes(
"UTF-8"));
System.out.println(result);
String info="";
if(Integer.parseInt(result.trim())>0){
info="發(fā)送成功!";
}
switch (result.trim()) {
case "-1":
info="用戶賬號不存在!";
break;
case "-2":
info="接口密鑰不正確";
break;
case "-3":
info="尊敬的用戶,請您先把短信費(fèi)用繳了!";
break;
case "-4":
info="手機(jī)號格式不正確!";
break;
case "-6":
info="IP存在限制!";
break;
case "-11":
info="該用戶已被禁用!";
break;
case "-14":
info="短信內(nèi)容存在非法字符!";
break;
default:
break;
}
return info;
}
}
第四步,在其他地方調(diào)用我們的工具類實(shí)現(xiàn)短信的發(fā)送。
String result= "";//返回狀態(tài) Note note = new Note(); String Tel = "17089490559";//要發(fā)送的手機(jī)號 String message = "您好!";//要發(fā)送的短信信息 result = note.sendNote();//獲取信息發(fā)送狀態(tài)
就此,java實(shí)現(xiàn)短信信息的發(fā)送功能就完成了,并且我們還把它做成了一個(gè)小工具類,信息有變更時(shí),只需要改配置文件就行了,一次編寫,處處復(fù)制。
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
通過java.util.TreeMap源碼加強(qiáng)紅黑樹的理解
通過分析java.util.TreeMap源碼來對經(jīng)典問題紅黑樹加強(qiáng)理解和理清思路。2017-11-11
深入理解JSON及其在Java中的應(yīng)用小結(jié)
json它是一種輕量級的數(shù)據(jù)交換格式,由于其易于閱讀和編寫,同時(shí)也易于機(jī)器解析和生成,因此廣泛應(yīng)用于網(wǎng)絡(luò)數(shù)據(jù)交換和配置文件,這篇文章主要介紹了深入理解JSON及其在Java中的應(yīng)用,需要的朋友可以參考下2023-12-12
Java實(shí)現(xiàn)二叉樹的深度優(yōu)先遍歷和廣度優(yōu)先遍歷算法示例
這篇文章主要介紹了Java實(shí)現(xiàn)二叉樹的深度優(yōu)先遍歷和廣度優(yōu)先遍歷算法,結(jié)合實(shí)例形式詳細(xì)分析了二叉樹的定義、深度優(yōu)先遍歷與廣度優(yōu)先遍歷算法原理與相關(guān)操作實(shí)現(xiàn)技巧,需要的朋友可以參考下2018-04-04
Selenium+Tesseract-OCR智能識(shí)別驗(yàn)證碼爬取網(wǎng)頁數(shù)據(jù)的實(shí)例
本文主要介紹了Selenium+Tesseract-OCR智能識(shí)別驗(yàn)證碼爬取網(wǎng)頁數(shù)據(jù),文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-09-09
解決springboot中mongodb不啟動(dòng)及Dao不能被掃描到的問題
這篇文章主要介紹了解決springboot中mongodb不啟動(dòng)及Dao不能被掃描到的問題,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-05-05

