English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
ferramentas online-Quando um Servlet lança uma exceção, o container da Web usa exception do elemento type web.xml
Você deve usar o web.xml para procurar a configuração correspondente ao tipo de exceção lançada. error-page um elemento para especificar a página para umExceção ou HTTP código de status fazer a chamada Servlet correspondente.
Suponha que haja ErrorHandler O Servlet é chamado sempre que ocorre uma exceção ou erro já definido. A seguir estão os itens criados no web.xml.
<!-- definição servlet --> <servlet> <servlet-name>ErrorHandler</servlet-name> <servlet-class>ErrorHandler</servlet-class> </servlet> <!-- mapeamento servlet --> <servlet-mapping> <servlet-name>ErrorHandler</servlet-name> <url-pattern>/ErrorHandler</url-pattern> </servlet-mapping> <!-- error-página de erro relacionada ao código --> <error-page> <error-code>404</error-code> <location>/ErrorHandler</location> </error-page> <error-page> <error-code>403</error-code> <location>/ErrorHandler</location> </error-page> <!-- exception-página de erro relacionada ao tipo --> <error-page> <exception-type> javax.servlet.ServletException </exception-type > <location>/ErrorHandler</location> </error-page> <error-page> <exception-type>java.io.IOException</exception-type > <location>/ErrorHandler</location> </error-page>
Se você quiser definir um programa de tratamento de erro genérico para todas as exceções, você deve definir o seguinte erro-page, em vez de definir um erro separado para cada exceção-elemento page:
<error-page> <exception-type>java.lang.Throwable</exception-type > <location>/ErrorHandler</location> </error-page>
A seguir estão os pontos a serem observados no tratamento de exceções no web.xml mencionado acima:
Servlet ErrorHandler é definido da mesma forma que outros Servlets e configurado no web.xml.
se ocorrer um código de status de erro, independentemente de 404(Não Encontrado)ou 403(Proibido),o Servlet ErrorHandler será chamado.
Se o aplicativo web lançar ServletException ou IOExceptionentão o contêiner da Web chamará o Servlet ErrorHandler.
Você pode definir diferentes programas de tratamento de erro para lidar com diferentes tipos de erros ou exceções. O exemplo fornecido é muito genérico, esperamos que você possa entender os conceitos básicos através do exemplo.
A seguir está a lista de atributos de solicitação que o Servlet de tratamento de erro pode acessar para analisar o erro./A natureza da exceção.
Número de Ordem | Atributo & Descrição |
---|---|
1 | javax.servlet.error.status_code Esta propriedade fornece o código de status, o código de status pode ser armazenado e analisado após ser armazenado como tipo de dados java.lang.Integer. |
2 | javax.servlet.error.exception_type Esta propriedade fornece informações sobre o tipo de exceção, o tipo de exceção pode ser armazenado e analisado após ser armazenado como tipo de dados java.lang.Class. |
3 | javax.servlet.error.message Esta propriedade fornece informações sobre a mensagem de erro exata, as informações podem ser armazenadas e analisadas após serem armazenadas como tipo de dados java.lang.String. |
4 | javax.servlet.error.request_uri Esta propriedade fornece informações sobre a chamada do Servlet pelo URL, as informações podem ser armazenadas e analisadas após serem armazenadas como tipo de dados java.lang.String. |
5 | javax.servlet.error.exception Esta propriedade fornece informações sobre a exceção gerada, as informações podem ser armazenadas e analisadas após serem armazenadas como tipo de dados java.lang.Throwable. |
6 | javax.servlet.error.servlet_name Esta propriedade fornece o nome do Servlet, que pode ser armazenado e analisado após ser armazenado como tipo de dados java.lang.String. |
A seguir está um exemplo de Servlet, que tratará o programa de erro para qualquer erro ou exceção definido por você.
Este exemplo oferece uma compreensão básica do tratamento de exceções em Servlets, você pode usar os mesmos conceitos para escrever aplicativos de tratamento de exceções mais complexos:
//Importar bibliotecas java necessárias import java.io.*; import javax.servlet.*; import javax.servlet.http.*; import java.util.*; //Extender a classe HttpServlet public class ErrorHandler extends HttpServlet { // Método para lidar com solicitações GET public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { Throwable throwable = (Throwable) request.getAttribute("javax.servlet.error.exception"); Integer statusCode = (Integer) request.getAttribute("javax.servlet.error.status_code"); String servletName = (String) request.getAttribute("javax.servlet.error.servlet_name"); if (servletName == null) { servletName = "Unknown"; } String requestUri = (String) request.getAttribute("javax.servlet.error.request_uri"); if (requestUri == null) { requestUri = "Unknown"; } // Definir o tipo de conteúdo da resposta response.setContentType("text"/html; charset=UTF-8");}} PrintWriter out = response.getWriter(); String title = "Base Tutorial Web Erro/Informações de exceção"; String docType = "<!DOCTYPE html>\n"; out.println(docType + "<html>\n" + "<head><title>" + title + "</title></head>\n" + "<body bgcolor="#f0f0f0">\n"); out.println("<h1>Exemplo de mensagem de exceção na Base Tutorial Web</h1> if (throwable == null && statusCode == null) { out.println("<h2>Informações de erro perdidas</h2> out.println("Por favor, volte para <a href=\ + response.encodeURL("http://localhost:8080/") + "\">Página inicial</a>."); }else if (statusCode != null) { out.println("Código de erro: ", + statusCode); }else{ out.println("<h2>Mensagem de erro</h2> out.println("Nome do Servlet: ", + servletName + "</br></br>"); out.println("Tipo de exceção: ", + throwable.getClass().getName()) + "</br></br>"); out.println("URI da solicitação: ", + requestUri + "<br><br>"); out.println("Mensagem de exceção: ", + throwable.getMessage()); } out.println("</body>"); out.println("</html>"); } // método para lidar com solicitações de método POST public void doPost(HttpServletRequest request, HttpServletResponse response) lança ServletException, IOException { doGet(request, response); } }
compilando de maneira usual ErrorHandler.javacoloque seus arquivos de classe em <Tomcat-instalação-directório>/webapps/ROOT/WEB-INF/na pasta classes.
Vamos adicionar a seguinte configuração no arquivo web.xml para lidar com exceções:
<?xml version="1.0" encoding="UTF-8"?> <web-app> <servlet> <servlet-name>ErrorHandler</servlet-name> <servlet-class>com.w3codebox.test.ErrorHandler</servlet-class> </servlet> <!-- mappings servlet --> <servlet-mapping> <servlet-name>ErrorHandler</servlet-name> <url-pattern>/TomcatTest/ErrorHandler</url-pattern> </servlet-mapping> <error-page> <error-code>404</error-code> <location>/TomcatTest/ErrorHandler</location> </error-page> <error-page> <exception-type>java.lang.Throwable</exception-type > <location>/ErrorHandler</location> </error-page> </web-app>
Agora, tente usar um Servlet que gere uma exceção ou insira um URL errado, o que desencadeará a chamada do contêiner Web ErrorHandler do Servlet e exibirá uma mensagem apropriada. Por exemplo, se você inserir um URL errado (como: http://localhost:8080/TomcatTest/Se a página não for conhecida (UnKonwPage), então ela exibirá o seguinte resultado:
Código de Erro:404