1. java
  2. android
  3. c#
  4. .net
  5. javascript
  6. php
  7. jquery
  8. html
  9. sql

Tratar exceção para mostrar WEB

Amigos estou montando uma aplicação e queria uma forma mais elegante de mostra o s erro para usuário

criei um servlet para mapear os erros e jogar na tela, mais não sei como chamar esse servlet

montei no web.xml mais não ta caindo na servlet:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns="http://java.sun.com/xml/ns/javaee"
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
    id="WebApp_ID" version="3.0">
    <display-name>ControlePedidos</display-name>

    <welcome-file-list>
        <welcome-file>cadastro/menu.jsp</welcome-file>
    </welcome-file-list>

    <error-page>
        <error-code>500</error-code>
        <location>/erroPage/erro.jsp</location>
    </error-page>

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

    <error-page>
        <exception-type>br.com.acme.cadastro.excecoes.DaoException</exception-type>
        <location>/erroPage/errorServlet</location>
    </error-page>

</web-app>

SEVLET

package br.com.acme.cadastro.controle;

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(urlPatterns = {"/errorServlet"})
public class ErrorController extends HttpServlet {

    private static final long serialVersionUID = 1L;

    @Override
    protected void doPost(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");

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


        RequestDispatcher requestDispatcher = request.getRequestDispatcher("/errorServlet.jsp");
        requestDispatcher.forward(request, response);

    }

    @Override
    protected void doGet(HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException {
        doPost(request, response);
    }



}
package br.com.acme.cadastro.excecoes;


public class MostraErro extends RuntimeException {  

    private static final long serialVersionUID = 1L;

    Throwable throwable;  

    private MostraErro(Throwable t) {  
        this.throwable = t;  
    }  

    /** Wraps another exeception in a RuntimeException. */  
    public static RuntimeException wrap(Throwable t) {  
        if (t instanceof RuntimeException)  
            return (RuntimeException) t;  
        return new MostraErro(t);  
    }  

    public static DaoException erro(DaoException e){
        e.getStackTrace();
        return e;

    }

    public Throwable getCause() {  
        return this.throwable;  
    }  

    public void printStackTrace() {  
        this.throwable.printStackTrace();  
    }  
}
package br.com.acme.cadastro.controle;

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;

import br.com.acme.cadastro.cliente.ProdutosNegocio;
import br.com.acme.cadastro.entidade.ProdutosEntidade;
import br.com.acme.cadastro.entidade.UnidadeProdutoEntidade;
import br.com.acme.cadastro.excecoes.CampoVazioException;
import br.com.acme.cadastro.excecoes.DaoException;
import br.com.acme.cadastro.excecoes.MostraErro;

@WebServlet(urlPatterns={"/CadProdutos"})
public class CadastroPedidosControle extends HttpServlet {


    private static final long serialVersionUID = 1L;

    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {
        doPost(request, response);
    }

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

        try {

            ProdutosEntidade objProdutos = new ProdutosEntidade();
            objProdutos.setDescricao(request.getParameter("produto"));
            objProdutos.setPrecoCompra(Double.parseDouble(request.getParameter("precoC").replace(",", ".")));
            objProdutos.setPrecoVenda(Double.parseDouble(request.getParameter("precoV").replace(",", ".")));

            objProdutos.setUnidade(new UnidadeProdutoEntidade());
            objProdutos.getUnidade().setId(Long.parseLong(request.getParameter("cmbUnidade")));


            ProdutosNegocio prodNegocio = new ProdutosNegocio();
            prodNegocio.salvar(objProdutos);

            RequestDispatcher rd = request.getRequestDispatcher("cadastro/respostaCadastro.jsp");
            rd.forward(request, response);

        } catch (DaoException e) {
            throw MostraErro.erro(e);
        } catch (NumberFormatException e) {
            e.printStackTrace();
        } catch (CampoVazioException e) {
            e.printStackTrace();
        }

        response.sendRedirect("/ControlePedidos/errorServlet?acao=erroBanco");

    }

}
  • Quem vai chamar este Servlet é o próprio Container (Tomcat/Glassfish) quando ocorrer um erro do tipo DaoException. O problema é que logo acima você tem uma página de erro para o erro 500. Dessa forma ele vai entrar em conflito. Experimente colocar a configuração do Servlet acima da configuração do erro 500.

    Douglas Junior   22 de out de 2015
  1. Você vai ver essas setas em qualquer página de pergunta. Com elas, você pode dizer se uma pergunta ou uma resposta foram relevantes ou não.
  2. Edite sua pergunta ou resposta caso queira alterar ou adicionar detalhes.
  3. Caso haja alguma dúvida sobre a pergunta, adicione um comentário. O espaço de respostas deve ser utilizado apenas para responder a pergunta.
  4. Se o autor da pergunta marcar uma resposta como solucionada, esta marca aparecerá.
  5. Clique aqui para mais detalhes sobre o funcionamento do GUJ!

1 resposta

Não é a resposta que estava procurando? Procure outras perguntas com as tags java servlets jsp ou faça a sua própria pergunta.