Vraptor - Criar pagina de erro 404

Opa,

criei uma página erro404.jsp que deve ser exibida quando o usuário entra numa url inexistente.
É no web.xm que configuro para redirecionar? Como faço isso?

Obrigado

procure por error-page no web.xml

Oi Lucas…

Fiz o seguinte:

criei uma pasta erro e coloquei o arquivo erro404.jsp nela.

Adicionei as seguintes linhas no meu web.xml:

	<error-page>
    	<error-code>404</error-code>
    	<location>/erro/erro404.jsp</location>
	</error-page> 

Quando busco uma url inexistente, exibe uma tela branca, sem nenhum códido html.

Adicionei um ErroController:

@Resource
public class ErroController {

	@Get()
	public void erro404(){
	}
}

Mas continua com a tela branca.

O que estou fazendo de errado?

Obrigado.

o error-page vai direto pro jsp, não passa pelo controller…

o jsp tem que estar marcado com errorPage também (não lembro como, mas acho que é no <%@page

Você pode também apontar o notfound para um resource do vraptor.

<error-page> <error-code>404</error-code> <location>/erro404</location> </error-page>

@Path() public void erro404(){ [...] }

E altere o filter do vraptor adicionando um dispatcher para ERROR.

<filter> <filter-name>vraptor</filter-name> <filter-class>br.com.caelum.vraptor.VRaptor</filter-class> </filter> <filter-mapping> <filter-name>vraptor</filter-name> <url-pattern>/*</url-pattern> <dispatcher>FORWARD</dispatcher> <dispatcher>REQUEST</dispatcher> <dispatcher>ERROR</dispatcher> </filter-mapping>

Boa tarde galera!

Estou com um problema similar, mas não estou conseguindo entender um motivo para o tal.

No meu caso acontece o seguinte: optamos pela solução do garcia-jj de fazer um resource no vraptor para tratar os casos de 404… no nosso ambiente de desenvolvimento usamos o plugin do jetty (run-jetty-run), e, depois de alguns ajustes, fizemos funcionar…

Contudo, como nosso ambiente de produção é o Tomcat, passamos aos testes no mesmo, o que para nossa surpresa não funcionou… Apresenta a seguinte exceção:

Criamos um projeto de teste por aqui, para checar se não era algum tipo de implementação específica do nosso projeto que estaria atrapalhando, mas nos deparamos com o mesmo problema.

Alguém teria alguma idéia do motivo deste comportamento?

Nota: testamos fazer somente com JSP (sem o resource) e funcionou em ambos os casos.

Desde já agradeço.

Grande abraço!

colocou o dispatcher de error no filtro do vraptor?

Sim… na verdade essa exceção só ocorre quando o coloco, caso contrário aparece, no caso do Jetty, a tela de 404 do mesmo… já no tomcat, aparece a tela de NOT FOUND do navegador…

Também colocamos o

no JSP.

[quote=felipe.brito87]Sim… na verdade essa exceção só ocorre quando o coloco, caso contrário aparece, no caso do Jetty, a tela de 404 do mesmo… já no tomcat, aparece a tela de NOT FOUND do navegador…

Também colocamos o

no JSP.[/quote]

Tem que desmarcar lá no IEca a opção “exibir erros http amigáveis”.

tá dando nullpointer aqui:

linha 41… ou seja, o requestInfo.getChain está vindo null

vc está usando o spring, o guice ou o pico?

garcia-jj,

não entendi o porque da colocação… nem no windows eu estou… contudo creio que o problema não seja os navegadores, mas de qualquer forma, valeu…

Lucas,

Foi exatamente neste ponto em que paramos no debug… e estamos usando o spring…

é o chain que está null, é o request ou o response? ou nenhum deles?

Nenhum deles… rastreamos até a classe ‘org.apache.catalina.core.ApplicationFilterChain’, onde ele invoca o seguinte método (na linha 311):

Neste momento estão null o ‘this.support’ e o ‘this.servlet’…

Aqui ele lança a NullPointerException…

não parece ser culpa do VRaptor isso… é algo específico do tomcat que vc está usando… qual é a versão?

[quote=felipe.brito87]garcia-jj,

não entendi o porque da colocação… nem no windows eu estou… contudo creio que o problema não seja os navegadores, mas de qualquer forma, valeu…[/quote]

Pela informação que você me deu, entendi que poderia ser problema do browser, já que você disse que aparece a página de erro do browser. O único que faz isso é o IE.

Lucas,

Estavamos suspeitando disto, mas não chegamos a conclusão nenhuma… estamos usando o Tomcat 7.0.8…

Curioso também é que, embora façamos uma só chamada, passa duas vezes pelo método “couldNotFind”… a primeira sem problemas, a segunda gera o NullPointer…

garcia-jj,

Entendi… não me expressei da melhor maneira… quanto ao exposto, a questão é que ele lança a exceção e cai na página de 404, ou do servidor ou do browser - no nosso caso, firefox e chrome…

hum… se passa duas vezes, será que ele não tá tentando achar uma jsp que não existe?

Humm… pela manhã confiro com mais cuidado e posto a resposta…

Valeu e boa noite… ou melhor, bom dia… :wink:

Fala Lucas, tudo tranquilo!?

Dei uma olhada a mais por aqui e não consegui descobrir o motivo do problema… e o melhor é que só dá esse problema no Tomcat, no Jetty funciona na boa (neste só passa uma vez pelo ‘couldntFind’)…

Como já gastamos mais tempo do que o desejado preferimos deixar de lado essa implementação, e decidimos modificar a lógica de redirecionamento em nossa própria implementação da classe ‘DefaultResourceNotFoundHandler’.

A princípio tentamos fazer com o seguinte redirecionamento: result.use(Results.status()).movedPermanentlyTo(uri);

Funcionou, mas como a URL era alterada, o que não era desejável, a abandonamos; então passamos a usar o método ‘forwardTo’, o que, depois de alguns ajustes na página, funcionou perfeitamente.

Dessa maneira, preferimos, por ora, só fazer assim (não sei se foi a melhor solução, mas tá valendo… hehehe). Depois tentarei descobrir mais alguma coisa a respeito, e, caso consiga, posto por aqui.

Grande abraço e valeu mais uma vez pela força!

oi pessoal

acho que estou com o mesmo problema. Estou tentando configurar a página de erro 404 está dando este erro:

estou usando tomcat-7.0.25.

14/12/2012 11:40:48 org.apache.catalina.core.ApplicationDispatcher invoke
GRAVE: Servlet.service() for servlet jsp threw exception
java.lang.NullPointerException
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:321)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
	at br.com.caelum.vraptor.resource.DefaultResourceNotFoundHandler.couldntFind(DefaultResourceNotFoundHandler.java:41)
	at com.vibro.infra.Error404.couldntFind(Error404.java:37)
	at br.com.caelum.vraptor.interceptor.ResourceLookupInterceptor.intercept(ResourceLookupInterceptor.java:71)
	at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)
	at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54)
	at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:56)
	at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54)
	at br.com.caelum.vraptor.core.EnhancedRequestExecution.execute(EnhancedRequestExecution.java:44)
	at br.com.caelum.vraptor.VRaptor$1.insideRequest(VRaptor.java:91)
	at br.com.caelum.vraptor.ioc.spring.SpringProvider.provideForRequest(SpringProvider.java:58)
	at br.com.caelum.vraptor.VRaptor.doFilter(VRaptor.java:88)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
	at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:684)
	at org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:473)
	at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:402)
	at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:329)
	at org.apache.catalina.core.StandardHostValve.custom(StandardHostValve.java:455)
	at org.apache.catalina.core.StandardHostValve.status(StandardHostValve.java:324)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:193)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:98)
	at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:927)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407)
	at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:987)
	at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:579)
	at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:307)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:662)
14/12/2012 11:40:48 org.apache.catalina.core.StandardHostValve custom
GRAVE: Exception Processing ErrorPage[errorCode=404, location=/page404/notFound.jsp]
java.lang.NullPointerException
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:321)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
	at br.com.caelum.vraptor.resource.DefaultResourceNotFoundHandler.couldntFind(DefaultResourceNotFoundHandler.java:41)
	at com.vibro.infra.Error404.couldntFind(Error404.java:37)
	at br.com.caelum.vraptor.interceptor.ResourceLookupInterceptor.intercept(ResourceLookupInterceptor.java:71)
	at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)
	at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54)
	at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:56)
	at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54)
	at br.com.caelum.vraptor.core.EnhancedRequestExecution.execute(EnhancedRequestExecution.java:44)
	at br.com.caelum.vraptor.VRaptor$1.insideRequest(VRaptor.java:91)
	at br.com.caelum.vraptor.ioc.spring.SpringProvider.provideForRequest(SpringProvider.java:58)
	at br.com.caelum.vraptor.VRaptor.doFilter(VRaptor.java:88)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
	at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:684)
	at org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:473)
	at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:402)
	at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:329)
	at org.apache.catalina.core.StandardHostValve.custom(StandardHostValve.java:455)
	at org.apache.catalina.core.StandardHostValve.status(StandardHostValve.java:324)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:193)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:98)
	at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:927)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407)
	at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:987)
	at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:579)
	at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:307)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:662)

alguma sugestão como resolver isso?

obrigado