java实现短信通信的完整教程
作者:卖泡面的小男孩 发布时间:2023-03-23 23:03:40
前言
短信信息的发送目前已经是项目中必不可少的部分,我们怎么通过web页面来实现把信息推送到别人手机上呢?简单点,编码的方式简单点!看完本篇文章,以后要实现短信的发送都只需要知道发什么?发给谁?就OK了,代码如下,是不是很简单^_^
String result= "";//返回状态
Note note = new Note();
String Tel = "17089490559";//接收人手机号
String message = "您好!";//短信内容
result = note.sendNote(Tel,message);//信息发送状态
要实现在页面或控制台输入一些信息再指定一个电话号码就能把信息发送给对方,这对B/S结构的项目来说可是头疼的,但我们能不能把要发送的信息和要发送的电话号码交给一个负责发送短信的服务器,由它来帮我们完成信息的发送呢?答案是肯定的,只是钱的问题…….(毕竟天下没有免费的午餐),明白了这一点,接下来就好办了,我们只要知道服务器在哪,以及怎么联系服务器不就搞定了。所幸的是Apache给我们提供了一个HttpClient 子类,用于帮助我们连接到发送短信的服务器,那发送短信的服务器在哪呢?网上有各种各样的短信服务平台,接下来我们以中国网建为例来讲解短信信息的发送。
首先,你需要注册一个账号,注册完成后系统会为你提供一个用户名和一个密钥(在修改短信密钥里找到)并且提供5条免费短信,对于测试来说足够了,我们需要的就是id和key这两个东西,接下来开始吧!
1、导入相关jar包
相关jar包:
jar包下载:短信通信
2、制作短信小工具
我们希望的是一劳永逸,做一个项目就要导包改各种参数是很费劲的,接下来我们用单例模式来为我们的项目提供信息修改吧,有信息变动我们只需要改配置文件就可以了,代码部分完全不用变。这样我们通过一个note.properties来放配置文件,一个ConfigNoteInfo.java调用配置文件参数的类,以及一个Note.java实现短信的发送的类就实现小工具的制作了,接下来依次教大家配置这三个文件。
第一步,我们在项目里新建一个叫note.properties的文件,里面的参数就两个(这里是放在src根目录下里)。
id=xxx(xxx是你注册的用户名)
key=********(注册成功后平台提供的短信密钥)
第二步,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类实现短信信息的发送,基于OOP思想,我们还是把短信发送单独提出来成为一个方法,让以后的工作中只需要传一个手机号和一个消息字符串就能实现短信的发送。(如果是多个手机号可传手机号的数组或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 {
//短信接口,传参(手机号,短信内容)即可发送短信。
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");// 在头文件中设置转码,这里为UTF-8
NameValuePair[] data = {
new NameValuePair("Uid", ConfigNoteInfo.getInstance().getString("id")), // 注册的用户名,我们通过单例模式从配置文件id中读取用户名。
new NameValuePair("Key",ConfigNoteInfo.getInstance().getString("key")), // 注册成功后,登录网站后得到的密钥 ,同样从配置文件读取。
new NameValuePair("smsMob", Tel), // 传递过来的手机号码
new NameValuePair("smsText", message) // 传递过来的短信内容
};
post.setRequestBody(data);
client.executeMethod(post);
Header[] headers = post.getResponseHeaders();
int flag = post.getStatusCode(); //返回状态,参照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="发送成功!";
}
switch (result.trim()) {
case "-1":
info="用户账号不存在!";
break;
case "-2":
info="接口密钥不正确";
break;
case "-3":
info="尊敬的用户, * * ,请您先把短信费用缴了!";
break;
case "-4":
info="手机号格式不正确!";
break;
case "-6":
info="IP存在限制!";
break;
case "-11":
info="该用户已被禁用!";
break;
case "-14":
info="短信内容存在非法字符!";
break;
default:
break;
}
return info;
}
}
第四步,在其他地方调用我们的工具类实现短信的发送。
String result= "";//返回状态
Note note = new Note();
String Tel = "17089490559";//要发送的手机号
String message = "您好!";//要发送的短信信息
result = note.sendNote();//获取信息发送状态
就此,java实现短信信息的发送功能就完成了,并且我们还把它做成了一个小工具类,信息有变更时,只需要改配置文件就行了,一次编写,处处复制。
猜你喜欢
- 解决Spring in action @valid验证不生效按照书上的示例代码来实现但是,添加了验证但是没有生效。Spring提供了校验Ap
- 1.介绍在SpringBoot的Web项目中,默认采用的是内置Tomcat,当然也可以配置支持内置的jetty,内置有什么好处呢? 1. 方
- 使用mybatis-plus自动生成了5个模块(xml/bean/mapper/service/controller)的代码,这里练习一下m
- 一、NIO基本简介NIO (New lO)也有人称之为java non-blocking lO是从Java 1.4版本开始引入的一个新的IO
- 本文实例讲述了C#编程获取资源文件中图片的方法。分享给大家供大家参考。具体实现方法如下:using System;using System.
- SpringMVC接收到请求和数据后,进行一些了的处理,当然这个处理可以是转发给Service,Service层再调用Dao层完成的,不管怎
- 一个基于Java Socket协议之上文件传输的完整示例,基于TCP通信完成。除了基于TCP的二进制文件传输,还演示了JAVA Swing的
- 实例如下所示:System.Net.WebClient myWebClient = new System.Net.WebClient();
- 1.前提:已安装JDK14,可以到jdk官网下载,或加QQ群835259695,快速免费下载2.不说没用的直接上jdk14环境下的jpack
- 题意Description相信大家都做过"A+B Problem"了吧,这道题是它的加强版。输入两个整数 A , B ,
- 目录1、Java内存模型2、硬件内存架构3、实际执行3.1 共享对象可见性3.2 竞争条件Java是一门支持多线程执行的语言,要编写正确的并
- ArrayList简介:ArrayList实现了List接口它是一个可调整大小的数组可以用来存放各种形式的数据。并提供了包括CRUD在内的多
- RibbonRibbon 是 Netflix开源的基于HTTP和TCP等协议负载均衡组件Ribbon 可以用来做客户端负载均衡,调用注册中心
- 目录1 起因2 解决方案2.1 在pom中引入2.2 Spring Boot 打包处理2.3 拓展: Spring Boot 打包加入其它资
- 一个android文件的Uri地址一般如下: content://media/external/images/media/62026这是一张
- 本文为大家介绍了java.util.ArrayDeque类使用方法,供大家参考,具体内容如下1. ArrayDeque有两个类属性,head
- JFormDesigner概述jformdesigner是一款功能强大的Swing设计工具,这是全面的程序,可帮助您创建Swing GUI,
- 前言Condition是在Spring4.0增加的条件判断功能,通过这个功能可以实现选择性的创建Bean对象。引入一个例子SpringBoo
- WebService是一种跨编程语言和跨操作系统平台的远程调用技术所谓远程调用,就是一台计算机a上的一个程序可以调用到另外一台计算机b上的一
- 本文实例讲述了JAVA快速排序实现方法。分享给大家供大家参考,具体如下:package com.ethan.sort.java;import