GUJ Discussões   :   últimos tópicos   |   categorias   |   GUJ Respostas

Conexão com servlet via http


#1

Saudações, Pessoal.

A dúvida está mais para configuração do Palm do que para J2ME, mas achei melhor postar aki. Escrevi um pequeno programa J2ME para testes de conexão http a um servlet.

Tenho um servidor rodando o servlet e uma máquina remota com um emulador Palm fazendo acessos. Fiz os testes e o Palm emulado consegue receber o text/plain gerado pelo servlet perfeitamente. A questão é que transferi o PRC para um Palm Vx (serial) e recebo a seguinte mensagem ao tentar executar o programa:

"NETWORK MONITOR: A connection to the host '192.168.0.200' at port 8081 has failed. Do you want to reset the network and connect again?"

Quando clico no YES, recebo "java.io.IOException", que fica no catch da tentativa de conexão.

Alguém poderia dar uma luz?!! Se precisar de mais detalhes...

Obrigado.


#2

Veja o fonte aí embaixo. Talvez ajude em algo.

>> Linhas que geram a mensagem...
>> } catch (IOException ioe) {
>> mMessageItem.setText(ioe.toString());
>> }

Ainda acho que é alguma questão de configuração do Palm, porque no emulador está rodando certo.

J2EE:

/*
* newServlet.java
*
* Created on 2 de Outubro de 2004, 00:00
*/

package my;

import java.io.*;
import java.net.*;

import javax.servlet.*;
import javax.servlet.http.*;

/**
*
* @author Administrador
* @version
*/
public class newServlet extends HttpServlet {

/** Initializes the servlet.
 */
public void init(ServletConfig config) throws ServletException {
    super.init(config);

}

/** Destroys the servlet.
 */
public void destroy() {

}

/** Processes requests for both HTTP <code>GET</code> and <code>POST</code> methods.
 * @param request servlet request
 * @param response servlet response
 */
protected void processRequest(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {

    String message = new String("Está vendo o n abaixo??");
    message += new String("\nEntão funcionou!!!");        
    double rnd = Math.random() * 10000000;
    message += new String("\n" + (int) rnd);
    response.setContentType("text/plain");
    PrintWriter out = response.getWriter();
    out.print(message);

    out.close();
}

/** Handles the HTTP <code>GET</code> method.
 * @param request servlet request
 * @param response servlet response
 */
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
    processRequest(request, response);
}

/** Handles the HTTP <code>POST</code> method.
 * @param request servlet request
 * @param response servlet response
 */
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
    processRequest(request, response);
}

/** Returns a short description of the servlet.
 */
public String getServletInfo() {
    return "Short description";
}

}

J2ME:

/*
* PDAMIDlet.java
*
* Created on 1 de Outubro de 2004, 23:57
*/

package testPalm;

import java.io.*;

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

/**
*
* @author Administrador
* @version
*/
public class PDAMIDlet extends MIDlet implements CommandListener {
private Display mDisplay;
private Form mMainForm;
private StringItem mMessageItem;
private Command mExitCommand, mConnectCommand;

public PDAMIDlet() {
    mMainForm = new Form("HitMidlet");
    mMessageItem = new StringItem(null, "Teste");
    mExitCommand = new Command("Sair", Command.EXIT, 0);
    mConnectCommand = new Command("Conectar", 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("Aguardando...");
        mDisplay.setCurrent(waitForm);
        Thread t = new Thread() {
            public void run() {
                connect();
            }
        };
        t.start();
    }
}

private void connect() {
    HttpConnection hc = null;
    InputStream in = null;
    String url = "http://192.168.0.200:8081/my/newServlet";

    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();

        String s = new String(raw, 0, length);
        mMessageItem.setText(s);

    } catch (IOException ioe) {
        mMessageItem.setText(ioe.toString());
    } 
    mDisplay.setCurrent(mMainForm);
}

}


#3

O Palm irá acessar o servlet via conexão com a rede local ou usando alguma conexão wireless? Pelo erro parece que ele não esta conseguindo encontrar sua maquina (192.168.0.200)

Caso ele esteja fazendo a conexão via wireless, o servlet deverá ser colocado em um micro que seja acessível via internet, pois com este ip, nenhuma conexão externa a sua rede conseguirá encontrar seu micro.


#4