实现功能:
用手机客户端进行登录服务器,然后返回消息进行交互.
服务器代码:
LoginServlet:
package com;
import java.io.ByteArrayOutputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/** *//*******************************************************************************
*
* @author zdw
*
*/
@SuppressWarnings("serial")
public class LoginServlet extends HttpServlet
{
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException
{
this.doPost(request, response);
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException
{
// 得到客户端传入的数据(用户名和密码)
String username = request.getParameter("username");
String password = request.getParameter("password");
// 构建输出流
ByteArrayOutputStream baos = new ByteArrayOutputStream();
DataOutputStream dos = new DataOutputStream(baos);
// 逻辑操作(这里写你的逻辑判断)
if ("zdw".equals(username) && "admin".equals(password))
{
// 响应数据
dos.writeUTF("true");
} else
{
// 响应数据
dos.writeUTF("false");
}
//
byte[] data = baos.toByteArray();
// 设置服务器响应参数
response.setStatus(HttpServletResponse.SC_OK);
response.setContentLength(data.length);
response.setContentType("application/octet-stream");
OutputStream os = response.getOutputStream();
os.write(data);
os.close();
}
}
手机客户端代码:
LoginForm:
package com;
import java.io.DataInputStream;
import java.io.IOException;
import java.io.OutputStream;
import javax.microedition.io.Connector;
import javax.microedition.io.HttpConnection;
import javax.microedition.lcdui.Alert;
import javax.microedition.lcdui.AlertType;
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;
/** *//**
* 用Http方式与服务器交互
*
* @author zdw
*
*/
public class LoginForm extends MIDlet implements CommandListener
{
private Form form = null;
private Display display = Display.getDisplay(this);;
private Command login = null;
private Command exit = null;
private TextField username = null;
private TextField password = null;
private Alert alert = null;
private Alert error = null;
public LoginForm()
{
form = new Form("用户登录");
display.setCurrent(form);
login = new Command("登录", Command.SCREEN, 1);
exit = new Command("退出", Command.EXIT, 1);
form.addCommand(login);
form.addCommand(exit);
username = new TextField("用户名", "", 20, TextField.ANY);
password = new TextField("密码", "", 20, TextField.PASSWORD);
form.append(username);
form.append(password);
form.setCommandListener(this);
}
public void initAlertOK()
{
alert = new Alert("提示", "登录成功!!\r\n您的用户名为:" + username.getString()
+ "\r\n密码为:" + password.getString(), null, AlertType.INFO);
alert.setTimeout(Alert.FOREVER);
display.setCurrent(alert);
}
public void initAlertError()
{
error = new Alert("提示", "登录失败,用户名或密码错误", null, AlertType.ERROR);
display.setCurrent(error);
}
protected void startApp() throws MIDletStateChangeException
{
}
/** *//**
* 事件处理
*/
public void commandAction(Command cmd, Displayable dis)
{
// 点击退出按钮事件
if (cmd.getCommandType() == Command.EXIT)
{
System.out.println("exit");
this.notifyDestroyed();
}
if (cmd == login)
{
// 必须开启独立线程来处理Http请求,否则会造成死锁
new Thread(new Runnable()
{
public void run()
{
try
{
inTurnServer();
} catch (Exception e)
{
e.printStackTrace();
}
}
}).start();
}
}
/** *//***************************************************************************
* 与服务器交互相关代码
*/
public void inTurnServer()
{
try
{
// 服务器请求地址
String url = "http://localhost:8888/LoginWeb/LoginServlet";
// 用户输入的用户名
String username = this.username.getString();
// 用户输入的密码
String password = this.password.getString();
// 用url建立一个Http连接(安全的)
HttpConnection conn = (HttpConnection) Connector.open(url);
// 设置请求类型为POST
conn.setRequestMethod(HttpConnection.POST);
// 设置一般的请求属性
conn.setRequestProperty("Content-Type",
"application/x-www-form-urlencoded");
conn.setRequestProperty("User-Agent",
"Profile/MIDP-1.0 Configuration/CLDC-1.0");
conn.setRequestProperty("Content-Language", "en-US");
conn.setRequestProperty("Accept", "application/octet-stream");
conn.setRequestProperty("Connection", "close");
// 要发送的数据
String formData = "username=" + username + "&password=" + password;
// 转换显字节流
byte[] data = formData.getBytes();
// 设置写入流的长度
conn.setRequestProperty("Content-Length", Integer
.toString(data.length));
OutputStream os = conn.openOutputStream();
os.write(data);
os.close();
// 得到Http响应代码
int rc = conn.getResponseCode();
// 正常响应
if (rc == HttpConnection.HTTP_OK)
{
// 构建输入流
DataInputStream dism = new DataInputStream(conn
.openInputStream());
// 读取服务器返回的字节流
String result = dism.readUTF();
dism.close();
// 判断
if (result.equals("true"))
{
// 显示登录成功
this.initAlertOK();
}
if (result.equals("false"))
{
// 显示登录失败
this.initAlertError();
// 将输入框置空
this.username.delete(0, this.username.getString().length());
this.password.delete(0, this.password.getString().length());
}
}
} catch (IOException e)
{
e.printStackTrace();
}
}
protected void destroyApp(boolean arg0) throws MIDletStateChangeException
{
}
protected void pauseApp()
{
}
}
源码下载:
点此下载
注意此工程为MyEclipse工程,您需要安装wtk和tomcat才能正常运行此程序.
登录图:
分享到:
相关推荐
J2ME与J2EE实现用户登录交互 j2me入门实例
java做的j2me与j2ee进行交互 用手机客户端进行登录服务器,然后返回消息进行交互.
用手机客户端进行登录服务器,然后返回消息进行交互.
实现用户登录 可以自己下载后 阅读源码 欢迎使用
为了克服望远镜的移动、远程、无线控制的现有技术的缺陷,提出一种基于Java的望远镜的移动控制系统,系统采用J2ME-J2EE架构,使移动用户通过移动终端实现对望远镜实时控制。利用J2ME在移动终端上开发系统终端程序,...
因此基于J2ME平台的无线终端的应用程序开发以及与网络服务器端的信息交互开发就十分重要。利用客户端 + Java servlet + SQL Server数据库三层模式实现网上商店系统是通用的方法。所有的业务逻辑都封装在servlet中,...
因此,针对常规计算的平台称为 Java 2 标准版(Java 2 Standard Edition,J2SE),针对企业应用和分布式计算的平台称为 Java 2 企业版(Java 2 Enterprise Edition,J2EE)。第三个平台是针对非常规消费设备的。这类...
1.基础常识 软件:即一系列按照特定顺序组织的计算机数据和指令的集合。分为:系统软件 和 应用软件 系统软件:windows , mac os , linux ,unix,android,ios...1999年,Java分成J2SE、J2EE和J2ME,JSP/Servlet技术诞生
当用户发送第一次请求的时候,验证用户登录,创建一个该qq号和服务器端保持通讯连接得线程,启动该通讯线程,通讯完毕,关闭Scoket。 QQ客户端登录界面,中部有三个JPanel,有一个叫选项卡窗口管理。还可以更新...
当用户发送第一次请求的时候,验证用户登录,创建一个该qq号和服务器端保持通讯连接得线程,启动该通讯线程,通讯完毕,关闭Scoket。 QQ客户端登录界面,中部有三个JPanel,有一个叫选项卡窗口管理。还可以更新...
5.j2me程序的必需的几个部分 6.c/s与b/s的区别 7.构建一个connect pool,然后再调用它, 8.j2ee平台与dotnet平台的区别 9.ejb的life cycle 10.session bean 和 entity bean的区别 11.ejb中的transaction机制 ...
余志龙,来自于手机制造业、电视媒体业、网络、电信产业、软件开发等领域,擅长嵌入式系统软件设计、J2ME游戏开发、Android开发,以及J2EE、JSP、Servlet、JavaBeans、PHP、C#等程序语言,熟悉面向对象技术与Eclipse...
余志龙,来自于手机制造业、电视媒体业、网络、电信产业、软件开发等领域,擅长嵌入式系统软件设计、J2ME游戏开发、Android开发,以及J2EE、JSP、Servlet、JavaBeans、PHP、C#等程序语言,熟悉面向对象技术与Eclipse...
EQUIP,EQUATOR通用平台,用于开发分布式交互式系统(如Ubicomp安装和普及游戏)的框架。 它基于数据空间概念。 * NEW * EQUIP2针对J2EE,J2ME和C ++应用程序。
3 系统实现.................................................................29 3.1 多层分布式系统结构..................................................30 3.2引入控制器.....................................