• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            Khan's Notebook GCC/GNU/Linux Delphi/Window Java/Anywhere

            路漫漫,長修遠(yuǎn),我們不能沒有錢
            隨筆 - 173, 文章 - 0, 評論 - 257, 引用 - 0
            數(shù)據(jù)加載中……

            搞定了Jms的ObjectMessage對象傳遞 ,這個項(xiàng)目可以告一段落了

            關(guān)鍵字:JAVA JMS  Active MQ  XML INI Eclipse Resin

            jms服務(wù)器 , active MQ 我這一篇應(yīng)該是第一篇比較詳細(xì)的用代碼+注釋介紹的中文文檔了
            activeMQ是一個開源的C核心的jms服務(wù)器,在國外的應(yīng)用相當(dāng)廣泛.所以這個項(xiàng)目我放棄了jboss4的用數(shù)據(jù)庫作為消息載體的jms服務(wù),改用active MQ

                整個項(xiàng)目的架構(gòu)如下,用戶通過http請求提交消息, webserver 收到提交請求后將消息封裝到一個implements Serializable的class 然后通過active mq的 jms服務(wù)發(fā)送給server端,入庫
                另一個進(jìn)程將處理好的記錄從數(shù)據(jù)庫種取出,通過httpconnection發(fā)送給 用戶提供的數(shù)據(jù)接收的webservice.



            程序中負(fù)責(zé)接收http請求的servlet

            package sms.khan;

            import java.io.BufferedInputStream;
            import java.io.File;
            import java.io.FileInputStream;
            import java.io.FileNotFoundException;
            import java.io.IOException;
            import java.io.InputStream;
            import java.io.PrintWriter;
            import java.net.URLDecoder;

            import javax.servlet.ServletException;
            import javax.servlet.http.HttpServlet;
            import javax.servlet.http.HttpServletRequest;
            import javax.servlet.http.HttpServletResponse;
            import sms.khan.mq.smsMQSender;

            import comm.khan.LoadIni;
            import comm.khan.commTools;

            //import javax.naming.*;
            //import javax.sql.DataSource;

            public class recv extends HttpServlet {

                
            private static final long serialVersionUID = 1L;

                
            public recv() {

                }

                
            private static final String CONTENT_TYPE = "text/html; charset=GBK";

                
            // Initialize global variables
                public void init() throws ServletException {

                }

                
            public void doGet(HttpServletRequest request, HttpServletResponse response)
                         throws
             ServletException, IOException {
                    
            int ackMode=1;
                    String clientID
            ="null";
                    
            boolean durable=false;
                    String subject
            ="";
                    String url
            ="";
                    String pwd
            ="";
                    String user
            =""
                    
            boolean topic=false;
                    
            long timeToLive=0;
                    
            long sleepTime=0
                    
                    response.setContentType(CONTENT_TYPE);
                    PrintWriter out 
            = response.getWriter();
                    InputStream in 
            = null;

                    
            try {
                        in 
            = new BufferedInputStream(new FileInputStream("web/config.xml"));
                    } 
            catch (FileNotFoundException e) {
                        e.printStackTrace();
                    } 
                    
            /*獲取發(fā)送者的信息*/
                    SmsData sd 
            = new SmsData();
                    
            if(commTools.existPara(request, "spid"))
                        sd.setSpid(request.getParameter(
            "spid"));
                    
                    
            if(commTools.existPara(request, "passwd"))
                        sd.setPasswd(request.getParameter(
            "passwd"));
                    
                    
            if(commTools.existPara(request, "seq"))
                        sd.setSeq(request.getParameter(
            "seq"));
                    
                    
            if(commTools.existPara(request, "port"))
                        sd.setPort(request.getParameter(
            "port"));
                    
                    
            if(commTools.existPara(request, "mobile"))
                        sd.setMobile(request.getParameter(
            "mobile"));
                    
                    
            if(commTools.existPara(request, "service"))
                        sd.setService(request.getParameter(
            "service"));
                    
                    
            if(commTools.existPara(request, "style"))
                        sd.setStyle(request.getParameter(
            "style"));
                    
                    
            if(commTools.existPara(request, "content"))
                        sd.setContent(URLDecoder.decode(request.getParameter(
            "content"),"GB2312"));
                    
                    
            if(commTools.existPara(request, "smscid"))
                        sd.setSmscid(request.getParameter(
            "smscid"));
                    
                    
            if(commTools.existPara(request, "moseq"))
                        sd.setMoseq(request.getParameter(
            "moseq"));

                    
            // TODO 可以在此驗(yàn)證spid,ip,password
                    
                    XMLAnalyse.parseXml(in);
                    
                    out.println(
            "<html>");
                    out.println(
            "<head><title>文件讀寫測試</title></head>");
                    out.println(
            "<body bgcolor=\"#ffffff\">");
                    out.println(
            "<p>content:"+sd.getContent()+"</p>");
                    out.println(
            "<p>ip:"+request.getRemoteHost()+" port:"+request.getServerPort()+"</p>");
                    out.println(
            "</body></html>");
                    
                    LoadIni ini 
            =new LoadIni(); //裝載配置文件
                    ini.setFilename("web" + File.separator + "smsmq.ini");
                    
            try{
                      ackMode 
            =Integer.parseInt( ini.readINI("ackMode") );
                      clientID 
            = ini.readINI("clientID");
                      durable 
            = ini.readINI("durable").equals("true"? true : false;
                      subject
            =ini.readINI("subject");
                      url
            = ini.readINI("url");
                      pwd
            =ini.readINI("pwd");
                      user
            =ini.readINI("user");
                      topic
            =ini.readINI("topic").equals("true")? truefalse;
                      timeToLive
            =Integer.parseInt(ini.readINI("timeToLive"));
                      sleepTime
            =Integer.parseInt(ini.readINI("sleepTime"));
                    }
            catch(IOException e){
                      e.printStackTrace();
                    }
            catch(Exception e){
                      e.printStackTrace();
                    }
                   
                    //將數(shù)據(jù)發(fā)送到j(luò)ms
                    smsMQSender smq
            = new smsMQSender(ackMode, clientID, durable,subject, url,
                                                     pwd, user, topic,timeToLive, sleepTime, sd);
                    smq.run();
                    
                    out.flush();
                    out.close();
                }

                
                
            // Process the HTTP Post request
                public void doPost(HttpServletRequest request, HttpServletResponse response)
                        
            throws ServletException, IOException {
                    doGet(request, response);
                }

                
            public void destroy() {

                }
            }





            ToolSupport.java jms傳遞的基類

            package sms.khan.mq;



            import org.activemq.ActiveMQConnection;
            import org.activemq.ActiveMQConnectionFactory;
            import org.activemq.util.IndentPrinter;

            import javax.jms.Connection;
            import javax.jms.Destination;
            import javax.jms.JMSException;
            import javax.jms.Session;

            /**
             * 消息傳輸類的抽象接口
             *
             * 
            @version $Revision: 1.2 $
             
            */
            public class ToolSupport {

                
            /**消息發(fā)送的目的地*/
                
            protected Destination destination;
                
                
            /**消息池d名字*/
                
            protected String subject = "TOOL.DEFAULT";
                
                
            /**點(diǎn)對點(diǎn)傳輸模式或訂閱模式 true 訂閱模式,false 點(diǎn)對點(diǎn)模式*/
                
            protected boolean topic = false;
                
                
            protected String user = ActiveMQConnection.DEFAULT_USER;
                
            protected String pwd  = ActiveMQConnection.DEFAULT_PASSWORD;
                
            protected String url  = ActiveMQConnection.DEFAULT_BROKER_URL;
                
                
            /*消息的transacted模式*/
                
            protected boolean transacted = false;
                
                
            /**傳遞模式, 有兩種模式: PERSISTENT 和NON_PERSISTENT,PERSISTENT
                 *  表示該消息一定要被送到目的地,否則會導(dǎo)致應(yīng)用錯誤。NON_PERSISTENT 
                 *  表示偶然丟失該消息是被允許的,這兩種模式使開發(fā)者可以在消息傳遞的可
                 *  靠性和吞吐量之間找到平衡點(diǎn)
            */
                
            protected boolean durable = false;
                
                
            protected String clientID;
                
                
            /**
                 * AUTO_ACKNOWLEDGE session將自動地確認(rèn)收到一則消息。
                 * CLIENT_ACKNOWLEDGE 客戶端程序?qū)⒋_認(rèn)收到一則消息,調(diào)用這則消息的確認(rèn)方法。
                 * DUPS_OK_ACKNOWLEDGE 這個選項(xiàng)命令session“懶散的”確認(rèn)消息傳遞,可以想到,
                 *   這將導(dǎo)致消息提供者傳遞的一些復(fù)制消息可能會出錯。這種確認(rèn)的方式只應(yīng)當(dāng)用于消
                 *   息消費(fèi)程序可以容忍潛在的副本消息存在的情況。
            */
                
            protected int ackMode = Session.AUTO_ACKNOWLEDGE;
                
            protected String consumerName = "James";

                
            /**建立一個會話
                 * 
            @param Connection 消息池連接
                 * 
            @return Session 會話
                 * 
            @exception Exception*/
                
            protected Session createSession(Connection connection) throws Exception {
                    Session session 
            = connection.createSession(transacted, ackMode);
                    
            if (topic) {
                        destination 
            = session.createTopic(subject); //發(fā)布-訂閱消息模式
                    } else {
                        destination 
            = session.createQueue(subject); //點(diǎn)對點(diǎn)消息隊(duì)列模式
                    }
                    
            return session;
                }

                
            /**與消息池建立連接,并準(zhǔn)備通訊
                 *
            @return Connection 返回連接Connection
                 *
            @exception JMSException 
                 *
            @exception Exception*/
                
            protected Connection createConnection() throws JMSException, Exception {
                    ActiveMQConnectionFactory connectionFactory 
            = new ActiveMQConnectionFactory(user, pwd, url);
                    Connection connection 
            = connectionFactory.createConnection();
                    
            if (durable && clientID!=null) {
                        connection.setClientID(clientID);
                    }
                    
                    connection.start(); 
            //開始消息傳遞
                    return connection;
                }

                
            /**關(guān)閉連接和會話
                 * 
            @param Connection 連接
                 * 
            @param Session 會話
                 * 
            @exception JMSException*/
                
            protected void close(Connection connection, Session session) throws JMSException {
                    
            // lets dump the stats
                    
            //dumpStats(connection);

                    
            if (session != null) {
                        session.close();
                    }
                    
            if (connection != null) {
                        connection.close();
                    }
                }

                
            /**打印當(dāng)前連接的狀態(tài)信息
                 *
            @param Connection 連接*/
                
            protected void dumpStats(Connection connection) {
                    ActiveMQConnection c 
            = (ActiveMQConnection) connection;
                    c.getConnectionStats().dump(
            new IndentPrinter());
                }
            }



            發(fā)送jms的class smsMQSender

            package sms.khan.mq;


            import javax.jms.Connection;
            import javax.jms.DeliveryMode;
            import javax.jms.JMSException;
            import javax.jms.MessageProducer;
            import javax.jms.Session;
            import javax.jms.ObjectMessage;
            //import javax.jms.TextMessage;

            /**發(fā)送一個object到指定消息池
             * 
            */
            public class smsMQSender extends ToolSupport {
                
            private long timeToLive;
                
            protected long sleepTime = 0L;
                
            private Object object;

                
            // "1000 255 null"
                /**構(gòu)造器
                 * 
            @param int ackMode 
                 * 
            @param String ClientID
                 * 
            @param boolean durable
                 * 
            @param String subject
                 * 
            @param String url
                 * 
            @param String pwd
                 * 
            @param String user
                 * 
            @param boolean topic
                 * 
            @param long timeToLive
                 * 
            @param long sleepTime
                 * 
            @param Object object
                 * 
            */
                
            public smsMQSender(int ackMode, String clientID, boolean durable,
                        String subject, String url, String pwd, String user, 
            boolean topic,
                        
            long timeToLive, long sleepTime, Object object) {
                    
            this.ackMode = ackMode;
                    
            this.clientID = clientID; //
                    this.durable = durable; // false
                    this.subject = subject; // TEST.FOO
                    this.url = url; // localhost:61616
                    this.pwd = pwd;
                    
            this.user = user;
                    
            this.topic = topic; // false
                    this.timeToLive = timeToLive;
                    
            this.sleepTime = sleepTime;
                    
            this.object = object;
                }

                
            /** 連接消息池并發(fā)送消息 */
                
            public void run() {
                    
            try {
                        System.out.println(
            "連接到 to URL: " + url);
                        System.out.println(
            "發(fā)送消息到 " + (topic ? "topic" : "queue"+ "" + subject);
                        System.out.println(
            "使用 " + (durable ? "durable" : "non-durable"+ " 傳遞模式");
                        
            if (timeToLive != 0) {
                            System.out.println(
            "消息的生存期為 " + timeToLive + " ms");
                        }
                        Connection connection 
            = createConnection();// 建立一個消息池的連接
                        Session session = createSession(connection); // 建立會話
                        MessageProducer producer = createProducer(session); // 建立消息生產(chǎn)者
                        sendLoop(session, producer);

                        System.out.println(
            "完成.");
                        close(connection, session);
                    } 
            catch (Exception e) {
                        System.out.println(
            "Caught: " + e);
                        e.printStackTrace();
                    }
                }

                
            /**
                 * 建立消息生產(chǎn)者
                 * 
            @param Session 會話
                 * 
            @return MessageProducer 消息生產(chǎn)者
                 * 
            @exception JMSException
                 
            */
                
            protected MessageProducer createProducer(Session session) throws JMSException {
                    MessageProducer producer 
            = session.createProducer(destination);
                    
            if (durable) {
                        producer.setDeliveryMode(DeliveryMode.PERSISTENT);
                    } 
            else {
                        producer.setDeliveryMode(DeliveryMode.NON_PERSISTENT);
                    }
                    
            if (timeToLive != 0)
                        producer.setTimeToLive(timeToLive);
                    
            return producer;
                }
                
                
                  
            /**循環(huán)發(fā)送消息
                   * 
            @param Session
                   * 
            @param MessageProducer
                   * 
            @exception Exception*/
                  
            protected void sendLoop(Session session, MessageProducer producer) throws Exception {
                      ObjectMessage message 
            = session.createObjectMessage();
                      message.setObject((sms.khan.SmsData)object);
                      producer.send(message);
                      
            if(transacted) {
                        session.commit();
                      }
                    

                  }
                
                

                
            /**
                 * 
            @param args
                 
            */
                
            public static void main(String[] args) {
                    
            // TODO Auto-generated method stub

                }

            }




            接收jms的類 smsMQRecv .java
            package sms.khan.mq;



            import java.io.File;
            import java.io.IOException;

            import javax.jms.Connection;
            import javax.jms.ExceptionListener;
            import javax.jms.JMSException;
            import javax.jms.Message;
            import javax.jms.MessageConsumer;
            import javax.jms.MessageListener;
            import javax.jms.Session;
            import javax.jms.ObjectMessage;
            import javax.jms.Topic;

            import comm.khan.LoadIni;

            import sms.khan.SmsData;


            /**
             * 接收類,消費(fèi)者模型
             * 
            @version $Revision: 1.1.1.1 $
             
            */
            public class smsMQRecv extends ToolSupport implements MessageListener, ExceptionListener {

                
            protected int count = 0;
                
            protected int dumpCount = 10;
                
            protected boolean verbose = true;
                
            protected int maximumMessages = 0;
                
            private boolean pauseBeforeShutdown;
                
            private boolean running;
                
            private Session session;
                
            private long sleepTime = 0;

                
                
            /**構(gòu)造器
                 * 
            */
                
            public smsMQRecv(){
                
                }
                
                
                
            public static void main(String[] args) {
                    smsMQRecv tool 
            = new smsMQRecv();
                    
                    LoadIni ini 
            =new LoadIni(); //裝載配置文件
                    ini.setFilename("web" + File.separator + "smsmq.ini");
                    
            try{
                      tool.clientID  
            = ini.readINI("clientID");
                      tool.durable 
            = ini.readINI("durable").equals("true"? true : false;
                      tool.subject 
            = ini.readINI("subject");
                      tool.url 
            = ini.readINI("url");
                      tool.topic 
            = ini.readINI("topic").equals("true")? truefalse;
                      tool.sleepTime 
            = Integer.parseInt(ini.readINI("sleepTime"));
                    }
            catch(IOException e){
                      e.printStackTrace();
                    }
            catch(Exception e){
                      e.printStackTrace();
                    }
                    
            if (args.length > 4) {
                        tool.maximumMessages 
            = Integer.parseInt(args[4]);
                    }

                    
            //if (args.length > 6) {
                    
            //    tool.transacted = "true".equals(args[6]);
                    
            //}


                    tool.run();
                }

                
            public void run() {
                    
            try {
                        running 
            = true;

                        System.out.println(
            "連接到服務(wù)器: " + url);
                        System.out.println(
            "Consuming " + (topic ? "topic" : "queue"+ "" + subject);
                        System.out.println(
            "Using " + (durable ? "durable" : "non-durable"+ " subscription");

                        Connection connection 
            = createConnection();//建立一個消息池連接
                        connection.setExceptionListener(this);
            //設(shè)置ExceptionListener為this ,因?yàn)閠his implements ExceptionListener
                        session = createSession(connection);
                        MessageConsumer consumer 
            = null;//建立一個消息消費(fèi)者
                        
                        
            if (durable && topic) {
                            consumer 
            = session.createDurableSubscriber((Topic) destination, consumerName);
                        } 
            else {
                            consumer 
            = session.createConsumer(destination);
                        }
                        
                        
            if (maximumMessages <= 0) {
                            consumer.setMessageListener(
            this);
                        }

                        
            if (maximumMessages > 0) {
                            consumeMessagesAndClose(connection, session, consumer);
                        }
                    } 
            catch (Exception e) {
                        System.out.println(
            "Caught: " + e); 
                        e.printStackTrace();
                    }
                }

                
            /**MessageListener 的abstract 接口
                 * 
            @param Message 從消息池接收到的消息*/
                
            public void onMessage(Message message) {
                    
            try {
                        
            if (message instanceof ObjectMessage) {
                            ObjectMessage Msg 
            = ((ObjectMessage) message);
                            SmsData sd 
            =  (SmsData)(Msg.getObject());
                            System.out.println(sd.getMobile() 
            + sd.getContent());
                            
            if (verbose) System.out.println("Received: " + sd.getMobile());
                        } 
            else {
                            
            if (verbose) System.out.println("Received: " + message);
                        }
                        
            if (transacted) {
                            session.commit();
                        }

                    } 
            catch (JMSException e) {
                        System.out.println(
            "Caught: " + e);
                        e.printStackTrace();
                    } 
            finally {
                        
            if (sleepTime > 0) {
                            
            try {
                                Thread.sleep(sleepTime);
                            } 
            catch (InterruptedException e) {
                                e.printStackTrace();
                            }
                        }
                    }
                }

                
            /**ExceptionListener的abstract 接口
                 *
            @param JMSException 接收到的JMS異常 */
                
            synchronized public void onException(JMSException ex) {
                    System.out.println(
            "JMS Exception occured.  Shutting down client.");
                    running 
            = false;
                }

                
            /**檢測實(shí)例是否正在運(yùn)行*/
                
            synchronized boolean isRunning() {
                    
            return running;
                }

                
            protected void consumeMessagesAndClose(Connection connection, Session session,
                                      MessageConsumer consumer) 
            throws JMSException, IOException {
                    System.out.println(
            "系統(tǒng)等待,直到接收到 " + maximumMessages + " 條消息再退出");
                    
            while( isRunning()){
                        Message message 
            = consumer.receive();
                        onMessage(message);
                    }
            /*
                    for (int i = 0; i < maximumMessages && isRunning();) {
                        Message message = consumer.receive(10);
                        if (message != null) {
                            i++;
                            onMessage(message);
                        }
                    }
            */
                    System.out.println(
            "Closing connection");
                    consumer.close();
                    session.close();
                    connection.close();
                    
            if (pauseBeforeShutdown) {
                        System.out.println(
            "Press return to shut down");
                        System.in.read();
                    }
                }

            }


            XMLAnalyse.java 分析xml配置文件的類
            package sms.khan;


            import java.io.*;
            import java.io.FileInputStream;

            import javax.xml.parsers.DocumentBuilder;
            import javax.xml.parsers.DocumentBuilderFactory;
            import org.w3c.dom.*;
            import javax.xml.parsers.ParserConfigurationException;
            import org.xml.sax.SAXException;

            public class XMLAnalyse {



              
            public XMLAnalyse() {
              }

              
            public static void main(String args[]) {
                InputStream in 
            = null;
                
            //byte[] buf = new byte[255];
                try {
                  in 
            = new BufferedInputStream(new FileInputStream("web/config.xml"));
                    
            /*while (in.read(buf) != -1) {
                        for (int i = 0; i < 255; i++) {
                            if (buf[i] == 0) break;
                            System.out.print((char) buf[i]);
                            buf[i] = '\0';
                        }
                    }
                    System.out.print('\n');
                    in = new BufferedInputStream(new FileInputStream("web/config.xml"));
            */
                } 
            catch (FileNotFoundException e) {
                    e.printStackTrace();
                } 
            //catch (IOException e) {
                
            //    e.printStackTrace();
                
            //}
                
                XMLAnalyse.parseXml(in);
              }

              
            public static int parseXml(InputStream inputstream) {
                DocumentBuilderFactory df 
            = DocumentBuilderFactory.newInstance();
                DocumentBuilder doc 
            = null;
                
            try {
                  doc 
            = df.newDocumentBuilder();
                } 
            catch (ParserConfigurationException e) {
                  e.printStackTrace();
                }

                Document document 
            = null;
                
            try {
                  document 
            = doc.parse(inputstream);
                } 
            catch (DOMException dom) {
                  dom.printStackTrace();
                } 
            catch (SAXException ioe) {
                  ioe.printStackTrace();
                } 
            catch (IOException e) {
                  e.printStackTrace();
                }
             
                Element root 
            = document.getDocumentElement();

                
            for (int i = 0; i < root.getChildNodes().getLength(); i++) {
                  NodeList nl 
            = root.getChildNodes().item(i).getChildNodes();
                  
            int len= nl.getLength();
                  
            if ( len > 1) {
                    System.out.println(
            "處理sp名單");
                    
            for (int j = 0; j < len; j++) {
                        
                        String name 
            = nl.item(j).getNodeName();
                        
            if (!name.equals("#text")){//回車和空格會產(chǎn)生的nodename "#text"
                          System.out.println("name:"+name +" value:" +nl.item(j).getLastChild().getNodeValue());
                        }
                    }
                  }
                }

                
            return 0;
              }


            }


            smsData.java 數(shù)據(jù)載體類
            package sms.khan;

            import java.io.Serializable;

            //import comm.khan.commTools;

            public class SmsData implements Serializable{

                
            /**
                 * 
                 
            */
                
            private static final long serialVersionUID = 1L;
                
                
            private String spid = "";
                
            private String passwd = "";
                
            private String seq = "";
                
            private String port = "";
                
            private String mobile = "";
                
            private String service = "";
                
            private String style = "";
                
            private String content = "";        
                
            private String smscid = "";
                
            private String moseq = "";
                    
                
            public SmsData(){}
                
                
                
            public SmsData(String content,String mobile,
                        String moseq,String passwd,String port,
                        String seq,String service,String smscid,
                        String spid,String style) {
                    
            this.content = content;
                    
            this.mobile = mobile;
                    
            this.moseq = moseq;
                    
            this.passwd = passwd;
                    
            this.port = port;
                    
            this.seq = seq;
                    
            this.service = service;
                    
            this.smscid = smscid;
                    
            this.spid = spid;
                    
            this.style = style;
                }

                
            public String getContent() {
                    
            return content;
                }

                
            public void setContent(String content) {
                    
            this.content = content;
                }

                
            public String getMobile() {
                    
            return mobile;
                }

                
            public void setMobile(String mobile) {
                    
            this.mobile = mobile;
                }

                
            public String getMoseq() {
                    
            return moseq;
                }

                
            public void setMoseq(String moseq) {
                    
            this.moseq = moseq;
                }

                
            public String getPasswd() {
                    
            return passwd;
                }

                
            public void setPasswd(String passwd) {
                    
            this.passwd = passwd;
                }

                
            public String getPort() {
                    
            return port;
                }

                
            public void setPort(String port) {
                    
            this.port = port;
                }

                
            public String getSeq() {
                    
            return seq;
                }

                
            public void setSeq(String seq) {
                    
            this.seq = seq;
                }

                
            public String getService() {
                    
            return service;
                }

                
            public void setService(String service) {
                    
            this.service = service;
                }

                
            public String getSmscid() {
                    
            return smscid;
                }

                
            public void setSmscid(String smscid) {
                    
            this.smscid = smscid;
                }

                
            public String getSpid() {
                    
            return spid;
                }

                
            public void setSpid(String spid) {
                    
            this.spid = spid;
                }

                
            public String getStyle() {
                    
            return style;
                }

                
            public void setStyle(String style) {
                    
            this.style = style;
                }

            }



            commTools.java 部分公共函數(shù)
            package comm.khan;

            import java.util.HashMap;
            //import java.util.Iterator;
            import javax.servlet.http.*;
            import java.util.Enumeration;

            public class commTools {

                
            public commTools() {
                    
            // TODO Auto-generated constructor stub
                }

                
            /**
                 * 
            @param args
                 
            */
                
            public static void main(String[] args) {
                    
            // TODO Auto-generated method stub

                }


                
            /** 取得所有得參數(shù)列表 
                 * 
            @param req  HttpServletRequest
                 * 
            @return HashMap 返回包含參數(shù)列表的HashMap
                 
            */
                
            public static HashMap getParas(HttpServletRequest req) {
                    HashMap hm 
            = new HashMap();
                    Enumeration ea 
            = req.getParameterNames();
                    
            while (ea.hasMoreElements()) {
                        String s 
            = (String) ea.nextElement();
                        hm.put(s, req.getParameter(s));
                    }
                    
            return hm;
                }

                
            /**  取得http head 
                 * 
            @param req HttpServletRequest
                 * 
            @return HashMap
                 
            */
                
            public static HashMap gethead(HttpServletRequest req) {
                    HashMap hm 
            = new HashMap();
                    Enumeration ea 
            = req.getHeaderNames();
                    
            while (ea.hasMoreElements()) {
                        String s 
            = (String) ea.nextElement();
                        hm.put(s, req.getHeader(s));
                    }
                    
            return hm;
                }

                
            /** 檢測參數(shù)列表中是否存在某個參數(shù) 
                 * 
            @param req HttpServletRequest
                 * 
            @param para String 參數(shù)名
                 * 
            @return boolean 是否存在這個參數(shù)
                 
            */
                
            public static boolean existPara(HttpServletRequest req, String para) {
                    HashMap hm 
            = getParas(req);
                    
            return hm.containsKey(para);
                }

            }


            HttpSend.java 將處理完的數(shù)據(jù)發(fā)送給用戶提供的web接口
            /**
             * 
             
            */
            package sms.khan;


            import java.io.BufferedReader;
            import java.io.InputStreamReader;
            import java.io.OutputStream;
            import java.net.HttpURLConnection;
            import java.net.URL;
            /**
             * 
            @author Administrator
             * 
             
            */
            public class HttpSend {

                
            /**
                 * 構(gòu)造器
                 
            */
                
            public HttpSend() {

                }

                
            private static String log = null;

                
            public String connectURL(String dest_url, String commString) {
                    String rec_string 
            = "";
                    URL url 
            = null;
                    HttpURLConnection urlconn 
            = null;
                    
            try {
                        url 
            = new URL(dest_url);
                        urlconn 
            = (HttpURLConnection) url.openConnection();
                        urlconn.setRequestProperty(
            "content-type""text/plain");
                        urlconn.setRequestProperty( 
            "User-Agent""Khan HttpConnection request" );
                        urlconn.setRequestProperty(
            "Content-Language""en-US" );
                        urlconn.setRequestMethod(
            "POST");
                        urlconn.setDoInput(
            true);
                        urlconn.setDoOutput(
            true);
                        
                        OutputStream out 
            = urlconn.getOutputStream();
                        
                        out.write(commString.getBytes(
            "UTF-8"));
                        out.flush();
                        out.close();
                        BufferedReader rd 
            = new BufferedReader(new InputStreamReader(urlconn.getInputStream()));
                        StringBuffer sb 
            = new StringBuffer();
                        
            int ch;
                        
            while ((ch = rd.read()) > -1)
                            sb.append((
            char) ch);
                        rec_string 
            = sb.toString();
                        rd.close();
                        urlconn.disconnect();
                    } 
            catch (Exception e) {
                        log 
            = String.valueOf(String.valueOf((new StringBuffer("請求錯誤:")).append(e.getMessage()).append(e.toString())));
                        System.out.println(
            "log = " + log);
                    }
                    
            return rec_string;
                }

                
            /**
                 * 
            @param args
                 
            */
                
            public static void main(String[] args) {
                    String url 
            ="";
                    comm.khan.LoadIni li
            =new comm.khan.LoadIni();
                    
            try{
                        url 
            = li.readINI("httpServer");
                    }
            catch(java.io.IOException e){
                        e.printStackTrace();
                    }
            catch(Exception e){
                        e.printStackTrace();
                    }
                    
                    HttpSend hc 
            = new HttpSend();
                    String xml 
            = "";
                    String s 
            = hc.connectURL(url, xml);
                    System.out.println(
            "Recived:".concat(String.valueOf(String.valueOf(s))));
                }

            }


            項(xiàng)目需要的lib Resin_lib ,ActiveMQ_lib
            項(xiàng)目需要的第三方平臺 Resin 2.19  ActiveMQ 3.2.2
            Java sdk 1.5

            項(xiàng)目在eclipse 3.12下完成


            Resin的配置文件
            resin.conf

            <caucho.com>
            <java compiler="internal" args="-g" work-dir="work"/>


            <http-server>
              
            <http port="8083"/>
                
            <web-app id="/SmsRecv">
                  
            <app-dir>D:\Develop\eclipse\Workspace\SmsRecv\web</app-dir>
                  
            <servlet-mapping url-pattern="/servlet/*" servlet-name="invoker"/>
                  
            <servlet-mapping url-pattern='*.xtp' servlet-name='com.caucho.jsp.XtpServlet'/>
                  
            <servlet-mapping url-pattern='*.jsp' servlet-name='com.caucho.jsp.JspServlet'/>
                
            </web-app>
              
            </http-server>
            </caucho.com>


            config.xml 配置文件的格式,用來進(jìn)行ip和權(quán)限驗(yàn)證
            <?xml version="1.0" encoding="UTF-8"?>
            <sp_command version="1.0">
              
            <pack_name>sp_config</pack_name>
              
            <SpConfig>
                  
            <spid>khan</spid>
                  
            <spip>192.18.1.59</spip>
                  
            <sppwd>966123</sppwd>
              
            </SpConfig>
              
            <SpConfig>
                  
            <spid>holly</spid>
                  
            <spip>192.18.1.122</spip>
                  
            <sppwd>123456</sppwd>
              
            </SpConfig>
            </sp_command>


            smsmq.ini初始化文件
            #header
            #Sun Feb 12 22:20:48 CST 2006
            url=tcp\://localhost\:61616
            durable=false
            user=Khan
            clientID=null
            topic=false
            ackMode=1
            pwd=966123
            subject=SMS.MQ
            project=SMSMQ
            sleepTime=0
            timeToLive=0
            HttpServer=http://127.0.0.1:8083/SmsRecv/recv



            web.xml web部分布局文件
            <?xml version="1.0" encoding="UTF-8"?>
            <!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
               "http://java.sun.com/dtd/web-app_2_3.dtd"
            >
            <web-app>
              
            <display-name>SmsRecv</display-name>

              
            <servlet>
               
            <servlet-name>recv</servlet-name>
               
            <servlet-class>sms.khan.recv</servlet-class>
              
            </servlet>

              
            <servlet-mapping>
                
            <servlet-name>recv</servlet-name>
                
            <url-pattern>/recv</url-pattern>
              
            </servlet-mapping>

              
            <resource-ref>
                
            <res-ref-name>jdbc/Sql</res-ref-name>
                
            <res-type>javax.sql.DataSource</res-type>
                
            <init-param driver-name="com.microsoft.jdbc.sqlserver.SQLServerDriver"/>
                
            <init-param url="jdbc:microsoft:sqlserver://Khan:1433;databaseName=WapServer"/>
                
            <init-param user="sa"/>
                
            <init-param password=""/>
                
            <init-param max-connections="20"/>
                
            <init-param max-idle-time="30"/>
              
            </resource-ref>

            </web-app>

            posted on 2006-02-13 17:41 Khan 閱讀(11395) 評論(3)  編輯 收藏 引用 所屬分類: 跨平臺開發(fā)Java

            評論

            # re: 搞定了Jms的ObjectMessage對象傳遞 ,這個項(xiàng)目可以告一段落了  回復(fù)  更多評論   

            偶簽到一下,支持一下24操作鍵盤的辛苦
            2006-02-13 20:22 | 金屬M(fèi)-zone

            # re: 搞定了Jms的ObjectMessage對象傳遞 ,這個項(xiàng)目可以告一段落了  回復(fù)  更多評論   

            我之前也做到類似的項(xiàng)目

            不過我使用的是IBM Websphere MQ,因?yàn)樵贑++和Java之間傳遞消息,所以沒有采取Serlizable的方式,將消息體Base64編碼后,發(fā)送出去。
            2006-02-14 09:52 | 小明

            # re: 搞定了Jms的ObjectMessage對象傳遞 ,這個項(xiàng)目可以告一段落了  回復(fù)  更多評論   

            好象記得websphere mq的核心也是用c寫的, 不同語言的對象傳遞確實(shí)比較麻煩
            2006-02-14 11:19 | Khan's Notebook
            久久久久久无码国产精品中文字幕 | 2021最新久久久视精品爱| 亚洲国产精品久久久久网站| 亚洲综合伊人久久综合| 精品久久久久久久国产潘金莲| 国产三级精品久久| 亚洲国产成人久久精品影视| …久久精品99久久香蕉国产| 久久亚洲AV成人无码电影| 亚洲国产一成人久久精品| 无码人妻久久一区二区三区蜜桃 | 一本久久a久久精品亚洲| 久久久久久久波多野结衣高潮| 97精品伊人久久大香线蕉| 国产精品99久久久精品无码| 久久精品中文字幕大胸| 久久亚洲国产最新网站| 久久久久波多野结衣高潮| 久久精品国产乱子伦| 无码日韩人妻精品久久蜜桃 | 伊人色综合久久天天网| 久久笫一福利免费导航| 精品久久久无码21p发布| 色综合久久久久久久久五月| 久久九九精品99国产精品| 国产99精品久久| segui久久国产精品| 久久综合九色综合久99| 久久影视综合亚洲| 亚洲精品国精品久久99热| 久久久久久久久久久久久久| 久久久久久无码Av成人影院| 7国产欧美日韩综合天堂中文久久久久 | 亚洲精品乱码久久久久久| 久久99精品久久久久久久久久| 久久精品国产91久久麻豆自制| 久久se精品一区二区影院| 色综合久久夜色精品国产| 麻豆一区二区99久久久久| 色综合久久久久| 亚洲美日韩Av中文字幕无码久久久妻妇 |