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.
G
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);
L
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…
D
deadlock
Lembre q WEB-INF não é o lugar adequado para colocar páginas…
N
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.
L
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?
D
deadlock
Acho q jah fiz uma vez… mas faz mto tempo
seguinte, pergunta pro “tio Google” que ele deve saber…
G
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)
M
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).
G
g4j
Pode colocar páginas jsp dentro de WEB-INF sim. Principalmente se quer proteger de acesso direto via url por exemplo.
K
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
K
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!!
G
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!
M
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?
G
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.
M
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.
K
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.
K
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.
F
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.
D
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
P
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.