ae! Pessoal, estudando o livro da kathy Servlet &JSP me veio uma duvida sobre WEB-INF.
Se eu coloco um package admin/admin.jsp dentro e WEB-INF a unica forma de acesso a ele eh via servlet?
Terei que criar uma class Servlet com o metodo do post ou get?
Tipo, eu tenho um class JavaBeans e uma arquivo jsp, usando jsp:useBean, mas agora como implementaria isso se tivesse que usar o servlet?
terei que:
criar um servlet
2.Chamar os metodos da class JavaBean a partir do servlet?
Não tenho muita experiencia com programação web, mas acho que posso te ajudar.
Sim, a unica maneira de acessar uma página .jsp dentro de WEB-INF é através de Servlet.
Tanto faz, as duas maneiras funcionam.
Para acessar as suas classes/metodos, o acesso é normal (não é nescesario usar jsp:useBean).
Espero ter ajudo.
gomesrod
Olá,
Na verdade é bem mais simples do que isso, você pode fazer forward para sua JSP a partir do Servlet que vai funcionar.
// no doGet ou doPost
RequestDispatcher rd = request.getRequestDispatcher("/WEB-INF/admin/admin.jsp");
rd.forward(request, response);
LPJava
gomesrod:
Olá,
Na verdade é bem mais simples do que isso, você pode fazer forward para sua JSP a partir do Servlet que vai funcionar.
// no doGet ou doPost
RequestDispatcher rd = request.getRequestDispatcher("/WEB-INF/admin/admin.jsp");
rd.forward(request, response);
opa! eh verdade, nem lembrei.
obrigado pela colaboracao
kapa01 eu usei o javabeans para manter code clear no meu jsp, nao gosto muito de <% %>
abraco e obrigado por sua sugestao…
deadlock
Lembre q WEB-INF não é o lugar adequado para colocar páginas…
nathanpc
Concordo com o deadlock o WEB-INF não é lugar de botar os arquivos de internet, ponha em mm outro lugar para ficar mais organizado e seguro, apenas uma sugestão.
LPJava
hmm, entao como proteger o acesso direto de um arquivo .jsp? se vc tem uma pagina lista.jsp e deseja que antes de mostrar a lista o user tem que fazer autenticacao, e se ele tentar acessar o arquivo diretamente pelo browser, nao vai ter sucesso. Como estou lendo o livro Servlet & JSP a kathy citou que WEB-INF seria para proteger o acesso direto, mas tem outra forma?
deadlock
Acho q jah fiz uma vez… mas faz mto tempo
seguinte, pergunta pro “tio Google” que ele deve saber…
gomesrod
Você pode usar Security Constraints para determinar que o cara deve estar logado e pertencer a um determinado grupo para acessar a página. Continua lendo o HeadFirst que logo chega o capítulo que explica isso direitinho (eu sei porque foi la que aprendi)
marcelo_mococa
Para proteger suas páginas ou a lógica de negócio, use o Spring Security ou a própria especificação da Sun (JAAS).
g4j
Pode colocar páginas jsp dentro de WEB-INF sim. Principalmente se quer proteger de acesso direto via url por exemplo.
Kleber-rr
gomesrod:
Olá,
Na verdade é bem mais simples do que isso, você pode fazer forward para sua JSP a partir do Servlet que vai funcionar.
// no doGet ou doPostRequestDispatcherrd=request.getRequestDispatcher("/WEB-INF/admin/admin.jsp");rd.forward(request,response);
Olá gomesrod, fiz a minha implementação na minha classe HibernateSessionFilter e ficou assim:
…
O problema é que quando eu vou acessar a pagina de login, ele da um erro: nao encontra o FacesContext
…
O que será q eu estou fazendo de errado??
Esse erro acontece quando você tenta acessar a JSP diretamente. Tem que passar pelo Faces Servlet e ele é que usa internamente a JSP para montar a página.
Para passar pelo Faces Servlet é só mudar a URL do forward de acordo com o mapeamento configurado no web.xml.
Provavelmente ficará como algum desses exemplos:
/WEB-INF/jsp/mainpage.jsf
/WEB-INF/jsp/mainpage.faces
/WEB-INF/faces/jsp/mainpage.jsp
Kleber-rr
gomesrod:
Kleber-rr:
…
O problema é que quando eu vou acessar a pagina de login, ele da um erro: nao encontra o FacesContext
…
O que será q eu estou fazendo de errado??
Esse erro acontece quando você tenta acessar a JSP diretamente. Tem que passar pelo Faces Servlet e ele é que usa internamente a JSP para montar a página.
Para passar pelo Faces Servlet é só mudar a URL do forward de acordo com o mapeamento configurado no web.xml.
Provavelmente ficará como algum desses exemplos:
/WEB-INF/jsp/mainpage.jsf
/WEB-INF/jsp/mainpage.faces
/WEB-INF/faces/jsp/mainpage.jsp
Cara, me passou despercebido o mapeamento no web.xml. Como eu devo inserir? Você pode me dar um exemplo??
Valeu!!
gomesrod
No arquivo web.xml deve ter algo parecido com o seguinte:
Pois bem, no “url-pattern” você vê as urls que são tratadas pelo Faces, no meu caso, *.jsf.
Ou seja: eu digito no browser /minhaapp/pagina.jsf e o Faces automaticamente usa minha página pagina.jsp para compor a view e renderizar a resposta.
Aproveitando, gostaria de deixar uma sugestão: pelas dúvidas que está tendo, imagino que você esteja modificando um projeto já pronto. Procure criar uma aplicação Faces do zero, seguindo algum tutorial, que esses pequenos detalhes (que a gente só mexe uma vez e nunca mais) vão ficar bem mais claros.
Boa sorte!
maior_abandonado
eu ainda não li esse livro, o head first, e também não tenho muita experiência com web… a forma que eu uso de impedir o usuario de entrar em alguma pagina do sistema sem estar logado, é colocando um filter servlet mapeado para /*, que verifica o usuario na sessão, caso não exista eu redireciono para a tela de login… me parece um jeito simples e eficiente.
para os mais experiêntes, existe algum problema em fazer desta forma?
existe alguma outra forma que seja simples e melhor que esta?
gomesrod
maior_abandonado:
eu ainda não li esse livro, o head first, e também não tenho muita experiência com web… a forma que eu uso de impedir o usuario de entrar em alguma pagina do sistema sem estar logado, é colocando um filter servlet mapeado para /*, que verifica o usuario na sessão, caso não exista eu redireciono para a tela de login… me parece um jeito simples e eficiente.
para os mais experiêntes, existe algum problema em fazer desta forma?
existe alguma outra forma que seja simples e melhor que esta?
Eu também não tenho tanta experiência com segurança, mas acho que tecnicamente não tem nenhum problema não… a vantagem da segurança fornecida pelo container é que não precisa programar, você só cria o formulário de login em html e faz as configurações que tudo acontece automagicamente.
Essa facilidade fica mais evidente quando se trabalha com grupos… pelo web.xml você faz o controle de quem pode ver o que, sem precisar escrever código.
Marcio_Nogueira
Bom, quando você deseja que o acesso direto a seus arquivos .jsp seja evitado, você pode criar pastas dentro de WEB-INF. Este é um diretório protegido no servidor de aplicação, para confirmar este dado, crie uma página .jsp dentro de WEB-INF e tente acessá-la diretamente através da url. Um erro será exibido, dizendo que não foi possível localizar o arquivo.
Você pode utilizar um servlet para receber as requisições http e redirecionar para a página a ser exibida, para isso, será necessário trabalhar com os objetos response e request.
Kleber-rr
gomesrod:
No arquivo web.xml deve ter algo parecido com o seguinte:
Pois bem, no “url-pattern” você vê as urls que são tratadas pelo Faces, no meu caso, *.jsf.
Ou seja: eu digito no browser /minhaapp/pagina.jsf e o Faces automaticamente usa minha página pagina.jsp para compor a view e renderizar a resposta.
Aproveitando, gostaria de deixar uma sugestão: pelas dúvidas que está tendo, imagino que você esteja modificando um projeto já pronto. Procure criar uma aplicação Faces do zero, seguindo algum tutorial, que esses pequenos detalhes (que a gente só mexe uma vez e nunca mais) vão ficar bem mais claros.
Boa sorte!
Cara, obrigado pela ajuda e pelas dicas.
Realmente, eu estou tentando melhorar um projeto que eu criei no curso de java, antes de iniciar o desenvolvimento de outro projeto, por isso estou tendo essas dificuldades de iniciante.
Agradeço pela atençao. vou testar a dica. Valeu.
Kleber-rr
gomesrod, eu estive conferindo o web.xml e realmente já tem as linhas do javax:
packagebr.com.caelum.fj26.util;importorg.apache.log4j.Logger;importorg.hibernate.Session;importorg.hibernate.SessionFactory;importorg.hibernate.cfg.AnnotationConfiguration;//import org.postgresql.core.Logger;publicclassHibernateUtil{privatestaticLoggerlogger=Logger.getLogger(HibernateUtil.class);privatestaticSessionFactorysessionFactory;// ajuda a guardar as coisas na threadprivatestaticThreadLocal<Session>sessions=newThreadLocal<Session>();static{sessionFactory=newAnnotationConfiguration().configure().buildSessionFactory();}publicstaticSessionopenSession(){if(sessions.get()!=null){logger.error("Alguem nao fechou uma j� aberta!!");// grave, alguem nao fechou uma j� aberta!}sessions.set(sessionFactory.openSession());returnsessions.get();}publicstaticvoidcloseCurrentSession(){sessions.get().close();sessions.set(null);}publicstaticSessioncurrentSession(){returnsessions.get();}}
Pelo que eu estive lendo, a session que eu crio nessas duas classes não são Http. Tem como nessas mesmas classes eu implementar esse filtro utilizando as mesmas sessions?? Ou daria problemas. Como ficaria?? valeu.
fabim
maior_abandonado:
eu ainda não li esse livro, o head first, e também não tenho muita experiência com web… a forma que eu uso de impedir o usuario de entrar em alguma pagina do sistema sem estar logado, é colocando um filter servlet mapeado para /*, que verifica o usuario na sessão, caso não exista eu redireciono para a tela de login… me parece um jeito simples e eficiente.
para os mais experiêntes, existe algum problema em fazer desta forma?
existe alguma outra forma que seja simples e melhor que esta?
Se vc nao usa um SSO ou algo do tipo, essa solucao é pratica e eficiente.
danilopelegrino
maior_abandonado:
eu ainda não li esse livro, o head first, e também não tenho muita experiência com web… a forma que eu uso de impedir o usuario de entrar em alguma pagina do sistema sem estar logado, é colocando um filter servlet mapeado para /*, que verifica o usuario na sessão, caso não exista eu redireciono para a tela de login… me parece um jeito simples e eficiente.
para os mais experiêntes, existe algum problema em fazer desta forma?
existe alguma outra forma que seja simples e melhor que esta?
Cara, para quem ta começando a melhor forma é utilizando filter mesmo.
Depois que vc pegar o jeito, ai tenta dar uma olhada em JAAS, ai depois existem “N” soluções que voce só vai precisar ver qual se enquadra melhor na sua solução.
abraço
Pankka
Aê, galera.
Concordo com o danilopelegrino , o Filter já é um ótimo início.Mas depois o JAAS ou o Spring que são mais robustos.
Pankka.
Analista de Sistemas especialista em Desenvolvimento Web.