É assim… ando a tentar fazer um formulario em JSP/Servlets que além dos campos que é normal aparecer, também iria ter um para a pessoa digitar o codigo de confirmação, esse código iria ser visualizado num GIF gerado pela página.
O problema é que parece que não posso usar dois tipos de outputs ao mesmo tempo, ou seja, se enviar texto para a pagina normalmente depois nao irei puder enviar a imagem gerada pelo java.
Se eu fizer:
response.setContentType("text/html");
PrintWriter out = response.getWriter();
Depois já nao posso fazer na mesma pagina:
O código que gera o numero e a imagem GIF não chega a criar um ficheiro no disco com esse GIF, a ideia era enviar o GIF directamente para a pagina mas senao houver outra alternativa provavelmente será isso q vou ter q fazer, no entanto fico à espera de alternativas se alguem as tiver.
Entendi. Você vai gerar os gif dinamicamente. Bem, de qualquer forma, após gerá-lo, você pode gravá-los em disco temporariamente e dinamicamente atribuir o src à tag img.
Mais uma coisa. Como é que você gera esses gifs dinamicamente? Através do próprio Java?
@Elvis.The.Pelvis: Já tou a trabalhar nisso, vou fazer com que seja gravado um ficheiro temporario para o disco e depois o html vai lá busca-lo, parece que é mesmo a unica solução. Ou então outra solução pode ser fazer um applet, vou ver. Estive agora a ler a documentação dos servlets e realmente diz lá:
Só não percebo, visto q estes metodos apenas podem ser chamados uma vez no código, porque é que só dá erro a correr o código e não a compilar. Acho q isto foge um bocado ao q o compilador de java deveria fazer, ou seja, prever o maximo de error possiveis antes de correr o programa.
Atenção q isto não é uma critica, EU ADORO JAVA! :D, é apenas um pensamento meu…
PS: O manual de “Core Servlets and JavaServer Pages” tem lá um exemplo de como criar um GIF dinámico, se quiser eu arranjo-lhe isso.
ai na segunda chamada o servlet gera o gif, na primeira ele gera o texto
na primeira chamada
response.setContentType("text/html");
PrintWriter out = response.getWriter();
e quando ele for chamado novamente pela TAG <img>
Que tal usar dois servlets para isso? No primeiro vc monta a página normalmente e nesta página retorna a tag IMG que vai chamar um outro servlet somente pra montar a imagem. Tipo:
<IMG SRC=“Nome do servlet”>
Não sei se fui claro…
Acho que seja uma melhor opção que salvar o arquivo, que na verdade não necessita disso.
Já consegui , foi mais fácil do que estava à espera. Fiz um servlet à parte só mesmo para gerar a imagem e returna-la, depois no formulario em JSP só tiver q pôr o tag <img> a chamar o servlet como vcs disseram.
Ei morcego, disponibiliza o código ai. É algo novo pra mim e muito interessante. Pode ser? To encucado em como é que diabos você gera gifs dinâmicos a partir do Java.
public class ServletTeste extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html");
PrintWriter out = response.getWriter();
out.println("<img src="" + "/metallum/GifCodeGenerator" + "">"); //Retorna o GIF com um numero
out.println("Number: " + GifCodeGenerator.returnNumber()); //retorna o numero
}
}[/code]
agora se escrever o mesmo agora em JSP já dá problemas…
Não, o servlet GifCodeGenerator não está dentro de nenhum package. “metallum” é o directorio base do site. O GifCodeGenerator está dentro do directorio classes em: metallum/web-inf/classes
Não faz sentido mudar. As JSPs deveriam fazer o q os servlets fazem, certo? Se eu fizer isto num servlet já funciona, mas queria fazer em JSP visto que 90% do código é HTML e não havia necessidade de estar a fazer tantos “out.println”… isto tá dificil :x
Esquisito… tenho que usar sempre packages? ou será que é algo relacionado com o CLASSPATH? Não tenho a certeza se as JSP precisam dos CLASSPATH das classes q vao ser usadas, já agora, se sim como colocava o classpath? Imaginando q a minha class está em c:/metallum/web-inf/classes/GifCodeGenerator.class.
O container JSP não procura pela variável de ambiente CLASSPATH não. Suas classes devem estar no web-inf/classes ou web-inf/lib(se for um .jar) da sua aplicação ou do próprio servidor web.