Jump to content

Recommended Posts

Posted (edited)

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

Edited by carcleo
Posted (edited)

Bom, quando coloco assim dentro do servlet:

RequestDispatcher rd = request.getRequestDispatcher("http://localhost:8080/imwsaogotardo/admin/retornos/admin/loginOK.jsp");  
      rd.forward( request, response ); 

Dá página não encontrada.

Mas quando coloco direto no browser para testar:

http://localhost:8080/imwsaogotardo/admin/retornos/admin/loginOK.jsp

A página abre normalmente!

xml do servlet


 <servlet>
   <servlet-name>LoginAdminServlet</servlet-name>
   <servlet-class>imwsaogotardo.src.login.LoginAdminServlet</servlet-class>
 </servlet>

 <servlet-mapping>
   <servlet-name>LoginAdminServlet</servlet-name>
   <url-pattern>/imwsaogotardo/LoginAdminServlet</url-pattern>
 </servlet-mapping>
Edited by carcleo
Posted

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á?

Posted (edited)

usa caminhos absolutos para os recursos e não relativos

Seguindo teu conselho 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!

Edited by carcleo

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.