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 ) 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);
}
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?
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? 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
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.