Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Carcleo

Tratar erro 404

Recommended Posts

Pessoal,

 

Minha aplicação é assim:

Aplicação               /Admin                             arquivos do Admin              /Usuarios                              arquivos do Usuarios              arquivos da aplicação

Para tratar o erro 404, coloquei um arquivo erro400.jsp junto aos arquivos da aplicação e no xml adicionei:

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

 

Pessoal,

 

Minha aplicação é assim:

Aplicação               /Admin                             arquivos do Admin              /Usuarios                              arquivos do Usuarios              arquivos da aplicação

Para tratar o erro 404, coloquei um arquivo erro400.jsp junto aos arquivos da aplicação e no xml adicionei:

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

 

Bom, enquanto as páginas inexistentes estiverem entre os aquivos da aplicação os links de estilo e imagens ocorrem normalmente.

 

Basta que a página inexistente esteja dentro de uma das páginas da aplicação que os links de estilo e imagens ocorrem com erro. Ou seja, não carregam.

 

Exemplo:

Aplicação / págianaInesistente.jsp

Carrega tudo normalmente

Aplicação / Admin / págianaInesistente.jsp

A página 404.jsp carrega tudo normalmente. Mas os links de estilo e imagens ocorrem com erro. Ou seja, não carregam.

 

O que fazer?

 

Esse erro também ocorre quando existe transferência nos Servlets usando RequestDispatcher em vez de resposnse.sendRedirect

 

 

 

Compartilhar este post


Link para o post
Compartilhar em outros sites
Acho que entendi!


Se enviarmos cada ocorrência de página inexistente para a página erro404.jsp diretamente, caso a página inexistente esteja fora de seu nível, os links falharão.


Porém, se ao invés disso enviarmos toda ocorrência para o Servlet, ele sempre estará em /Servlet (pelo xml). Então, à partir do Servlet, a página erro404.jsp sempre estrá lá!


Mas esta ocorrndo o seguinte


Criei o Servlet Erro404Servlet



package erros;

import java.io.IOException;


import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@WebServlet("/Erro404Servlet")
public class Erro404Servlet extends HttpServlet
{
private static final long serialVersionUID = 1L;

public void doPost(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException
{
Throwable throwable = (Throwable) req.getAttribute("javax.servlet.error.exception");
Integer statusCode = (Integer) req.getAttribute("javax.servlet.error.status_code");

req.setAttribute("errorType", throwable);
req.setAttribute("statusCode", statusCode);

//colocando o setStatus OK
res.setStatus(HttpServletResponse.SC_OK);

// We have to remove the exception from the request. If we do not remove the IE9 will not display out error page.
// IE9 will think that some error created a crash inside our application if we do not remove the exception from the request.
req.setAttribute("javax.servlet.error.exception", null);
req.setAttribute("javax.servlet.error.status_code", null);

RequestDispatcher requestDispatcher = req.getRequestDispatcher("/erro404.jsp");
requestDispatcher.forward(req, res);
}

public void doGet(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException
{
doPost(req, res);
}
}
}


E o web.xml



...
<servlet>
<servlet-name>Erro404Servlet</servlet-name>
<servlet-class>imwsaogotardo.src.erros.Erro404Servlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>Erro404Servlet</servlet-name>
<url-pattern>/imwsaogotardo/Erro404Servlet</url-pattern>
</servlet-mapping>
<error-page>
<error-code>404</error-code>
<location>/Erro404Servlet</location>
</error-page>
...


Mas toda vez que chama o Servlet ele abre a página não encontrada (erro404.jsp) mas dá o mesmo problema. Ou seja, quando a paginaInexistente.jsp está fora do nivel do root, os links não de erro404.jsp não funcionam do mesmo jeito!


Porque será?

Compartilhar este post


Link para o post
Compartilhar em outros sites
Seguindo a seguinte solução e acabou dando certo:



<jsp:useBean id="constantes" class="util.Constantes" />
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<link type="text/css" rel="stylesheet" href="<%=request.getContextPath() %>/_global/_css/estiloSite.css" />
<title>${constantes.tituloSite}</title>
</head>
<body>

<div id="topo"> <jsp:include page="<%=request.getContextPath() %>/_global/topoErro.jsp" /> </div>
<div id="meio"> <jsp:include page="erro404Conteudo.jsp" /> </div>
<div id="mapa"> <jsp:include page="<%=request.getContextPath() %>/_global/mapaErro.jsp" /> </div>
<div id="creditos"> <jsp:include page="<%=request.getContextPath() %>/_global/creditosErro.jsp" /> </div>

</body>
</html>


topoErro.jsp



<div id="topoMeio">
<map name = "menuTopo">
<area shape="rect" coords="20,60,180,120" href="<%=request.getContextPath() %>/equipe.jsp" alt="Equipe" />
<area shape="rect" coords="400,0,600,160" href="<%=request.getContextPath() %>/index.jsp" alt="Logo" />
<area shape="rect" coords="820,0,970,170" href="<%=request.getContextPath() %>/pastor.jsp" alt="Pastor" />
</map>
<img src="<%=request.getContextPath() %>/_img/topo.png" usemap="#menuTopo" />
</div>


Mas essa solução me levou à outro problema de padrões.


Nesse caso, para eu conseguir usar o Dispatcher em meus Servelts ao invés de sendRedirect, eu terei que usar essa técnica em todos os links e em todas as imagens.


É isso mesmo?


Esse é o padrão de ´projeto que vocês que já programam java EE utilizam?


Só lembrando que eu estou usando esse projeto exatamente para adquirir conhecimento de java EE e de Padrões de projeto!

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.