Dúvidas básicas

Olá pessoal!

Eu trabalho com PHP/ASP e agora estou começando com JSP e gostaria que vc´s tirassem umas dúvidas básicas :smiley:

Então aí vai!

1 - Navegando aqui no GUJ percebi que o correto não é programar dentro do arquivo JSP e sim num SERVLET e chama-lo pelo JSP. E é aí que está minha minha dúvida! Como tenho que fazer? Gerar o .class e depois importar pelo JSP? Ou usar aquela tag reservada <jsp:useBean…/>?
Se fosse possível um exemplo seria legal 8)

2 - Outra coisa que penso é se o TOMCAT é free, baixar o pacote J2SE tb é free ou seja montar um sistema em JSP é considerado uma solução free como em PHP?

3 - Alguém tem algum pdf disponibizado sobre JSP, tipo nada taaaaoo básico mas nem tão avançado(em portuga se possível)?

Desde já agradeço!

Tomcat é free, Java é Free, você pode montar um ambiente de desenvolvimento (IDE) free www.elicpse.org

mas uma dica, não comece por JSP e sim comece estudando JAVA.

depois parta pra servlets e no final estude JSP, até lá você pode encontrar outras soluções para a camade de view, como Velocity (que eu acho muito melhor que JSP na maioria dos casos)

Então, eu já estou estudando java e por isso resolvi colocar em prática em algo web com jsp.
Só que tenho dúvidas nessa ligação entre servlet e jsp.

Bom, existem várias maneiras de fazer essa ponte, vou comentar algumas.

Para receber informações da Página, o servlet usa geralmente os métodos doGet e doPost, onde recebe um objeto HttpServletRequest e um HttpServletResponse.

para enviar informações para o JSP, você pode jogar as informações na Session e depois no JSP recuperar essa Session, ou senão usar o Pattern VO (Value Object), no qual você armazena os objetos tudo de uma vez, e manda para o JSP (através da Session).

No JSP você pode capturar tanto via Scriptlets, como tags jsp:useBean e outras tags mais.

Outro meio de ligação é através de taglibs, que são classes (.class) que fica no servidor, e são mapeadas pelo web.xml, essas taglibs podem ser usadas dentro do JSP.

Se você for montar algum sistema grande, seria interessante você estudar alguma framework MVC model 2, como o Struts do projeto Jakarta ou o WebWork (esse tem um tutorial aqui no GUJ).

Mas a dica novamente, vai por partes. Primeiro Java, Depois Servlets, JSP, ae sim começa estudar camada de persistência, frameworks, etc etc etc.

Um bom livro para Servlets e JSP você pode encontrar em

http://pdf.coreservlets.com/
é a versão antiga do livro, mas já ajuda legal o entendimento :wink:

[quote=“prog”]Então, eu já estou estudando java e por isso resolvi colocar em prática em algo web com jsp.
Só que tenho dúvidas nessa ligação entre servlet e jsp.[/quote]

Só pra complementar, quando você faz um sistema com JSP, ele gera o Servlet pra vc… se vc não for fazer algo muito grande estude parcialmente Servlets… pois eles são gerados automaticamente

[quote=“Ping”][quote=“prog”]Então, eu já estou estudando java e por isso resolvi colocar em prática em algo web com jsp.
Só que tenho dúvidas nessa ligação entre servlet e jsp.[/quote]

Só pra complementar, quando você faz um sistema com JSP, ele gera o Servlet pra vc… se vc não for fazer algo muito grande estude parcialmente Servlets… pois eles são gerados automaticamente[/quote]

Ae eu descondor de você Ping.

Todos JSP, quando processado pela primeira vez, ele vira um servlet sim. Mas esse servlet não é para o desenvolvedor mexer, ele serve para o container utilizado na próxima requisição (e não ficar compilando todas as vezes o JSP).
Seja sistema grande ou pequeno, evite o máximo misturar regras de negócios no JSP (como é feito em PHP por exemplo). Separe bem as camadas, deixe a camada de JSP apenas para view. Talves o trabalho inicial seja um pouco mais doloroso, mas para futuras manutenções e reaproveitamento de código será muito melhor. :wink:

Junior, vc disse q eu posso capturar com tags jsp:useBean, mas estas tags suportam retorno? Tipo assim vamos supor que eu tenha um .class(servlet) no servidor que faz a conexão com o banco de dados e esse tem um método retorna um Connection, através do das tags eu tenho como recuperar isso?
Desculpa, mas eu achei meio estranho uma solução que vc deu em que eu armazenaria em session. Quando são muitos usuários parece ume desastroso, não sei posso estar errado.

Aqui tem um material legal para começar
http://courses.coreservlets.com/Course-Materials/

[quote=“ManchesteR”][quote=“Ping”][quote=“prog”]Então, eu já estou estudando java e por isso resolvi colocar em prática em algo web com jsp.
Só que tenho dúvidas nessa ligação entre servlet e jsp.[/quote]

Só pra complementar, quando você faz um sistema com JSP, ele gera o Servlet pra vc… se vc não for fazer algo muito grande estude parcialmente Servlets… pois eles são gerados automaticamente[/quote]

Ae eu descondor de você Ping.

Todos JSP, quando processado pela primeira vez, ele vira um servlet sim. Mas esse servlet não é para o desenvolvedor mexer, ele serve para o container utilizado na próxima requisição (e não ficar compilando todas as vezes o JSP).
Seja sistema grande ou pequeno, evite o máximo misturar regras de negócios no JSP (como é feito em PHP por exemplo). Separe bem as camadas, deixe a camada de JSP apenas para view. Talves o trabalho inicial seja um pouco mais doloroso, mas para futuras manutenções e reaproveitamento de código será muito melhor. :wink:[/quote]

É realmente eu me expressei mal…

[quote=“prog”]Junior, vc disse q eu posso capturar com tags jsp:useBean, mas estas tags suportam retorno? Tipo assim vamos supor que eu tenha um .class(servlet) no servidor que faz a conexão com o banco de dados e esse tem um método retorna um Connection, através do das tags eu tenho como recuperar isso?
Desculpa, mas eu achei meio estranho uma solução que vc deu em que eu armazenaria em session. Quando são muitos usuários parece ume desastroso, não sei posso estar errado.[/quote]

Assim, oh!
Vamos supor que eu tenha um JSP q só tenha html e nesse html tem um form com usuário e senha. Aí o cara envia o form que chamaria outro JSP e o mesmo passaria o controle pro servlet abrir o banco e procurar o carinha lá e depois mandaria um retorno para o jsp dizer se é ou não user.

é uma coisa bem básica em asp/php que queria passar a mesma idéia para jsp e servlet para entender o seu funcionamento.

[quote=“prog”]Junior, vc disse q eu posso capturar com tags jsp:useBean, mas estas tags suportam retorno? Tipo assim vamos supor que eu tenha um .class(servlet) no servidor que faz a conexão com o banco de dados e esse tem um método retorna um Connection, através do das tags eu tenho como recuperar isso?
Desculpa, mas eu achei meio estranho uma solução que vc deu em que eu armazenaria em session. Quando são muitos usuários parece ume desastroso, não sei posso estar errado.[/quote]

ESQUEÇA QUE VOCÊ IRÁ USAR A CONEXÃO NO SEU JSP… (você provavelmente está com a idéia do PHP, que em cada .php você abre uma conexão, etc etc etc). O que você vai usar no seu JSP? apenas a camada de VIEW, ou seja, irá apenas apresentar os DADOS na tela.

por exemplo.
Você quer mostrar todos os clientes cadastrados.

você chama seu servlet. Seu servlet conecta ao banco de dados e fala que quer todos os clientes. você irá armazenar esses clientes em um BEAN clientes (por exemplo) e coloca esse Bean na sessão. O seu servlet chama o JSP. seu JSP irá recuperar esse Bean da sessão e APENAS apresentar os dados na tela. (esse é o padrão MVC model 2, onde você separa seu software em camadas)

É cara eu tenho essa vamos dizer “cultura” de que em cada arquivo abrir e fechar conexão quando exisitir um trabalho em banco.
E nesse novo modelo gera uma certa confusão, mas já já eu acerto.
Esse último exemplo seu foi bastante claro!
E cara só mais uma dúvida para finalizar, como vc armazenaria o retorno do banco num bean?

um pouquinho do conceito do VO (Value Object).

os códigos abaixo podem ter algum erro, pois estou fazendo direto aqui e nem estou compilando em alguma IDE.

vamos supor que você tem um ben chamado Clientes, apenas com Codigo e Nome

public class Clientes implements Serializable &#123;
  private Integer codigo;
  private String nome;
  
  //métodos getters e setters, caso não saiba o que é isso, de uma estudada em java bean
&#125;

Você faz no seu servlet sua conexão com o banco de dados normal (se quiser pode usar uma camada de persistência, com o hibernate por exemplo, faz um “select” no banco de dados e o retorno você irá preencher o seu bean. Mas fica uma dúvida, como irei preencher vários valores dentro de um único Bean? Você pode usar um ArrayList de Bean.
por exemplo

ArrayList list = new ArrayList&#40;&#41;;
Clientes clientes = new Clientes&#40;&#41;;
//preencha o bean
while &#40;rs.next&#40;&#41;&#41; &#123;
  clientes.setCodigo&#40;rs.getInteger&#40;1&#41;&#41;;
  clientes.setNome&#40;rs.getString&#40;2&#41;&#41;;
  list.add&#40;clientes&#41;;
&#125;

Não lembro se é exatamente assim que captura informações de um resultSet (faz tempo que não mexo com JDBC puro).

Mas no caso ae, supondo que nosso resultset recebeu varios valores, eu fui preenchendo meu Bean e depois joguei ele dentro do ArrayList de Clientes. (acho que ficou claro né?).

depois no final só jogar essa lista para a session

request.getSession&#40;true&#41;.setAttribute&#40;&quot;listaDeClientes&quot;,list&#41;;

pronto, no JSP é só capturar essa arraylist, percorrer ela inteira, fazer um Casting para o Objeto clientes e mostrar na tela os dados

ta certo amigão!

Muito obrigado pela ajuda e pela paciência…heheh…agora vou pesquisar aqui para aprender mais!

Valeu! :smiley: