OnLoad para JSPs

11 respostas
renatosilva

Nos três JSPs que temos nós instanciamos nossa classe de lógica (aquele que nunca usou JSP para acessar lógica que atire a primeira pedra :smiley: ) e passamos para ela um InputStream que criamos antes e aponta para um properites. Há como executar um código comum antes de cada JSP ser chamado - o código citado, e passar para cada JSP a classe de lógica prontinha pra usar? É tipo isso que estou querendo:

evento onLoad (JSP jsp) {
    InputStream is = ....
    // zilhões de coisas comuns aos JSPs
    ClasseBelezinha prontoParaUsar = ...
    dar(jsp, prontoParaUsar);
}

Tem como???

11 Respostas

danieldestro

Use um filtro.

renatosilva

Os filtros servem para isso? Vou pesquisar a respeito. Valeu Daniel!

danieldestro

Bom, melhor seria você passar o Properties ao invés do InputStream, não acha?

Se achar filtro ruim para isso, crie uma classe e faça seu JSP estendê-la.

renatosilva

Eu não faço isso porque seria mais código repetido para criar o properties e tratar as exceções, entende?

:shock: :shock: :shock: Tem como? Como?

danieldestro

Qual o problema de fazer isso no filtro:

InputStream is = // ... pega arquivo Properties p = new Properties(); p.load( is ); request.setAttribute( "prop", p );

E para criar uma superclasse para seus JSPs basta criar uma classe que estende HttpJspBase.

Mas uma pergunta, pq ler este properties a toda chamada (request)???

renatosilva

Sobre ler o properties a cada chamada, aí entra a questão de que deixamos para pensar numa coisa melhor para depois. É que nele tem os dados da conexão JDBC. Cada vez que as páginas são acessadas é feita uma conexão com o banco. Já pensei em fazer isso apenas uma vez, no “startup” da aplicação, mas não sei como, as coisas são meio confusas ainda. Tem o lance do pool de conexões também né…

Sobre o filtro o problema é fazer isso em vários lugares, nos JSPs, no filtro não tem problema.

Sobre a superclasse vou pesquisar a respeito. Valeu!

danieldestro

Pára, pára, pára. :shock:
Pare com isso e crie já um pool de conexões.
Onde já se viu uma coisa dessas, menino? :smiley:
E outra, nada de acessar BD pelo JSP.

renatosilva

Eu tava pensando aqui: é possível várias threads (JSPs) usarem a mesma conexão JDBC? Ou cada thread vai ter sua própria conexão JDBC (venha de um pool ou não)? Eu não poderia fazer apenas uma conexão, não importa quantos clientes dos JSPs hajam, e esses clientes reutilizam uma mesma conexão?? Tá vendo como tá dando tilte? :smiley: Tipo, eu esqueci uma coisa que já entendi uma vez, sei lá. Tenho que ler a respeito.

Calma, calma! Eu só passo o properties e recebo um “DAO”, não há nem a citação “JDBC” nas páginas :smiley:

danieldestro

As regras de negócio devem estar FORA do JSP. A idéia (correta) de JSP é utilizar apenas para mostrar os dados (receber um objeto ou um List com objetos e mostrar).

O pool é assim, ele inicia um ou mais conexões e as deixam ativas. Quando cada thread (ou requisição) solicitar uma conexão o pool retorna uma conexão ativa e livre. Se não tiver mais ele cria uma nova (se possível e não atingir o limite configurado).

renatosilva

As regras de negócio ESTÃO FORA do JSP!!!

Agora sobre o pool a idéia então é que hajam menas conexões do que threads (uma thread “libera” uma conexão e outra que está nascendo aproveita essa conexão em vez de criiiiiiiaaaaaaaaaaaaarrrrrrrr uma), mas principalmente que threads não necessitem ficar criiiiiiaaaaannnnnddddddooo coooooonnnneeeeexxxxõõõõõõeeeesssss, mas pegando-as quentinhas do pool, aumentando o desempenho. Certo?

louds

Use um front-controller ou page-controller então. Vai ficar MUITO mais facil.

Se não quiser usar um framework como Struts ou webwork, pelo menos escreva um raio de um servlet e no fica de um forward pro jsp que realiza a renderização do html.

No mínimo isso.

Criado 2 de maio de 2005
Ultima resposta 2 de mai. de 2005
Respostas 11
Participantes 3