Servlet e java ME

Bom dia!!
Pessoal estou com um problema para acessar uma servlet por meio de uma Midlet
segue o codigo da Midlet:

[code]package acessaServlet;

import java.io.IOException;
import java.io.InputStream;
import javax.microedition.io.Connector;
import javax.microedition.io.HttpConnection;
import javax.microedition.lcdui.Alert;
import javax.microedition.lcdui.Form;
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.TextBox;
import javax.microedition.lcdui.TextField;
import javax.microedition.midlet.MIDlet;

public class LoginMidlet extends MIDlet implements CommandListener, Runnable {
private Display display;
private Form tlogin;
private TextField nome;
private TextField senha;
private TextBox tlogado;
private Alert alertalogin;
private Alert alertaerro;
private Command cancelar;
private Command login;
private Thread t = null;

String URL_servidor = "http://localhost:8080/servidor/login.do";

public LoginMidlet() {
    tlogin = new Form("Login do Aplicativo");
    tlogado = new TextBox("Usuario Validado","", 20, TextField.ANY);
    cancelar = new Command("Cancelar", Command.EXIT, 0);
    login = new Command("OK", Command.OK, 1);
    alertaerro = new Alert("Login Incorreto", "Tente Novamente", null, AlertType.ERROR);
    nome = new TextField ("Nome:", "", 20, TextField.ANY);
    senha = new TextField ("Senha:", "", 10, TextField.PASSWORD);
}

public void startApp() {
    display = Display.getDisplay(this);
    tlogin.append(nome);
    tlogin.append(senha);
    tlogin.addCommand(cancelar);
    tlogin.addCommand(login);
    tlogin.setCommandListener(this);
    display.setCurrent(tlogin);
    tlogado.addCommand(cancelar);
}

public void pauseApp() {
}

public void destroyApp(boolean unconditional) {
    notifyDestroyed();
}

public void tenteNovamente() {
    alertaerro.setTimeout(Alert.FOREVER);
    nome.setString("");
    senha.setString("");
    display.setCurrent(alertaerro, tlogin);
}

public void chamaServlet() throws IOException {
    String URL_enviada = URL_servidor+"?nome="+nome.getString()+"&senha="+senha.getString();
    HttpConnection conexao = null;
        InputStream IS = null;
        try {
              conexao = (HttpConnection)Connector.open(URL_enviada);
              conexao.setRequestMethod(HttpConnection.GET);
              conexao.setRequestProperty("IF-Modified-Since", "20 Jan 2001 16:19:14 GMT");
              conexao.setRequestProperty("User-Agent","Profile/MIDP-1.0 Configuration/CLDC-1.0");
              conexao.setRequestProperty("Content-Language", "en-CA");
              IS = conexao.openInputStream();
              int tamConteudo = (int)conexao.getLength();
              byte[] dados = new byte[tamConteudo];
              IS.read(dados);
              String resposta = new String (dados, 0, tamConteudo);
              if (resposta.startsWith("validado")) { //usuario cadastrado
                  alertalogin = new Alert ("Login","Usuário validado!",null, AlertType.CONFIRMATION);             
                  alertalogin.setTimeout(Alert.FOREVER);
                  tlogado.setString("Bem vindo(a)!");
                  tlogado.setCommandListener(this);
                  display.setCurrent(alertalogin,tlogado);    
               } else { //usuario não encontrado
                   tenteNovamente();
               }
        } finally {
               if(IS!= null) {
                       IS.close();
                }
               if(conexao != null) {
                   conexao.close();
               }
        }
    }     

private void connectThread(){
       t = new Thread(this);
        t.start();
    }

public void run(){
     try{chamaServlet();}catch (Exception e){}
    }

public void commandAction(Command c, Displayable d) {
          if(c == cancelar) {
            destroyApp(true); // fecha a aplicação
          }else if(c==login) {
              connectThread();
      }
    }

}[/code]

abaixo o codigo da servlet:

[code]package controle;

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

public class LoginServlet extends HttpServlet {

private static final long serialVersionUID = 1L;

public void doGet(HttpServletRequest request, HttpServletResponse response)
		throws IOException, ServletException {

	response.setContentType("text/plain");
	PrintWriter out = response.getWriter();
	
	String nome = request.getParameter("nome");
	String senha = request.getParameter("senha");
	
	String mensagem = "";
	
	System.out.println("dentro doGet");//esta mensagem não esta sendo executada
	
	if (nome.equals("Maria") || senha.equals("123")) {
		mensagem = "validado";
	}
	out.println(mensagem);
}

}[/code]
não consigo recuperar os parametros passados pela midlet para o servlet
se alguem puder me ajudar…agradeço.

Olá amigo. Teu código ta tudo ok, o que está acontecendo é que ao inicializar o servlet será gerada um NullpointerException o metodo doGet recebe um request sem paramentros só isso!!Espero ter ajudado!

Blz valeu pela resposta ta resolvido vou dar uma melhorada no codigo
e postar novamente, mas, gostaria de perguntar qual a função
de algumas das propriedades abaixo:

conexao = (HttpConnection) Connector.open(URL_enviada); conexao.setRequestMethod(HttpConnection.GET); conexao.setRequestProperty("Content-Language", "en-CA");// devo utilizar? qual a função? conexao.setRequestProperty("IF-Modified-Since", "20 Jan 2001 16:19:14 GMT");// devo utilizar? qual a função? conexao.setRequestProperty("User-Agent","Profile/MIDP-2.1 Configuration/CLDC-1.1");// devo utilizar? qual a função? IS = conexao.openInputStream();//utilizei o InputStream para enviar dados para o servlet // não deveria ter utilizado OutputStream para enviar os dados?
usando apenas as duas linhas abaixo funcionou blz:

conexao = (HttpConnection) Connector.open(URL_enviada); conexao.setRequestMethod(HttpConnection.GET);
se alguem puder me ajudar!!

Blz,
o metodo da classe httpConnection setRequestProperty(“User-agent”, “my agent name”); Envia informações de cabeçalho exigido para o post de sue servlet funcionar.
E quando você faz IS = conexao.openInputStream(); você esta abrindo um fluxo para ler a resposta de seu servlet, entendeu?

Só para complementar

 conexao = (HttpConnection)Connector.open(URL_enviada);   
                  conexao.setRequestMethod(HttpConnection.GET);   
  //após a conexão ter sido estabelescida 
  uma canal de resposta do servlet é aberto
  IS = conexao.openInputStream();   
   //tamanho total  da resposta que vem de seu servlet
   int tamConteudo = (int)conexao.getLength();
   //array de bytes que irá conter todos os bytes   da resposta
   byte[] dados = new byte[tamConteudo];   
  // irá pupular seu array de bytes
    IS.read(dados);   

certo entendi…e o procedimento para gravar ta funcionando
agora preciso ler utilizando dao:

[code] public List getLista() {
List lista = new ArrayList();
String sql = “select * from clientes”;

	try {
		PreparedStatement ps = conexao.prepareStatement(sql);
		ResultSet rs = ps.executeQuery();

		while (rs.next()) {
			// cria um objeto
			Cliente cliente = new Cliente();
			cliente.setNome(rs.getString("nome"));
			cliente.setFone(rs.getString("telefone"));

			// adiciona o objeto à lista
			lista.add(cliente);
		}// fim do while
		rs.close();
		ps.close();
		return lista;
	} catch (SQLException e) {
		throw new RuntimeException(e);
	}
}[/code]

este metodo retorna uma lista como faço para mandar essa lista para o java ME?
como posso acessar o dao com esse codigo:

IS = conexao.openInputStream(); //tamanho total da resposta que vem de seu servlet int tamConteudo = (int)conexao.getLength(); //array de bytes que irá conter todos os bytes da resposta byte[] dados = new byte[tamConteudo]; // irá pupular seu array de bytes IS.read(dados);

No servlet estou escrevendo os dados dessa forma:

DataOutputStream os = new DataOutputStream((OutputStream)response.getOutputStream()); os.writeUTF("parametro");
na midlet leio dessa forma:

DataInputStream dis = (DataInputStream) conexao.openDataInputStream(); lista.append(dis.readUTF(), null);
funciona consigo inserir e consultar, mas, gostaria de utilizar um loop
que executasse enquanto houver dados(Strings) a serem lidos. No momento
a leitura e feita com base na quantidade de registros armazenados no banco,
se tenho 5 registros, utilizo cinco comandos: lista.append(dis.readUTF(), null);
entao como proceder?