实现功能:
用手机客户端进行登录服务器,然后返回消息进行交互.
服务器代码:
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入门实例
### J2ME/J2EE 用户登录交互实现 #### 概述 本文将详细介绍如何通过Java 2 Micro Edition (J2ME) 和 Java 2 Enterprise Edition (J2EE) 实现移动客户端与服务器端的用户登录交互功能。在移动互联网时代,这种基于...
综上所述,J2ME和J2EE的结合,使开发者能够构建出跨越移动设备和服务器的完整应用,实现用户登录及其他复杂交互。理解这两个平台的核心机制以及它们之间的交互方式,对于开发跨平台的企业级应用至关重要。同时,...
本教程主要关注的是如何使用J2ME为移动设备实现用户登录功能,并与J2EE后端进行交互。下面我们将详细探讨这个主题。 J2ME是Java平台的一个子集,主要用于嵌入式设备和移动设备,如手机和平板电脑。它提供了一套精简...
总结来说,"smarticket"这个经典例程展示了J2ME和J2EE的协同工作,利用J2ME为用户提供便捷的移动界面,通过J2EE实现强大的后台处理能力。这种结合使用方式使得移动应用可以充分利用企业级服务,实现高效、安全的业务...
通过HTTP、SOAP等通信协议,J2ME应用程序可以与J2EE服务器进行交互,获取或更新数据,实现客户端和服务器端的双向通信。 **系统程序设计问题** 在J2ME和J2EE的系统程序设计中,可能遇到的问题包括: 1. **性能...
它们虽然应用场景不同,但可以巧妙地结合起来,实现跨平台的无缝交互,为用户提供一致的体验和服务。本文将深入探讨J2ME与J2EE结合使用的策略,旨在帮助开发者们更好地理解和利用这两个强大的Java平台。 首先,理解...
开发者可以利用J2ME的轻量级特性来开发具有用户交互功能的移动应用。 J2EE则是一个用于构建可伸缩、多层、分布式企业级应用的平台。它提供了一组服务、API和协议,包括Servlets、JSP(JavaServer Pages)、EJB...
### 基于J2ME_J2EE的移动公交车查询系统设计与实现 #### 引言 《基于J2ME_J2EE的移动公交车查询系统的设计与实现》一文,聚焦于利用Java技术栈(包括J2ME和J2EE)来构建一个高效的移动查询系统,特别是针对公交车...
《基于J2ME和J2EE的手机银行设计与实现》是针对移动金融服务的一种技术解决方案,它结合了Java平台的两个重要分支——J2ME(Java 2 Micro Edition)和J2EE(Java 2 Platform, Enterprise Edition)来构建安全、高效...
7. **安全性**:讲解J2ME和J2EE中的安全机制,如何保护用户数据和应用安全。 8. **性能优化**:讨论如何针对有限资源进行代码优化,提高应用的运行效率。 通过这68节课的学习,开发者不仅可以掌握J2ME和J2EE的基础...
《运用J2ME和J2EE实施跨平台无线应用》 在移动设备和互联网日益普及的今天,跨平台无线应用的开发变得至关重要。Java技术,尤其是J2ME(Java 2 Micro Edition)和J2EE(Java 2 Platform, Enterprise Edition),...
本研究聚焦于使用J2ME(Java Micro Edition)和J2EE(Java 2 Platform, Enterprise Edition)技术来搭建这样一个平台,旨在实现高效、安全的移动交易环境。J2ME主要应用于移动设备端,而J2EE则在服务器端发挥关键...
Java 2 Micro Edition (j2ME) 和 Java 2 Platform, Enterprise Edition (j2EE) 是两个关键的Java技术平台,对于软件开发者来说是至关重要的工具。本文档旨在提供这两个平台的API详解,帮助开发者更好地理解和应用...
J2ME游戏开发的核心是MIDP(Mobile Information Device Profile),它是J2ME的一部分,提供了一套API来支持在小型设备上创建丰富的用户界面和交互式应用程序,包括游戏。MIDP2(MIDP 2.0)在MIDP1的基础上增加了许多...
Java技术体系主要包括三个主要部分:J2SE(Java 2 Platform, Standard Edition)、J2EE(Java 2 Platform, Enterprise Edition)和J2ME(Java 2 Platform, Micro Edition)。J2SE是Java平台的基础,提供了用于开发和...
该系统利用J2ME的强大移动开发能力,构建移动客户端,实现与用户的交互;同时,借助J2EE的后端处理能力,负责服务器与客户端的数据交换及信息管理。具体来说,系统提供了以下几种查询功能: - **路线查询**:用户...
在系统设计中,J2ME客户端作为用户界面,运行在手机上,它负责与用户交互,提供友好的图形用户界面,接收用户的输入,并将这些请求发送到服务器。J2ME客户端的设计通常包括一系列的MIDlet(Mobile Information ...