Carcleo 4 Denunciar post Postado Agosto 8, 2015 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
Carcleo 4 Denunciar post Postado Agosto 10, 2015 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
Carcleo 4 Denunciar post Postado Agosto 11, 2015 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