Você acredita em doPost?

14 respostas
S

Estou começando a achar que acessar servlets pelo doPost atravéz de Applets não é possível. Baixei alguns tutoriais na internet, mas só consegui fazer Post de páginas HTML para servlets, mas de Applets para Servlets não. Parece tão simples; uma simples função de login dando tanta dor de cabeça? Até consegui por GET, mas não quero o usuário e a senha na barra de endereços. Se alguem puder apontar minha falha, agradeço muito!

...
 try {
        // Construct data
        String data = URLEncoder.encode("T1", "UTF-8") + "=" + URLEncoder.encode(s1, "UTF-8");
        data += "&" + URLEncoder.encode("T2", "UTF-8") + "=" + URLEncoder.encode(s2, "UTF-8");

        // Send data
        URL end = new URL("http://localhost:8080/Bone/Logar");
        URLConnection conn = end.openConnection();
        conn.setDoOutput(true);
        OutputStreamWriter wr = new OutputStreamWriter(conn.getOutputStream());
        wr.write(data);
        wr.flush();
        getAppletContext().showDocument(end);
        T1.setText("END");//avisa que mandou para o endereço

        // Get the response
      T1.setText("AR");// Aguardando Resposta
        BufferedReader rd = new BufferedReader(new InputStreamReader(conn.getInputStream()));
        String line;
        while ((line = rd.readLine()) != null) {
            // Process line...
        }
        wr.close();
        rd.close();
    }...

Servlet:

public void doPost(HttpServletRequest request, HttpServletResponse response)    
         throws ServletException, IOException {     
    
    usu= request.getParameter("T1");
   senhas = request.getParameter("T2");
                 
     }

Eu depurei o servlet e não cai na requisição Post… aí as variaveis ficam nulas e não consigo fazer log-in.

Obrigado e um otimo dia a todos! :smiley:

14 Respostas

kinow

Yo shamanpyro,

acho que seu problema pode ser a maneira como envia os dados para o server. Você está montando a requisição HTTP corretamente? Isso dá muito trabalho fazer na mão através de conexão, como teria que ser feito. O header de uma chamada a um servlet indica se é GET ou POST (ou qualquer outro método HTTP).

Que tal usar HttpClient (que mudou de nome e não lembro o nome) da apache e fazer uma chamada via post bem mais simples? Garanto que funcionará ;-).

Abraços e ótimo dia também

Giulliano

pô cara…vc ainda ta nessa mesma tela de login??? Já pensou em fazer ela em jsp ou até mesmo em html puro ???

eu nunca mexi com applets mas em alguns segundos achei essa resposta…já tentou ??

S

Haha, não estou ainda nessa tela de login. Eu decidi deixar em GET a um tempo atráz e partir pra parte funcional do sistema :). Mas agora que fiz o funcionamento e uma parte da GUI, o fato do usuário e senha ficar na barra de endereços tá encomodando bastante. Como é tcc eles vão chiar mto por causa disso, mas obrigado pelas respostas. Tentarei o método que vcs sugeriram. Obs: estou usando o NetBeans, alguma ideia de como uso o HttpClient da apache?

Obrigado :wink:

kinow

O nome agora é HttpCommons, para usá-lo, tens alguns exemplos em:

http://hc.apache.org/httpcomponents-client/examples.html

Mas é bastante auto-instrutivo, só um CTRL + Space e tudo está resolvido :wink:

Abraço

S

Muito obrigado ;). Estou tentando aqui, consegui fazer ele entender os parametros mas as variaveis BROXAM. Isso mesmo, eu coloco :
System.out.println(variavel); no servlet pra ver o valor dela… mas quando tento usar este valor na seguinte linha:

System.out.println("Comparou e deu certo =/!" + usu + senhas + asenha);
              //abaixo uma requisição em applet assinada
               out.println("<html><head><title>Casa Inteligente"+usu+ "- Seja Bem vindo "+usu+"!! </title></head><!--CONVERTED_APPLET--><!-- HTML CONVERTER --><center><object    classid = clsid:8AD9C840-044E-11D1-B3E9-00805F499D93    codebase = http://java.sun.com/update/1.6.0/jinstall-6u70-windows-i586.cab#Version=6,0,0,6    HEIGHT = 800 >    <PARAM NAME = CODE VALUE = "+usu+".class >    <PARAM NAME = ARCHIVE VALUE = a"+usu+".jar >    <param name = type value = application/x-java-applet;version=1.6>    <param name = scriptable value = false>  <PARAM NAME = 'IP' VALUE="+ip2+"> <PARAM NAME = 'FRASE' VALUE="+frase+"> <comment>	<embed            type = application/x-java-applet;version=1.6             CODE = "+usu+".class            ARCHIVE = a"+usu+".jar             HEIGHT = 600            WIDTH= 600   scriptable = false	    pluginspage = http://java.sun.com/products/plugin/index.html#download>	    <noembed>            </noembed>	</embed>    </comment></object><!--<APPLET CODE = "+usu+".class ARCHIVE = a"+usu+".jar HEIGHT = 600 WIDTH=600></APPLET></center>--><!--END_CONVERTED_APPLET--><html>");

aparece o resultado:

Comparou e deu certo =/!LULA1212 -> ele conhece as variaveis

mas na pagina aparece:

<title>Casa Inteligente- Seja Bem vindo!! </title>

… era pra aparecer
title>Casa Inteligente LULA - Seja Bem vindo LULA" </title>

S

consegui. Fiz uma gambiarra mas funcionou ^^. Obrigado pela ajuda :wink:

Giulliano

Legal cara…parabéns…se não desse certo vc poderia continuar usando o GET e mandando a senha na url com criptografia.

S

Boa!. Estou estudando criar um protocolo de criptografia na mão. Não sei se compensa, ou é melhor usar as apis do java para isso? Ah, mesmo com Post o certo é criptografar os dados. Substituir get por post não muda o fato de que os dados estão passando, qualquer sniffer pode ler os dados inteirinhos. Obrigado pela dica :D.

S

Ixi… tá acontecendo um erro bem estranho oO. No FireFox até que funciona legal. Já no IE, ele só loga na proxima tentativa, independente do que eu coloque. Ex. Eu coloco o usuario e a senha certos e ele dá negado. Na proxima tentativa eu coloco qualquer coisa, que pode ser certo ou não e ele permite. Alguem sabe o pq disso? oO

S

percebi uma coisa: no IE o que determina se vai logar ou não é a primeira vez. Se vc acertar de primeira, otimo. Senão terá que abrir o navegador denovo oO. Se acertar de primeira e quiser colocar o usuario e senha errados ele entra mesmo assim. Sera que é problema de threads?

ivo_costa

Cara estou dando um olhada na sua pelegrinação e vou ter dar alguns conselhos:
Fuja de applet! Applet só serve pra responder questões no javaranch.
Um forma de fazer um aplicação “web off-line” é usar Java Web Start. Com JWS vc pode fazer qualquer coisa que uma aplicação desktop possa fazer e disponibilizar ela online.

Pra vc passar o teu programa de applet para JWS não vai complicar muito, pq as telas vão ter o mesmo código.
Eu estou te enviando um trabalho que eu fiz numa cadeira. É um programa em JWS que faz chamadas a servlets, agora não precisa mais fazer um post vc pode fazer chamadas como eu estou fazendo nesse programa. O programa é um quiz que busca as perguntas no servidor e salva os recordes no servidor (os recordes não estão funcionando).
Então é isso, faça em JWS e seja feliz.

No arquivo tem um projeto netbeans, os fontes dos servlets e um bat para assinar o jar.

S

Muito obrigado! Então, no meu sistema eu me baseei inteiro em applets e servlets, pra migrar não dá mto trabalho? eu uso imagens, sockets… dá pra fazer td isso? Se sim gostaria de conhecer esse método diferente. Valew mesmo, e um ótimo dia!

Obs: Eu troque ou não as applets vc já me ajudou:estou usando applets assinadas e procurava um meio de assinar “automático”. Eu ia fazer um .bat pra mexer nos policys, vou usar o seu de base ok? é que nunca mexi com bat =P

S

parabens pelo código, muito bem estruturado, tudo encapsulado… dá até vergonha de entregar o meu projeto cheio de POG :oops:

ivo_costa

Vom JWS dá pra fazer tudo que as applets fazem e mais um pouco, o JWS vai rodar local no cliente então pode abrir socket, pode deletar arquivo, pode fazer upload do arquivo senhas.txt dele, pode reiniciar o computador…

Para mudar de applet para JWS basta mudar a sua tela que extends de Applet para extender Jframe. Coloque um método main e gere um jar que seja executável. Se funcionar local basta colocar o jar no diretório da aplicação no tomcat e fazer um .jnpl. Qualquer coisa posta ae.

Criado 8 de setembro de 2008
Ultima resposta 9 de set. de 2008
Respostas 14
Participantes 4