我先说一下要求,当有用户给平台发送短信时,我这边不断接受短信,并且将接收到短信入库。
js中代码 这是一个接收短信代码,我的想法是每隔一秒的时间提交一次数据,提交完数据后就清空数据。
  <script language="javascript" type="text/javascript">
        function showTime(){
          createXMLHttpRequest();  
          xmlHttp.open("POST","./test",true); 
          xmlHttp.setRequestHeader("Content-Type","application/x-www-form-urlencoded;");   
         /** oHttp.send("FromNumber="+FromNumber+"&Time="+Time+"&ToNumber="+ToNumber+"&Text="+Text); */
         // var Time = 2012/10/21 18:51:46;
          xmlHttp.send("FromNumber="+1+"&Time="+2+"&ToNumber="+3+"&Text="+4);
          var FromNumber = null;
          var Time = null;
          var ToNumber = null;
          var Text = null;
          setTimeout("showTime()",1000);//每隔一秒会提交一次数据
      }
          var xmlHttp;   
        function createXMLHttpRequest(){   //1建立XmlHttpRequest对象  
            if(window.ActiveXObject){
                try{   
                    xmlHttp = new ActiveXObject("Microsoft.XMLHttp");   
                }catch(e){   
                    alert("Error!!!");   
                }   
            }else{   
                xmlHttp = new XMLHttpRequest();   
            }   
        }  其中这四个参数FromNumber,Time,ToNumber,Text我先写的死值,做测试的。Servlt中代码
public void doPost(HttpServletRequest req,
HttpServletResponse resp) throws ServletException,
IOException {
 req.setCharacterEncoding("utf-8");   
     resp.setContentType("text/html;charset=UTF-8");
 FromNumber=(String)req.getParameter("FromNumber");
 Time=(String)req.getParameter("Time");
 ToNumber=(String)req.getParameter("ToNumber");
 Text=(String)req.getParameter("Text");
         timer.schedule(new TestTask(),1000,1000); //每隔一秒的时间时间执行一次
}
这个里面就不断获取js里面提交过来的数据。定时器里面就不断存储数据定时器中的代码public void run() {
while (true) {
try {
String FromNumber = MyServlet.FromNumber; String Time = "2012-10-21 18:51:46"; String Text = MyServlet.Text;

if(!FromNumber.equals(null)&!Time.equals(null)&!Text.equals(null))
{
 String sql = "insert into EMS_RMS values(1,2,3,4,5,6,7,8,9,'2012-10-21 18:51:46')";
              ps = conn.prepareStatement(sql);       ps.executeUpdate(sql);
 
     FromNumber = null;
 
     Time = null;     Text = null;
      
   ps.close();   conn.close();

}      }catch (Exception e) {
e.printStackTrace();      }
      }
   }
}
定时器中FromNumber、text这几个值是都可以获得到的,插入语句下写了几个死值,做测试的,我整体的想法是前台页面每隔一秒提交数据,然后清空数据,避免重复将数据存储到数据库,后台页面每隔一秒将数据存储进数据库。但最后的结果是java定时器中反复存储那一条数据,可我的js中把数据清空了啊,java定时器中获得的参数应该为空,不会执行存储才对啊,哪里出了问题啊。

解决方案 »

  1.   

    恩。你说的有道理。还问你个问题啊。当用户给指定的号码发送短信时,会自动触发下面js中的XLT_OnSMSReceived事件<script language="javascript" for="ocx" event="XLT_OnSMSReceived(FromNumber,Time,ToNumber,Text)" type="text/javascript">,我想请问在触发该事件,同时把数据提交到servlet中,也就是触发XLT_OnSMSReceived时,同时也执行下面的代码。
         function showTime(){
              createXMLHttpRequest();  
              xmlHttp.open("POST","./test",true); 
              xmlHttp.setRequestHeader("Content-Type","application/x-www-form-urlencoded;");   
             /** oHttp.send("FromNumber="+FromNumber+"&Time="+Time+"&ToNumber="+ToNumber+"&Text="+Text); */
             // var Time = 2012/10/21 18:51:46;
              xmlHttp.send("FromNumber="+1+"&Time="+2+"&ToNumber="+3+"&Text="+4);
              var FromNumber = null;
              var Time = null;
              var ToNumber = null;
              var Text = null;
              setTimeout("showTime()",1000);//每隔一秒会提交一次数据
          }
              var xmlHttp;   
            function createXMLHttpRequest(){   //1建立XmlHttpRequest对象  
                if(window.ActiveXObject){
                    try{   
                        xmlHttp = new ActiveXObject("Microsoft.XMLHttp");   
                    }catch(e){   
                        alert("Error!!!");   
                    }   
                }else{   
                    xmlHttp = new XMLHttpRequest();   
                }   
            }