DESAFIO: como fazer um JApplet passar parâmetros (como um formulário html)?

É isso aí.
Salvo as sensações do momento e levando em consideração a belza absurdamente maior dos widgets swing do java 5 em relação ao 1.4, não seria uma boa fazer um formulário swing (com listenners no lugar de javascript e a dúzia de layouts no lugar de tebelas e css) que pudesse mandar os dados…

Até onde eu sei um servlet pode falar com outro; dese ponto de vista, não seria possível por “alguns pedaçoes de servlet” dentro do JApplet (muito mais bonito q Applet AWT) e fazer as coisas?
quem pegou já uma aplicação web e teve q fazer um servlet do zero? Eu espero respostas, pois disso pode nascer um framework bonito, ehehehehe…

Servlet está no servidor, Applet está no cliente, logo não dá para colocar pedaços de servlets dentro de um applet. :wink:

Acho que o objeto URL é o que vc precisa para resolver o seu problema de submeter um formulário de dentro de um Swing.

objeto URL?

ei, então basicamente eu “monto” a url que seria enviada por um form pé-sujo html qualquer a partir do applet, e de lá disparo essa string com esse objeto?

vc já usou?

Ah só: e como eu vou fazer pra disparar essa url/uri q eu montar???

Use o “URLConnection” para enviar as informações e no servlet use “ObjectInputStream” para pegala.

Já fiz essa comunicação(swing - servlet) se quiser te passo um exemplo.

Sem mais, Rodrigo.

[quote=Sombriks][quote=saoj]
Acho que o objeto URL é o que vc precisa para resolver o seu problema de submeter um formulário de dentro de um Swing.
[/quote]

objeto URL?

ei, então basicamente eu “monto” a url que seria enviada por um form pé-sujo html qualquer a partir do applet, e de lá disparo essa string com esse objeto?

vc já usou?

Ah só: e como eu vou fazer pra disparar essa url/uri q eu montar???[/quote]

É assim mesmo. Não tem outra maneira e o objeto URL tb faz a comunicação remota.

Há uma outra forma de fazer servlet em um Japplet rodar no cliente…

Através da tecnologia xml…
Ficaria bem mais dinâmico…

Claro que é só uma idéia, se estiver errado podem me corrigir…

abraços.

E aí pessoal, esta idéia me pareceu muito boa, mas ao invez de usar o urlconnection é melhor usar o commons httpclient da fundação jakarta.

[quote=hugohasth]Há uma outra forma de fazer servlet em um Japplet rodar no cliente…

Através da tecnologia xml…[/quote]

Voce poderia dar mais detalhes sobre como XML poderia ajudar a rodar um Servlet dentro de um JApplet?

Bem, o objetivo do formulário seria pegar os dados do cliente e mandar para o servidor, certo?

As páginas que o cliente acessar já serão compiladas no servidor pra depois serem vistas… acredito ser assim, mas essa parte não estou muito certo, então me corrijam se estiver equivocado!

Sendo assim, os dados obtidos pelo formulário Japplet poderão ser “colocados” no xml que se encarregará de fazer as transações com o servidor, como acesso a banco de dados…

Bem pessoal, não sou um conhecedor do assunto, mas estudando um pouco a respeito da tecnologia xml integrada a J2EE, tive essa idéia…

Estou aqui para aprender, então se o que escrevi aqui não tiver fundamento, podem comentar…

Valeu!!!

Algum tipo de comunicação vc vai ter que ter entre o JApplet e o Servlet. O JApplet está no browser e o Servlet está no server.

O protocolo terá que ser o HTTP, pois servlet entende HTTP.

Então vc usa o URL para passar informações para o servlet, que podem estar em qualquer formato, inclusive XML.

Aí o servlet recebe isso, faz o que tem que fazer e responde.

O teu JApplet vai imitar o browser, com a vantagem de poder fazer qualquer tipo de comunicação…

Bem ta aí um exemplo de como comunicar swing + servlet, caso alguém queira…

public class Pessoa implements Serializable{
    private String nome;
    private Integer idade;
    public Integer getIdade() {
        return idade;
    }
    public void setIdade(Integer idade) {
        this.idade = idade;
    }
    public String getNome() {
        return nome;
    }
    public void setNome(String nome) {
        this.nome = nome;
    }
}

// Swing, Thinlet, Swt...
public class MySwing {
    public MySwing() {
        super();

    }
    public static void main(String[] javaEaLuz) {
        try { 
	        String urlServlet = "http://127.0.0.1:1977/swingServlet/MyServlet";
	        URLConnection urlConn = null;
	        URL url = new URL(urlServlet);
	        urlConn = url.openConnection();
	        urlConn.setDoInput(true);
	        urlConn.setDoOutput(true);
	        urlConn.setUseCaches(false);
	        urlConn.setDefaultUseCaches(false);
	        urlConn.setRequestProperty("content-type", "application/octet-stream");
	        
	        Pessoa pessoa = new Pessoa();
	        pessoa.setIdade(new Integer(21));
	        pessoa.setNome("Rodrigo");
	        
	        ObjectOutputStream objectOutputStream = new ObjectOutputStream(urlConn.getOutputStream());
	        objectOutputStream.writeObject(pessoa);
	        objectOutputStream.flush();
	        objectOutputStream.close();
	        BufferedReader in = new BufferedReader(new InputStreamReader(urlConn.getInputStream()));
	        Object objectReceive = null;
	        ObjectInputStream objectInputStream = new ObjectInputStream(urlConn.getInputStream());
	        objectReceive = objectInputStream.readObject();
	        objectInputStream.close();
	        
	        Pessoa pessoaReceive = (Pessoa) objectReceive;
System.out.println(pessoaReceive.getNome()+"\n"+pessoaReceive.getIdade());
	        
    	} catch(Exception e) {
    	    e.printStackTrace();
    	}
   }
}

// Servlet, Action...
public class MyServlet extends HttpServlet {
    public MyServlet() {
        super();
    }
    protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        try {
	        ObjectInputStream objectInputStream = new ObjectInputStream(request.getInputStream());
	        
	        Pessoa pessoa = (Pessoa) objectInputStream.readObject();
	        
	        objectInputStream.close();
	        ObjectOutputStream objectOutputStream = new ObjectOutputStream(response.getOutputStream());
	        
	        Pessoa pessoaSend = new Pessoa();
	        pessoaSend.setIdade(pessoa.getIdade());
	        pessoaSend.setNome(pessoa.getNome());
	        
	        objectOutputStream.writeObject(pessoa);
	        objectOutputStream.flush();
	        objectOutputStream.close();
        } catch(Exception e) {
            e.printStackTrace();
        }
    }
}

Sem mais, Rodrigo.

Ae!
eu vou estudar o código que o rodrigo postou.
É por isso que esse é o maior JUG q eu conheço do brasil, ehehehehehe!!!

povo valeu mesmo pela ajuda ae, quem sabe no futuro a gente ponha esse fórum em php pra escanteio e faça um “JAppletzão” muito mais dinâmico!

eu agradeço por todos que postaram terem postado, e tomara q esse post sirva pra mais alguém no futuro.

Valeu!

só uma duvída, e para retornar um objeto para o cliente? do servlet para o swing

Desculpas o exemplo ja faz isso né?

Fiz um teste no meu sistema, e não funcionou.

Pq vc usa a porta 1977??

pq a path não tem a pasta “servlet” como de costume em aplicações jsp/servlet ?

e o pior é que não ocorre nenhum erro.

estou usando swing. Não estou usando applet. pode ser isso?

Humm, eu tentaria utiliar o setAttributo do response.

Assim. HttpServletResponse response = new HttpServletResponse();

Daí response.setAttribute(“X”, valor);

e jogava isso no out.

Daí o servidor iria pegar essas variáveis e poderia ser recuperada por uma página html, via formulário, por um servlet ou até por outro applet.

Estou errado?

Funcionou!!!

A conexão de minha aplicação swing com o servlet no tomcat funcionou tranquilo.

A camada no tomcat (servlet) é responsável pela comunicação e manipulação de informações com meu bando de dados, usando DAOFactory. Vejo algumas vantagens como: uma só conexão no banco, MVC e acesso remoto independende da camada view.

Gostaria de saber se é uma boa pratica este tipo de solução, swing com servlet.

Tony

Rodrigo,

Pq utilizar esse metodo service e não os mais comuns como doGet doPost ?

E outra coisa, temos 3 classes ali… a MySwing, a classe Pessoa e a MyServlet…

a MySwing vai para o cliente

a MyServlet para o servidor

e a Pessoa ? para os 2 ?

Grato