Dúvida no tratamento de Exception

7 respostas
maresp

Estou tentando implementar um ExceptionHandler (um servlet genérico que trata todas as minhas excessões). No meu servlet principal eu tenho o catch que irá redirecionar para o ExceptionHandler configurado do deployment descriptor:

catch(Exception e) { RequestDispatcher errorPage = ctx.getNamedDispatcher"ExceptionHandler"); request.setAttribute("javax.servlet.error.exception", e); request.setAttribute("javax.servlet.error.request_uri", request.getRequestURI()); errorPage.forward(request, response); }

Porém esse bloco de código tb lança excessões (ServletException e IOException). O que devo fazer, tratar essas excessões dentro do meu catch mesmo ou existe outra saída?

7 Respostas

maresp

Será que ninguém pode dar uma dica…?

T

Tratadores de excessao nao eh muito minha praia, mas uma possibilidade, para pelo menos compilar eh:

catch(Exception e) { 
  try { 
    RequestDispatcher errorPage = ctx.getNamedDispatcher"ExceptionHandler"); 
    request.setAttribute("javax.servlet.error.exception", e); 
    request.setAttribute("javax.servlet.error.request_uri",  request.getRequestURI()); 
    errorPage.forward(request, response); 
  }
  catch (Exception e2) {}
}

Se ate o redirecionador der erro, bem, ai seu problema eh mais em baixo.
Mas como falei, minha praia nao eh essa, nao sei se essa eh a meneira correta de fazer.

maresp

Pois é, para compilar foi isso que eu fiz… é que nas apostilas que eu tenho da SUN (SL314) ela mostra um exemplo de código como eu coloquei. Achei estranha essa implementação por isso que recorrí ao fórum. Mas se não tiver outro jeito, vai ficar assim mesmo…

N

Hi maresp,

O que você fez está de certa forma correto. Você não pode ir até o último nível de exceções sempre. Você tem que entender que se nesse nível, o seu código levantar exceção, então é uma exceção conhecida e/ou tratável externamente.

Ou seja, se ocorrer uma exceção nesse ponto, você pode ter certeza que tem algum problema com o seu servidor web, ou o seu ExceptionHandler não está onde deveria estar. O erro não está no seu código.

Então você assume que não há erro no seu código, mas sim em algum elemento externo que após corrigido, o seu sistema roda eficientemente.

Eu também já sofri bastante com esses conceitos de exceções, é meio complicado até abstrair o ponto em que você deve dizer: “daqui pra frente o meu sistema só levanta exceção se algo externo ocorrer, então, o tratamento deve ser externo ao sistema”.

Uma outra visão, e talvez mais correta, seria deixar a exceção ocorrer, assim ela estaria visível e não passaria despercebido, ou no mínimo, logar a exceção em algum lugar.

:lol:

maresp

Obrigado pela explicação… foi muito útil… valeu!

Bani

Outra forma de tratar as exceções seria incluindo no seu web.xml as tags de <error-page>, mapeando esses tipos de exceção diretamente para o servlet que irá tratar as exceções, para não precisar ficar repetindo o código em todos os seus servlets.

T

Acho que a dica do Bani seria a “mais correta”

Criado 15 de julho de 2003
Ultima resposta 17 de jul. de 2003
Respostas 7
Participantes 4