Cliente Swing em Aplicação Web

4 respostas
FredMP

Boa tarde a todos! Estou tentando fazer um programa (cliente swing) que acesse uma aplicação web feita com struts. Até agora consegui

submeter dados normalmente usando esse código:

URL url = new URL("http://localhost:8084/loja/adicionarProduto.do"); URLConnection con = url.openConnection(); con.setDoOutput(true); BufferedWriter out = new BufferedWriter( new OutputStreamWriter(con.getOutputStream())); out.write("codigo=" + txtCodigo.getText() + "&" + "descricao=" + txtDescricao.getText() + "&" + "preco=" + txtPreco.getText() + "&" + "quantidade=" + txtQuantidade.getText());

O estranho é que ele só funciona quando eu coloco esse comando logo após:

BufferedReader in = new BufferedReader( new InputStreamReader(con.getInputStream()));

Tenho três dúvidas e se alguém souber alguma já vai me ajudar muito!

1- Porque é preciso chamar um objeto de leitura (InputStreamReader) para que o objeto de escrita funcione?

2- Como eu poderia pegar no cliente swing os objetos colocados na sessão? Que na página JSP são facilmente recuperados usando EL: ${objeto}

3- Usar URLConnection é uma boa maneira de se trabalhar com uma aplicação swing interagindo com um servidor web, ou existem outras formas mais indicadas? (Se sim, quais seriam?)

Att,
Fred

4 Respostas

Luca

Olá

Use URLConnection mas não diretamente. Experimente a API HttpClient que tem poucas vantagens mas que vale a pena.

Uma outra opção que se eu fosse você só experimentaria depois de fazer funcionar sua atual aplicação, seria usar Apache XML-RPC instalando a classe servlet dele no servidor. Não sei como ficaria o Struts neste caso mas se o projeto fosse meu descartaria o Struts completamente.

[]s
Luca

FredMP

Obrigado Luca! Acho que é exatamente essa API HttpClient que preciso. Vou testar e ver como fica.

FredMP

Bem interessante essa API, só estou com dificuldades ainda em pegar os atributos que coloco na sessão (dúvida 2), já tentei de várias formas e nada, estou lendo a documentação do HttpClient e procurando no Google pra ver se acho uma resposta, mas se alguém aí souber…

FredMP

Opa… desculpa aí pessoal, nada haver o que perguntei (dúvida 2)!
A página JSP consegue usar os atributos setados na sessão através da EL porque a página é construída no servidor.
Quando uso um cliente swing acho que não dá pra pegar essa variável de sessão que está no servidor, não é? :smiley:
Resolvi isso da seguinte forma: seto o request header “user-agent” com a String “swing” e na action verifico esse header. Quando se trata de um cliente swing e não de uma página jsp eu crio um Map em que ponho todos os objetos que preciso enviar ao cliente e mando através de um ObjectInputStream. Valeu!

Criado 23 de novembro de 2006
Ultima resposta 23 de nov. de 2006
Respostas 4
Participantes 2