我正在使用Twilio API从我的Twilio号码发送短信到我的手机。
我有两个文件: 1.带有表单和方法调用的JSP文件 2.一个带有Twilio API的java类,它接收来自第1项的方法调用并执行发送短信部分 (见下面的文件)
为什么我收到例外需要“来自”电话号码?
该程序正常工作,正确传递,多次尝试。我没有收到错误。有用。只是那个让我困惑的例外。我已经购买了twilio号码,所以我没有使用试用号码。
有一个与之关联的堆栈跟踪,但可以稍后发布。
在smsParams.put(“From”,from)中,我尝试直接用这样的单元格号替换(使用有效的No): smsParams.put(“From”,“1231231234”); 然后我得到一个例外,转到下一行(smsParams.put(“To”,from);)并且说需要一个“To”数字。当我用一个数字替换变量时,它会跳到下一行,并为消息体提供一个例外。
由于
//***********************************
//java class MyMessage
//***********************************
package package_sms;
import java.util.HashMap;
import java.util.Map;
import com.twilio.sdk.TwilioRestClient;
import com.twilio.sdk.TwilioRestException;
import com.twilio.sdk.resource.factory.SmsFactory;
import com.twilio.sdk.resource.instance.Account;
public class MyMessage {
/** The Constant ACCOUNT_SID. */
public static final String ACCOUNT_SID = "AC11d68faa7db85a48557aa33ae0b88261";
/** The Constant AUTH_TOKEN. */
public static final String AUTH_TOKEN = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx";
public String to, from, text;
public void provideNumbers(String to, String from, String text)
{
// Create a rest client
TwilioRestClient client = new TwilioRestClient(ACCOUNT_SID, AUTH_TOKEN);
// Get the main account (The one we used to authenticate the client
Account mainAccount = client.getAccount();
// Send an sms
SmsFactory smsFactory = mainAccount.getSmsFactory();
Map<String, String> smsParams = new HashMap<String, String>();
smsParams.put("From", from); // Twillio No
smsParams.put("To", to); // target phone No
smsParams.put("Body", text); // message text
try
{
smsFactory.create(smsParams);
}
catch (TwilioRestException e)
{
e.printStackTrace();
}
}
<% *****************************
// jsp file SendSms
***************************** %>
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ page import="package_sms.MyMessage"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>form</title>
</head>
<body style="background-color:Azure;">
<h3>Welcome to your text messenger</h3>
<form action="SendSms.jsp" name="form1" method="POST" >
From: <input type="text" name="phoneFrom" style="background-color: Beige;border:1px solid Black;"/><br><br>
To: <input type="text" name="phoneTo" style="background-color: Beige;border:1px solid Black;"/><br><br>
Message text: <input type="text" name="messageText" style="background-color: Beige;border:1px solid Black;"/><br><br>
<input type="submit" name="submit" value="Send Message" />
</form><br>
<% /* Declared string variables that provide parameters to the
call to provideNumber method. provideNumbers method is located in MyMessage class.
provideNumbers method is called on a 'message' object. */
String number_from = request.getParameter("phoneFrom");
String number_to = request.getParameter("phoneTo");
String messageBody = request.getParameter("messageText");
MyMessage message = new MyMessage();
message.provideNumbers(number_to, number_from, messageBody);
%>
</body>
</html>
答案 0 :(得分:1)
错误发生在您的JSP页面中。加载JSP时,它会执行所有代码。部分代码是您抓取输入并调用方法。
但是,当文件首次加载时,表单中没有值。因此getParameter调用获取空值。因此,“message.provideNumbers”方法将Java代码传递为null。这意味着当您的Java代码尝试调用Twilio时,它会传递空值并触发异常。
要纠正这个问题,您可以在IF语句中包围JSP Java代码,检查变量是否有条目。例如:
<% if (request.getParameter("phoneFrom") != null
&& request.getParameter("phoneTo") != null
&& request.getParameter("messageText") != null) {
String number_from = request.getParameter("phoneFrom");
String number_to = request.getParameter("phoneTo");
String messageBody = request.getParameter("messageText");
MyMessage message = new MyMessage();
message.provideNumbers(number_to, number_from, messageBody);
}%>
希望有所帮助。
答案 1 :(得分:0)
尽管您在JSP中包含MyMessage,但您没有为from,to和message变量设置值。
从请求中获取它们并初始化这些变量。
我刚刚看到我确实监督了某些事情......在JSP的最后,有来自请求的分配和JSP上的一些逻辑。我建议在包含的类中处理请求,作为bean,所以你确定在“绘制”页面之前完成了这个过程,因此,你将能够显示一些过程结果。
在您的JSP中,一开始
<jsp:useBean id="myBean" scope="request" class="package_sms.MyMessage">
<% myBean.provideNumbers( request ); %>
</jsp:useBean>
......在你的班上,就像这样
public void provideNumbers(HTTPServletRequest request)
{
String number_from = request.getParameter("phoneFrom");
String number_to = request.getParameter("phoneTo");
String messageBody = request.getParameter("messageText");
...
smsParams.put("From", number_from); // Twillio No
smsParams.put("To", number_to); // target phone No
smsParams.put("Body", messageBody); // message text
在课堂上,你可以设置一个Public String resultString
,根据发送过程的结果显示一条消息,并且在JSP中,你可以用<%= myBean.resultString %>
之类的东西打印出来。