j2me与j2ee通信示例(2)

最近在开发j2me与jsp通信传多参数时有点心得,也因网上这类资料比较少所以写下来与大家分享,写得不好之处请大家多指教!
首先当然是要用以下三个类了:
HttpConnection conn = null;//用于连接到web服务
InputStream input = null;//用于接收返回信息
DataOutputStream output = null;//用于发送数据(当然也可以用OutputStream,只是DataOutputStream有更多实用的方法)
然后就是用conn = (HttpConnection)Connector.open(url)方法来建立连接
url是String类型的如
String url="http: //202.103.191.61:80/test.jsp";
string url2="http: //www.express.com/test.jsp";
如果是用ip地址作为参数一定要加上端口号,用网址可不用默认就是80嘛!
接着设置web服务接收的一些参数
            conn.setRequestMethod(HttpConnection.POST);//也可以用get
            conn.setRequestProperty("IF-Modified-Since", "29 May 2004 15:17:19 GMT");
            conn.setRequestProperty("User-Agent","Profile/MIDP-1.0 Configuration/CLDC-1.0");
            conn.setRequestProperty("Content-Language", "en-CA");
            conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
打开输出流,传数据
            output = c.openDataOutputStream();
            output.writeUTF("&test1="+test1);
            output.writeUTF("&test2="+test2);
            output.writeUTF("&test3="+test3);
            output.writeUTF("&test4="+test4);
            output.flush();
到这里实际上就是我们在浏览器中输入http//202.103.191.61:80/test.jsp&test1=test1& test2=test2&test3=test3&test4=test4
注意到没有test.jsp后面全是 &参数名=值第一个不是以?开头(但如果参数是只有一个或两个时可以不第一个不用&都行,不知道为什么)!
然后就是取得返回信息了,
            input = c.openDataInputStream();
            int ch;
     StringBuffer b=new StringBuffer;
            while ((ch = is.read()) != -1) {
            b.append((char) ch);
     System.out.println(b);
            }
最后别忘闭流!
jsp程序里就是用request.getParameter();来取数据,然后进行处理啦,就不多说了!
附j2me源码
import javax.microedition.lcdui.*;
import javax.microedition.midlet.*;
import javax.microedition.io.*;
import java.io.*;

public class SendTestMidlet extends MIDlet implements CommandListener {
    Display display = null;
    TextField ttest1,ttest2,ttest3,ttest4;
    Form form;
    String url = "http://202.103.191.61:80/test.jsp ";
    static final Command send = new Command("注册", Command.OK, 2);
    static final Command exit = new Command("退出", Command.EXIT, 2);
    String myname,pas1,pas2,test4;
    public SendTestMidlet(){
     display = Display.getDisplay(this);
     ttest1 = new TextField("Name:", " ", 25, TextField.ANY);
     ttest2 =new TextField("password:"," ",25,TextField.ANY);
     ttest3 =new TextField("password2:"," ",25,TextField.ANY);
     ttest4 =new TextField("note:"," ",25,TextField.ANY);
     form = new Form("注册信息");
    }
    public void startApp() throws MIDletStateChangeException {
     form.append(ttest1);
     form.append(ttest2);
     form.append(ttest3);
     form.append(ttest4);
     form.addCommand(send);
     form.addCommand(exit);
     form.setCommandListener(this);
     display.setCurrent(form);
    }
    public void pauseApp() {
    }
    public void destroyApp(boolean unconditional) {
     notifyDestroyed();
    }
    public void sendData(String url) throws IOException {
        HttpConnection conn = null;
        InputStream input = null;
        DataOutputStream output = null;
        StringBuffer b = new StringBuffer();
        TextBox t = null;
        try {
            conn = (HttpConnection)Connector.open(url);
            conn.setRequestMethod(HttpConnection.POST);
            conn.setRequestProperty("IF-Modified-Since", "29 Dec 2001 15:17:19 GMT");
            conn.setRequestProperty("User-Agent","Profile/MIDP-1.0 Configuration/CLDC-1.0");
            conn.setRequestProperty("Content-Language", "en-CA");
            conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
            output = conn.openDataOutputStream();
            output.writeUTF("&name="+myname);
            output.writeUTF("&pas1="+pas1);
            output.writeUTF("&pas2="+pas2);
            output.writeUTF("&test4="+test4);//.getBytes());
            output.flush();
            input = conn.openDataInputStream();
            int ch;
            while ((ch = input.read()) != -1) {
             b.append((char) ch);
             System.out.print((char)ch);
            }
            t = new TextBox("Date", b.toString(), 1024, 0);
            t.setCommandListener(this);
            }
            finally {
             if(input!= null) {
              input.close();
              }
              if(output != null) {
               output.close();
               }
               if(conn != null) {
                conn.close();
                }
                }
        display.setCurrent(t);
     }

    public void commandAction(Command conn, Displayable d) {
     String label = conn.getLabel();
     if(label.equals("exit")) {
         destroyApp(true);
     } else if (label.equals("date?")) {
      myname = ttest1.getString();
      pas1 =ttest2.getString();
      pas2 =ttest3.getString();
      test4 =ttest4.getString();
      try {
       sendData(url);
      }catch(IOException e) {}
     }
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
自动控制节水灌溉技术的高低代表着农业现代化的发展状况,灌溉系统自动化水平较低是制约我国高效农业发展的主要原因。本文就此问题研究了单片机控制的滴灌节水灌溉系统,该系统可对不同土壤的湿度进行监控,并按照作物对土壤湿度的要求进行适时、适量灌水,其核心是单片机和PC机构成的控制部分,主要对土壤湿度与灌水量之间的关系、灌溉控制技术及设备系统的硬件、软件编程各个部分进行了深入的研究。 单片机控制部分采用上下位机的形式。下位机硬件部分选用AT89C51单片机为核心,主要由土壤湿度传感器,信号处理电路,显示电路,输出控制电路,故障报警电路等组成,软件选用汇编语言编程。上位机选用586型以上PC机,通过MAX232芯片实现同下位机的电平转换功能,上下位机之间通过串行通信方式进行数据的双向传输,软件选用VB高级编程语言以建立友好的人机界面。系统主要具有以下功能:可在PC机提供的人机对话界面上设置作物要求的土壤湿度相关参数;单片机可将土壤湿度传感器检测到的土壤湿度模拟量转换成数字量,显示于LED显示器上,同时单片机可采用串行通信方式将此湿度值传输到PC机上;PC机通过其内设程序计算出所需的灌水量和灌水时间,且显示于界面上,并将有关的灌水信息反馈给单片机,若需灌水,则单片机系统启动鸣音报警,发出灌水信号,并经放大驱动设备,开启电磁阀进行倒计时定时灌水,若不需灌水,即PC机上显示的灌水量和灌水时间均为0,系统不进行灌水。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值