Duvida POST

25/03/2008

1

Galera é o seguinte estou montando um midlet que acessa um servlet, ele funciona corretamente, o problema surge no momento em que mudo a forma de transmissão de GET para POST, segue abaixo os codigos.

MIDLET

Método utilizado GET ´FUNCIONA CORRETAMENTE´

private void verifica_Login() throws IOException {   
        String url = "http://localhost:8084/RKAM_ServLet/ServLet?";   
        url =  url + "login=" + loginScreen.getUsername() + "&senha=" + loginScreen.getPassword() + "&metodo=LOGIN";   
        //String url = "http://localhost:8084/RKAM_ServLet/ServLet";   
        HttpConnection http = null;   
        //OutputStream out = http.openOutputStream();//enviar dados   
        InputStream in = null;   
        try {   
            http = (HttpConnection) Connector.open(url);   
            http.setRequestMethod(HttpConnection.GET);   
            /*http.setRequestMethod(HttpConnection.POST);  
            http.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");  
            //http.setRequestProperty("Conexão", "close");  
            String teste;  
            byte dados[] = ("login=" + loginScreen.getUsername()).getBytes();  
            teste=new String(dados);  
            out.write(dados);  
            dados = ("&senha=" + loginScreen.getPassword()).getBytes();  
            teste=teste+new String(dados);  
            out.write(dados);  
            dados = ("&metodo=LOGIN").getBytes();  
            teste=teste+new String(dados);  
            out.write(dados);  
            out.flush();*/   
            //--------------TRATAR RESPOSTA DO SERVLET----------------------   
            in =http.openInputStream();//pegar resposta   
            if (http.getResponseCode() == HttpConnection.HTTP_OK) {   
                int length = (int) http.getLength();   
                String str;   
                if (length != -1) {//tamanho da resposta conhecido   
                    byte data[] = new byte[length];   
                    in.read(data);   
                    str =   
                    new String(data);   
                } else {//tamanho não conhecido, deve ser pegar bit por bit até chegar ao final   
                    ByteArrayOutputStream aux = new ByteArrayOutputStream();   
                    int ch;   
                    while ((ch = in.read()) != -1) {   
                        aux.write(ch);   
                    }   
                    str = new String(aux.toByteArray());   
                    aux.close();   
                }   
                if (str.equals("TRUE")) {   
                    set_boo(true);   
                } else {   
                    set_boo(false);   
                }   
            } else {   
                System.out.println(http.getResponseMessage());   
            }   
            in.close();   
            http.close();   
        } catch (IOException e) {   
        }   
    }  
private void verifica_Login() throws IOException {
        String url = "http://localhost:8084/RKAM_ServLet/ServLet?";
        url =  url + "login=" + loginScreen.getUsername() + "&senha=" + loginScreen.getPassword() + "&metodo=LOGIN";
        //String url = "http://localhost:8084/RKAM_ServLet/ServLet";
        HttpConnection http = null;
        //OutputStream out = http.openOutputStream();//enviar dados
        InputStream in = null;
        try {
            http = (HttpConnection) Connector.open(url);
            http.setRequestMethod(HttpConnection.GET);
            /*http.setRequestMethod(HttpConnection.POST);
            http.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
            //http.setRequestProperty("Conexão", "close");
            String teste;
            byte dados[] = ("login=" + loginScreen.getUsername()).getBytes();
            teste=new String(dados);
            out.write(dados);
            dados = ("&senha=" + loginScreen.getPassword()).getBytes();
            teste=teste+new String(dados);
            out.write(dados);
            dados = ("&metodo=LOGIN").getBytes();
            teste=teste+new String(dados);
            out.write(dados);
            out.flush();*/
            //--------------TRATAR RESPOSTA DO SERVLET----------------------
            in =http.openInputStream();//pegar resposta
            if (http.getResponseCode() == HttpConnection.HTTP_OK) {
                int length = (int) http.getLength();
                String str;
                if (length != -1) {//tamanho da resposta conhecido
                    byte data[] = new byte[length];
                    in.read(data);
                    str =
                    new String(data);
                } else {//tamanho não conhecido, deve ser pegar bit por bit até chegar ao final
                    ByteArrayOutputStream aux = new ByteArrayOutputStream();
                    int ch;
                    while ((ch = in.read()) != -1) {
                        aux.write(ch);
                    }
                    str = new String(aux.toByteArray());
                    aux.close();
                }
                if (str.equals("TRUE")) {
                    set_boo(true);
                } else {
                    set_boo(false);
                }
            } else {
                System.out.println(http.getResponseMessage());
            }
            in.close();
            http.close();
        } catch (IOException e) {
        }
    } 

Método utilizado POST ´C/ PROBLEMAS´

private void verifica_Login() throws IOException {   
        //String url = "http://localhost:8084/RKAM_ServLet/ServLet?";   
        //url =  url + "login=" + loginScreen.getUsername() + "&senha=" + loginScreen.getPassword() + "&metodo=LOGIN";   
        String url = "http://localhost:8084/RKAM_ServLet/ServLet";   
        HttpConnection http = null;   
        InputStream in = null;   
        try {   
            http = (HttpConnection) Connector.open(url);   
           // http.setRequestMethod(HttpConnection.GET);   
            http.setRequestMethod(HttpConnection.POST);   
            http.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");   
            //http.setRequestProperty("Conexão", "close");   
            OutputStream out = http.openOutputStream();//enviar dados   
            String teste;   
            byte dados[] = ("login=" + loginScreen.getUsername()).getBytes();   
            teste=new String(dados);   
            out.write(dados);   
            dados = ("&senha=" + loginScreen.getPassword()).getBytes();   
            teste=teste+new String(dados);   
            out.write(dados);   
            dados = ("&metodo=LOGIN").getBytes();   
            teste=teste+new String(dados);   
            out.write(dados);   
            out.flush();   
            //--------------TRATAR RESPOSTA DO SERVLET----------------------   
            in =http.openInputStream();//pegar resposta   
            if (http.getResponseCode() == HttpConnection.HTTP_OK) {   
                int length = (int) http.getLength();   
                String str;   
                if (length != -1) {//tamanho da resposta conhecido   
                    byte data[] = new byte[length];   
                    in.read(data);   
                    str =   
                    new String(data);   
                } else {//tamanho não conhecido, deve ser pegar bit por bit até chegar ao final   
                    ByteArrayOutputStream aux = new ByteArrayOutputStream();   
                    int ch;   
                    while ((ch = in.read()) != -1) {   
                        aux.write(ch);   
                    }   
                    str = new String(aux.toByteArray());   
                    aux.close();   
                }   
                if (str.equals("TRUE")) {   
                    set_boo(true);   
                } else {   
                    set_boo(false);   
                }   
            } else {   
                System.out.println(http.getResponseMessage());   
            }   
            in.close();   
            http.close();   
        } catch (IOException e) {   
        }   
    }  
private void verifica_Login() throws IOException {
        //String url = "http://localhost:8084/RKAM_ServLet/ServLet?";
        //url =  url + "login=" + loginScreen.getUsername() + "&senha=" + loginScreen.getPassword() + "&metodo=LOGIN";
        String url = "http://localhost:8084/RKAM_ServLet/ServLet";
        HttpConnection http = null;
        InputStream in = null;
        try {
            http = (HttpConnection) Connector.open(url);
           // http.setRequestMethod(HttpConnection.GET);
            http.setRequestMethod(HttpConnection.POST);
            http.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
            //http.setRequestProperty("Conexão", "close");
            OutputStream out = http.openOutputStream();//enviar dados
            String teste;
            byte dados[] = ("login=" + loginScreen.getUsername()).getBytes();
            teste=new String(dados);
            out.write(dados);
            dados = ("&senha=" + loginScreen.getPassword()).getBytes();
            teste=teste+new String(dados);
            out.write(dados);
            dados = ("&metodo=LOGIN").getBytes();
            teste=teste+new String(dados);
            out.write(dados);
            out.flush();
            //--------------TRATAR RESPOSTA DO SERVLET----------------------
            in =http.openInputStream();//pegar resposta
            if (http.getResponseCode() == HttpConnection.HTTP_OK) {
                int length = (int) http.getLength();
                String str;
                if (length != -1) {//tamanho da resposta conhecido
                    byte data[] = new byte[length];
                    in.read(data);
                    str =
                    new String(data);
                } else {//tamanho não conhecido, deve ser pegar bit por bit até chegar ao final
                    ByteArrayOutputStream aux = new ByteArrayOutputStream();
                    int ch;
                    while ((ch = in.read()) != -1) {
                        aux.write(ch);
                    }
                    str = new String(aux.toByteArray());
                    aux.close();
                }
                if (str.equals("TRUE")) {
                    set_boo(true);
                } else {
                    set_boo(false);
                }
            } else {
                System.out.println(http.getResponseMessage());
            }
            in.close();
            http.close();
        } catch (IOException e) {
        }
    } 

SERVLET

public class ServLet extends HttpServlet {   
  
    private Connection c;   
    String metodo;   
  
       
    public void init() {   
      conectar();   
    }   
  
    public void destroy() {   
      desconectar();   
    }   
  
    protected void doGet(HttpServletRequest request, HttpServletResponse response)   
            throws ServletException, IOException {   
        this.doPost(request, response);   
    }   
  
    protected void doPost(HttpServletRequest request, HttpServletResponse response)   
            throws ServletException, IOException {   
        metodo = request.getParameter("metodo").toUpperCase();   
        if (metodo.equals("LOGIN"))//login   
        {   
            login(request, response);   
        }   
  
        if (metodo.equals("CONSULTA")) {   
            consulta(request, response);   
        }   
  
    }   
  
    private void login(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {   
        try {   
            String senha = request.getParameter("senha").toUpperCase();   
            String login = request.getParameter("login").toUpperCase();   
            //conectar();   
            ResultSet res = consultar("select * from login where login=´" + login + "´ and senha=´" + senha + "´");   
            response.setContentType("text/plain");   
            PrintWriter out = response.getWriter();   
            boolean aux = true;   
            while (res.next()) {   
                out.print("TRUE");   
                aux = false;   
            }   
            if (aux) {   
                out.print("FALSE");   
            }   
            out.close();   
            //desconectar();   
        } catch (SQLException ex) {   
            Logger.getLogger(ServLet.class.getName()).log(Level.SEVERE, null, ex);   
        }   
    }  
public class ServLet extends HttpServlet {

    private Connection c;
    String metodo;

    
    public void init() {
      conectar();
    }

    public void destroy() {
      desconectar();
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        this.doPost(request, response);
    }

    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        metodo = request.getParameter("metodo").toUpperCase();
        if (metodo.equals("LOGIN"))//login
        {
            login(request, response);
        }

        if (metodo.equals("CONSULTA")) {
            consulta(request, response);
        }

    }

    private void login(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        try {
            String senha = request.getParameter("senha").toUpperCase();
            String login = request.getParameter("login").toUpperCase();
            //conectar();
            ResultSet res = consultar("select * from login where login=´" + login + "´ and senha=´" + senha + "´");
            response.setContentType("text/plain");
            PrintWriter out = response.getWriter();
            boolean aux = true;
            while (res.next()) {
                out.print("TRUE");
                aux = false;
            }
            if (aux) {
                out.print("FALSE");
            }
            out.close();
            //desconectar();
        } catch (SQLException ex) {
            Logger.getLogger(ServLet.class.getName()).log(Level.SEVERE, null, ex);
        }
    } 


O erro ocorre na linha 22 do SERVLET, no momento em que a variavel metodo na servlet recebe o parametro ´metodo´ passado, caso ele for passado por GET esta variavel recebe o parametro sem problemas, mas se foi passado pelo metodo POST, no momento que a variavel recebe o parametro a servlet fecha e exibe uma mensagem de erro ´Internal servlet error´, assim nada é retornado para a midlet, creio que o problema esta na passagem dos dados pelo modo POST pela midlet caso seja isso como resolver?

Quando executo a servlet na saida tenho as seguintes mensagens

Using CATALINA_BASE:   C:\Documents and Settings\Administrador\.netbeans\6.0\apache-tomcat-6.0.14_base   
Using CATALINA_HOME:   C:\Arquivos de programas\Apache Software Foundation\Apache Tomcat 6.0.14   
Using CATALINA_TMPDIR: C:\Documents and Settings\Administrador\.netbeans\6.0\apache-tomcat-6.0.14_base\temp   
Using JRE_HOME:        C:\Arquivos de programas\Java\jdk1.6.0_02   
Listening for transport dt_shmem at address: tomcat_shared_memory_id   
19/03/2008 17:50:41 org.apache.catalina.core.AprLifecycleListener init   
INFO: The Apache Tomcat Native library which allows optimal performance in production environments was not found on the java.library.path: C:\Arquivos de programas\Java\jdk1.6.0_02\bin;.;C:\WINDOWS\Sun\Java\bin;C:\WINDOWS\system32;C:\WINDOWS;C:\oraclexe\app\oracle\product\10.2.0\server\bin;C:\ARQUIV~1\Borland\Delphi5\Projects\Bpl;C:\ARQUIV~1\Borland\vbroker\jre\Bin;C:\ARQUIV~1\Borland\vbroker\Bin;C:\ARQUIV~1\Borland\Delphi5\Bin;C:\ARQUIV~1\Borland\CBUILD~1\Projects\Bpl;C:\ARQUIV~1\Borland\CBUILD~1\Bin;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;c:\Arquivos de programas\Microsoft SQL Server\90\Tools\binn\;C:\Arquivos de programas\SSH Communications Security\SSH Secure Shell;C:\Arquivos de programas\Arquivos comuns\Ahead\Lib\   
19/03/2008 17:50:41 org.apache.coyote.http11.Http11Protocol init   
INFO: Initializing Coyote HTTP/1.1 on http-8084   
19/03/2008 17:50:41 org.apache.catalina.startup.Catalina load   
INFO: Initialization processed in 653 ms   
19/03/2008 17:50:41 org.apache.catalina.core.StandardService start   
INFO: Starting service Catalina   
19/03/2008 17:50:41 org.apache.catalina.core.StandardEngine start   
INFO: Starting Servlet Engine: Apache Tomcat/6.0.14   
19/03/2008 17:50:42 com.sun.faces.config.ConfigureListener contextInitialized   
INFO: Initializing Sun´s JavaServer Faces implementation (1.2_04-b10-p01) for context ´/JJLocadora6´   
19/03/2008 17:50:43 org.apache.catalina.core.StandardContext resourcesStart   
SEVERE: Error starting static Resources   
java.lang.IllegalArgumentException: Document base C:\Documents and Settings\Administrador\Meus documentos\NetBeansProjects\teste\build\web does not exist or is not a readable directory   
        at org.apache.naming.resources.FileDirContext.setDocBase(FileDirContext.java:141)   
        at org.apache.catalina.core.StandardContext.resourcesStart(StandardContext.java:3944)   
        at org.apache.catalina.core.StandardContext.start(StandardContext.java:4113)   
        at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:791)   
        at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:771)   
        at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:525)   
        at org.apache.catalina.startup.HostConfig.deployDescriptor(HostConfig.java:626)   
        at org.apache.catalina.startup.HostConfig.deployDescriptors(HostConfig.java:553)   
        at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:488)   
        at org.apache.catalina.startup.HostConfig.start(HostConfig.java:1138)   
        at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:311)   
        at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:117)   
        at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1053)   
        at org.apache.catalina.core.StandardHost.start(StandardHost.java:719)   
        at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1045)   
        at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:443)   
        at org.apache.catalina.core.StandardService.start(StandardService.java:516)   
        at org.apache.catalina.core.StandardServer.start(StandardServer.java:710)   
        at org.apache.catalina.startup.Catalina.start(Catalina.java:566)   
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)   
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)   
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)   
        at java.lang.reflect.Method.invoke(Method.java:597)   
        at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:288)   
        at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:413)   
19/03/2008 17:50:43 org.apache.catalina.core.StandardContext start   
SEVERE: Error in resourceStart()   
19/03/2008 17:50:43 org.apache.catalina.core.StandardContext start   
SEVERE: Error getConfigured   
19/03/2008 17:50:43 org.apache.catalina.core.StandardContext start   
SEVERE: Context [/teste] startup failed due to previous errors   
19/03/2008 17:50:43 org.apache.catalina.core.StandardContext stop   
INFO: Container org.apache.catalina.core.ContainerBase.[Catalina].[localhost].[/teste] has not been started   
19/03/2008 17:50:43 org.apache.coyote.http11.Http11Protocol start   
INFO: Starting Coyote HTTP/1.1 on http-8084   
19/03/2008 17:50:43 org.apache.jk.common.ChannelSocket init   
INFO: JK: ajp13 listening on /0.0.0.0:8009   
19/03/2008 17:50:43 org.apache.jk.server.JkMain start   
INFO: Jk running ID=0 time=0/31  config=null   
19/03/2008 17:50:43 org.apache.catalina.startup.Catalina start   
INFO: Server startup in 2279 ms  
Using CATALINA_BASE:   C:\Documents and Settings\Administrador\.netbeans\6.0\apache-tomcat-6.0.14_base
Using CATALINA_HOME:   C:\Arquivos de programas\Apache Software Foundation\Apache Tomcat 6.0.14
Using CATALINA_TMPDIR: C:\Documents and Settings\Administrador\.netbeans\6.0\apache-tomcat-6.0.14_base\temp
Using JRE_HOME:        C:\Arquivos de programas\Java\jdk1.6.0_02
Listening for transport dt_shmem at address: tomcat_shared_memory_id
19/03/2008 17:50:41 org.apache.catalina.core.AprLifecycleListener init
INFO: The Apache Tomcat Native library which allows optimal performance in production environments was not found on the java.library.path: C:\Arquivos de programas\Java\jdk1.6.0_02\bin;.;C:\WINDOWS\Sun\Java\bin;C:\WINDOWS\system32;C:\WINDOWS;C:\oraclexe\app\oracle\product\10.2.0\server\bin;C:\ARQUIV~1\Borland\Delphi5\Projects\Bpl;C:\ARQUIV~1\Borland\vbroker\jre\Bin;C:\ARQUIV~1\Borland\vbroker\Bin;C:\ARQUIV~1\Borland\Delphi5\Bin;C:\ARQUIV~1\Borland\CBUILD~1\Projects\Bpl;C:\ARQUIV~1\Borland\CBUILD~1\Bin;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;c:\Arquivos de programas\Microsoft SQL Server\90\Tools\binn\;C:\Arquivos de programas\SSH Communications Security\SSH Secure Shell;C:\Arquivos de programas\Arquivos comuns\Ahead\Lib\
19/03/2008 17:50:41 org.apache.coyote.http11.Http11Protocol init
INFO: Initializing Coyote HTTP/1.1 on http-8084
19/03/2008 17:50:41 org.apache.catalina.startup.Catalina load
INFO: Initialization processed in 653 ms
19/03/2008 17:50:41 org.apache.catalina.core.StandardService start
INFO: Starting service Catalina
19/03/2008 17:50:41 org.apache.catalina.core.StandardEngine start
INFO: Starting Servlet Engine: Apache Tomcat/6.0.14
19/03/2008 17:50:42 com.sun.faces.config.ConfigureListener contextInitialized
INFO: Initializing Sun´s JavaServer Faces implementation (1.2_04-b10-p01) for context ´/JJLocadora6´
19/03/2008 17:50:43 org.apache.catalina.core.StandardContext resourcesStart
SEVERE: Error starting static Resources
java.lang.IllegalArgumentException: Document base C:\Documents and Settings\Administrador\Meus documentos\NetBeansProjects\teste\build\web does not exist or is not a readable directory
        at org.apache.naming.resources.FileDirContext.setDocBase(FileDirContext.java:141)
        at org.apache.catalina.core.StandardContext.resourcesStart(StandardContext.java:3944)
        at org.apache.catalina.core.StandardContext.start(StandardContext.java:4113)
        at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:791)
        at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:771)
        at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:525)
        at org.apache.catalina.startup.HostConfig.deployDescriptor(HostConfig.java:626)
        at org.apache.catalina.startup.HostConfig.deployDescriptors(HostConfig.java:553)
        at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:488)
        at org.apache.catalina.startup.HostConfig.start(HostConfig.java:1138)
        at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:311)
        at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:117)
        at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1053)
        at org.apache.catalina.core.StandardHost.start(StandardHost.java:719)
        at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1045)
        at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:443)
        at org.apache.catalina.core.StandardService.start(StandardService.java:516)
        at org.apache.catalina.core.StandardServer.start(StandardServer.java:710)
        at org.apache.catalina.startup.Catalina.start(Catalina.java:566)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
        at java.lang.reflect.Method.invoke(Method.java:597)
        at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:288)
        at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:413)
19/03/2008 17:50:43 org.apache.catalina.core.StandardContext start
SEVERE: Error in resourceStart()
19/03/2008 17:50:43 org.apache.catalina.core.StandardContext start
SEVERE: Error getConfigured
19/03/2008 17:50:43 org.apache.catalina.core.StandardContext start
SEVERE: Context [/teste] startup failed due to previous errors
19/03/2008 17:50:43 org.apache.catalina.core.StandardContext stop
INFO: Container org.apache.catalina.core.ContainerBase.[Catalina].[localhost].[/teste] has not been started
19/03/2008 17:50:43 org.apache.coyote.http11.Http11Protocol start
INFO: Starting Coyote HTTP/1.1 on http-8084
19/03/2008 17:50:43 org.apache.jk.common.ChannelSocket init
INFO: JK: ajp13 listening on /0.0.0.0:8009
19/03/2008 17:50:43 org.apache.jk.server.JkMain start
INFO: Jk running ID=0 time=0/31  config=null
19/03/2008 17:50:43 org.apache.catalina.startup.Catalina start
INFO: Server startup in 2279 ms
 


Alguem pode me confirma o código e me dar uma dica? Obrigado!!!!


Responder