servlet 与 J2me 项目通信?

Posted

技术标签:

【中文标题】servlet 与 J2me 项目通信?【英文标题】:servlet communicate with J2me Project? 【发布时间】:2010-07-22 11:57:57 【问题描述】:

我正在使用 Eclipse 在 J2ME 中开发一个应用程序。在这个应用程序中,我使用了一个名为 HitServlet 的 servlet 和一个 J2me 类 HitMIDlet。 我想使用 Eclipse 运行这个项目。但我不知道目录结构是什么 以及我如何制作目录结构。 我已经在我的 Eclipse 中配置了 J2ME 插件和 Tomcat。 但我不知道我的 Eclipse 中我的类的目录结构是什么。 得到正确的输出。 我想当我运行 j2me 类(HitMIDlet)时它会命中 servlet(HitServlet)并发出 放。

这是我的 J2me 类代码:

import java.io.*;

import javax.microedition.io.*;
import javax.microedition.lcdui.*;
import javax.microedition.midlet.*;

public class HitMIDlet
    extends MIDlet 
    implements CommandListener 
  private Display mDisplay;
  private Form mMainForm;
  private StringItem mMessageItem;
  private Command mExitCommand, mConnectCommand;

  public HitMIDlet() 
    mMainForm = new Form("HitMIDlet");
    mMessageItem = new StringItem(null, "");
    mExitCommand = new Command("Exit", Command.EXIT, 0);
    mConnectCommand = new Command("Connect",
        Command.SCREEN, 0);
    mMainForm.append(mMessageItem);
    mMainForm.addCommand(mExitCommand);
    mMainForm.addCommand(mConnectCommand);
    mMainForm.setCommandListener(this);
  

  public void startApp() 
    mDisplay = Display.getDisplay(this);
    mDisplay.setCurrent(mMainForm);
  

  public void pauseApp() 

  public void destroyApp(boolean unconditional) 

  public void commandAction(Command c, Displayable s) 
    if (c == mExitCommand)
      notifyDestroyed();
    else if (c == mConnectCommand) 
      Form waitForm = new Form("Waiting...");
      mDisplay.setCurrent(waitForm);
      Thread t =  new Thread() 
        public void run() 
          connect();
        
      ;
      t.start();
    
  

  private void connect() 
    HttpConnection hc = null;
    InputStream in = null;
    String url = getAppProperty("HitMIDlet.URL");

    try 
      hc = (HttpConnection)Connector.open(url);
      in = hc.openInputStream();

      int contentLength = (int)hc.getLength();
      byte[] raw = new byte[contentLength];
      int length = in.read(raw);

      in.close();
      hc.close();

      // Show the response to the user.
      String s = new String(raw, 0, length);
      mMessageItem.setText(s);
    
    catch (IOException ioe) 
      mMessageItem.setText(ioe.toString());
    
    mDisplay.setCurrent(mMainForm);
  

和servlet(HitServlet)

import javax.servlet.http.*;
import javax.servlet.*;
import java.io.*;

public class HitServlet extends HttpServlet 
  private int mCount;

  public void doGet(HttpServletRequest request,
      HttpServletResponse response)
      throws ServletException, IOException 
    String message = "Hits: " + ++mCount;

    response.setContentType("text/plain");
    response.setContentLength(message.length());
    PrintWriter out = response.getWriter();
    out.println(message);
  
  

【问题讨论】:

【参考方案1】:

只需让 Eclipse 生成目录结构即可。创建两个项目。一个用于 J2ME 作为 JavaME> MIDlet 项目(假设您已经正确安装了 Mobile Tools 插件),另一个用于 JavaEE 作为 Web > Dynamic Web Project(假设您'正在使用 Eclipse for Java EE 和/或已单独安装 Web Tools 插件)。在移动客户端运行 J2ME 项目,在 Tomcat 服务器上运行 JavaEE 项目。

另见:

Eclipse Mobile Tools documentation - Creating MIDlet project Eclipse Web Tools documentation - Creating Dynamic Web project

【讨论】:

得到了这个异常 未捕获的异常 java/lang/IllegalArgumentException: Null URL。 这是一个完全不同且独立的问题/问题。发布一个关于此的新问题。在这个问题中,您要问如何在 Eclipse 中创建目录结构。我已经为此发布了一个答案。 @BlausC 抱歉,我想问一下,一开始我是说 j2me 应用程序如何与 servlet 通信,它们的目录结构是什么,或者它在不同的项目中,或者 servlet 和 J2me 类都将在一个项目中。 以后有问题,请尝试ask questions the smart way。尽管您没有在任何地方添加问号,但我知道您在问如何创建项目,因为您在说“我不知道”。我已经回答过:使用 Eclipse 的工具创建两个项目。我在问题正文中的任何地方都没有看到有关您遇到的问题的问题,以及详细的异常/错误。你应该问一个关于这个的新问题。或编辑您的问题以澄清,我将删除此答案。再一次:尝试以聪明的方式提问。

以上是关于servlet 与 J2me 项目通信?的主要内容,如果未能解决你的问题,请参考以下文章

JavaWeb-Servle介绍

servle学习

转载 Servlet3.0中使用注解配置Servle

Cookie中图片的浏览记录与cookie读取servle时路径的设置(文字描述)

异常idea执行Main方法出现 Exception in thread "main" java.lang.NoClassDefFoundError: javax/servle(代

J2me - HTTP 请求中的内存不足