`
blessdyb
  • 浏览: 232823 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

JavaME与JavaEE servlet 交互

阅读更多

       最近做开发的时候需要做一个javame,且需要与服务器端的javaee工程进行互动,在网上先找了一下,并没有很理想的demo,于是自己调研了一下javame的httpconnection后做了一个demo,包括了终端的代码以及服务器端的servlet。手机和Servlet通信比较简单的方法就是DataInputStream.readUTF和 DataOutputStream.writeUTF的配对使用,比如手机发送数据可以在Connection的输出流中用 DataOutputStream.writeUTF依次写入多个参数,相对应的,Servlet打开请求的输入流 (request.getInputStream)用DataInputStream.readUTF来依次读出。返回的参数也一样,Servlet用 response.getOutputStream打开输出流,并把返回值依次写入,手机端打开Connection的输出流并读出即可。至于多个参数多个返回值都是没有问题的,只是多次使用writeUTF和readUTF罢了。

       首先是终端的开发,先看代码。

//包定义与类的导入
package com.blessdyb;

import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;

import javax.microedition.io.Connector;
import javax.microedition.io.HttpConnection;
import javax.microedition.lcdui.Command;
import javax.microedition.lcdui.CommandListener;
import javax.microedition.lcdui.Display;
import javax.microedition.lcdui.Displayable;
import javax.microedition.lcdui.Form;
import javax.microedition.lcdui.TextField;
import javax.microedition.midlet.MIDlet;
import javax.microedition.midlet.MIDletStateChangeException;

//javame的midlet实现PostDemo类,包括一个输入用户名与密码及提交按钮的Form
//及一个提交后显示服务器端信息的Form
public class PostDemo extends MIDlet implements CommandListener{
       //声明各种控件
	private Display display;
	private Form formLogin=new Form("登陆");
	private Form formInfo=new Form("信息");
	private TextField tfusername=new TextField("用户名",null, 10,TextField.ANY);
	private TextField tfpassword=new TextField("密 码",null,10,TextField.PASSWORD);
	private Command cmdSubmit=new Command("登陆",Command.SCREEN,1);

	public PostDemo() {
	}

	protected void destroyApp(boolean bool) throws MIDletStateChangeException {

	}

	protected void pauseApp() {

	}
       
       //定义启动状态时的动作
	protected void startApp() throws MIDletStateChangeException {
		display=Display.getDisplay(this);
		formLogin.append(tfusername);
		formLogin.append(tfpassword);
		formLogin.addCommand(cmdSubmit);
		formLogin.setCommandListener(this);
		display.setCurrent(formLogin);
	}
       //进行本地数据的获取及与远程服务器的连接,取值
	private void postViaHttpConnection(String url) {
		try {
			HttpConnection hc=(HttpConnection) Connector.open(url);
			hc.setRequestMethod(HttpConnection.POST);
			DataOutputStream dos=hc.openDataOutputStream();
			String username=tfusername.getString();
			String password=tfpassword.getString();
			dos.writeUTF(username);
			dos.writeUTF(password);
			dos.flush();
			dos.close();
			
			DataInputStream dis=hc.openDataInputStream();
			String stringInfo=dis.readUTF();
			formInfo.append(stringInfo);
			display.setCurrent(formInfo);
			dis.close();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

	public void commandAction(Command c, Displayable d) {
		if(c==cmdSubmit){
			new Thread(){
				public void run(){
					postViaHttpConnection("http://localhost:8080/javame/postthings");
				}
			}.start();
		}
	}

}
 

下面是servlet应用的代码:

package com.blessdyb;

import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStream;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class PostServlets extends HttpServlet {

	private static final long serialVersionUID = 1L;

	public void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
               //输入流定义及获取Post数据
		InputStream is=request.getInputStream();
		DataInputStream dis=new DataInputStream(is);
		String username=dis.readUTF();
		String password=dis.readUTF();
		dis.close();
		//输出流定义及用户POST请求响应
		DataOutputStream dos=new DataOutputStream(response.getOutputStream());
		dos.writeUTF("您输入的信息为:\n用户名:"+username+"\n密码:"+password);
		dos.flush();
		dos.close();
	}
}
 
1
0
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics