概述
最近做开发的时候需要做一个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();
}
}
最后
以上就是义气鲜花为你收集整理的JavaME与JavaEE servlet 交互的全部内容,希望文章能够帮你解决JavaME与JavaEE servlet 交互所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复