当前位置: 代码迷 >> Java Web开发 >> 项目里碰到java.lang.IllegalStateException
  详细解决方案

项目里碰到java.lang.IllegalStateException

热度:416   发布时间:2016-04-17 17:16:51.0
在web.xml里配置errorpage,指定exception为java.lang.Exception,为啥有些exception还是不能显示正确的errorpage?
试了1/0这种情况,可以正确显示
项目里碰到java.lang.IllegalStateException就直接在页面上抛了一堆异常信息,没有正确转到errorpage

HTML code
      <error-page>        <exception-type>java.lang.Exception</exception-type>        <location>/errorPage.jsp</location>    </error-page>


谁碰到过或者知道这个?

------解决方案--------------------
我对此的理解是这样的:

error-page实际上是一种业务手段,让异常被转到特定页面。
既然是业务手段,则要求该异常需要从业务代码中抛出(也就是我们自己开发的代码),
容器只是帮我们转到目标页面而已。

而java.lang.IllegalStateException,我们看看这个类的说明:
Signals that a method has been invoked at an illegal or inappropriate time. In other words, the Java environment or Java application is not in an appropriate state for the requested operation. 

这个异常是由jvm或者是由容器抛出的异常(容器判断我们的应用处在不合适的状态,比如:session已经失效,或者已经向客户端返回数据却要求forward等),
所以当容器认为自身的某些规则都被违背的时候,不应该转向处理业务异常的页面,而是要转向容器自己的出错页面。




------解决方案--------------------
Signals that a method has been invoked at an illegal or inappropriate time. 
In other words, the Java environment or Java application is not in an appropriate 
state for the requested operation.

信号的一种方法援引了一个非法或不适当的时间。换句话说, Java环境或Java应用程序是不
是在一个适当的状态所请求的操作。
------解决方案--------------------
不是很明白
不过java.lang.Exception 和java.lang.IllegalStateException不是一类吧
没有捕捉java.lang.IllegalStateException的处理,不会跳到errorPage.jsp吧
------解决方案--------------------
IllegalStateException可能不是你应用引起的,而是容器自身的状态异常引起的
------解决方案--------------------
你应该配置具体的错误 例如404 500 503等
------解决方案--------------------
查看文档:
public class IllegalStateException extends RuntimeException
在非法或不适当的时间调用方法时产生的信号。换句话说,即 Java 环境或 Java 应用程序没有处于请求操作所要求的适当状态下。 



IllegalStateException 继承于运行时异常,

异常一般分为两种:运行时异常和一般异常

一般异常是能够捕获的,也就是说容器可以捕获的到,程序可以捕获得到。

而运行时异常是JVM级别的,系统级别的异常,是容器所无能为力的,所以直接抛出异常。


也许这样的解释可能会更贴切一些。



------解决方案--------------------
引用楼主 believefym 的帖子:
试了1/0这种情况,可以正确显示
项目里碰到java.lang.IllegalStateException就直接在页面上抛了一堆异常信息,没有正确转到errorpage


HTML code
<error-page>
<exception-type>java.lang.Exception</exception-type>
<location>/errorPage.jsp</location>
</error-page>




谁碰到过或者知道这个?

------解决方案--------------------
引用楼主 believefym 的帖子:
试了1/0这种情况,可以正确显示
项目里碰到java.lang.IllegalStateException就直接在页面上抛了一堆异常信息,没有正确转到errorpage

HTML code<error-page><exception-type>java.lang.Exception</exception-type><location>/errorPage.jsp</location></error-page>

谁碰到过或者知道这个?

------解决方案--------------------
<error-page>
<exception-type>java.lang.Exception</exception-type>
<location>/errorPage.jsp</location>
</error-page>


是由容器业处理异常,然后跳到指定的错误页面,切记,不要在业务代码中用try {}catch{}代码手动捕捉异常,
而是用throw抛出异常让容器来处理,否则就不能达到预定的效果。
  相关解决方案