调用发送短信接口,Main函数测试成功,放在servlet里边却不能成功

调用发送短信接口,Main函数测试成功,放在servlet里面却不能成功

最近在做一个项目,需要调用别的短信平台写好的接口,我在Main函数里面测试时成功的代码如下

public static void main(String[] args) 
{
try{
Message message=new Message();
        message.init("jdbc:microsoft:sqlserver://210.45.212.150:1433;DatabaseName=DB_CustomSMS","sa","infox1eies2sps3was4!");//初始化
        message.login("00561","63861722");//登录
   //message.login("admin","0000");
        message.submitShortMessage();//提交短信
        message.cleanUp ();//关闭
}catch(SMException e){
          System.out.println(e.getErrorType());
          System.out.println(e.getErrorCode());
      System.out.println(e.getErrorDesc());
    }
}

现在的需求是需要用servlet把这个功能实现,别人访问这个servlet 传一个手机号码和短信内容给这个servlet,我就可以通过短信平台发出去,因为短信平台非常耗时,所以我新开了一个线程去执行代码如下

public class Message extends HttpServlet {
private static final long serialVersionUID = 1L;
       
    /**
     * @see HttpServlet#HttpServlet()
     */
    public Message() {
        super();
        // TODO Auto-generated constructor stub
    }

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/plain;charset=UTF-8");
    PrintWriter out = response.getWriter();
out.print("servlet begin .... " + System.currentTimeMillis()+"<br/>");
             out.flush();
//这里需要写多线程操作发送短信;
Thread t = new MyThread(out);
        t.start() ;
 try {
            Thread.sleep(20000);
        } catch (InterruptedException e) {
            e.printStackTrace(); 
        }
}

    public class MyThread extends Thread{

     PrintWriter out = null ;
 String s ="";
 
             public MyThread(PrintWriter out){
                this.out = out ;
             }
 
      @Override
  public void run(){
try{
SendMessage SMessage = new SendMessage();
s=s+"1";//通过测试发现,让servlet县城sleep10s,子线程也只能运行到这里,20s也是同样的结果
SMessage.init("jdbc:microsoft:sqlserver://210.45.212.150:1433;DatabaseName=DB_CustomSMS","sa","infox1eies2sps3was4!");
s=s+"2";
SMessage.login("00561","63861722");
s=s+"3";
   //message.login("admin","0000");
SMessage.submitShortMessage();
s=s+"4";
SMessage.cleanUp();
s=s+"5";

out.print(s);
out.flush();
out.close();
}catch(SMException e){
  out.print(e.getErrorType());
  out.print(e.getErrorCode());
  out.print(e.getErrorDesc());
}//catch块

   
}//run块
}//MyThread块

注明一下,这里的SendMessage 和Main函数里面的Message是同一个类,所以这里还希望哪位大神可以指点一下,感觉不尽!!!
附上一张我在Main函数里面运行的控制台截图,可见他是通过多线程执行的。

------解决思路----------------------
servlet在container(例如tomcat)上运行就可以设成多线程,每次前台发起都是一个新的线程
不知道这样理解对不对还请其他高手解答
------解决思路----------------------
你包导对了没有啊?为什么main函数里的发送短信类是Message,而到你的servlet里面会变成SendMessage类,一般别人发布的webservice,用的时候生成的类都是一样的吧,你怎么弄成不一样的?

相关内容推荐