您的位置:首页 > 编程语言 > Java开发

java堆栈信息打印

2014-05-10 10:05 337 查看
对于java堆栈信息的打印,对于我们调试代码解决问题是非常有帮助的。java的异常机制会让我们很快的找到错误的位置。例如我的问题如下所示。

启动tomcat出现如下问题:



这只是堆栈中打印出问题的一小部分,还有很多的Exception,那是从哪一个Exception看起呢?而对于每个Exception打印的堆栈信息又是如何打印的?

对于Exception,会从底层到上层抛出,比如我的项目中用的是spirngMVC spring SpringJAP(在Dao层),如果Dao层出现错误,打印堆栈信息是从SpringMVC controller一直到底层Dao层。

而对于每个Exception打印,是从底层到高层。例如我的A、B、C、D类,四个类,分别A调用B,B调用C的方法,C调用D的方法,并且D抛出异常到C,C到B,B到A,依次类推,直到A捕获异常。代码如下所示:

D类

public class D {
	public void eat() throws Exception{
		throw new Exception("这是D类的异常");
	}
	

}


C类

public class C {
	public void eatD() throws Exception{
		D d = new D();
		d.eat();
	}
}


B类

public class B {
	public void eatC() throws Exception{
		C c = new C();
		c.eatD();
	}
		
}


A类

public class A {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		B b = new B();
		try {
			b.eatC();
		} catch (Exception e) {
			e.printStackTrace();
		}

	}

}


这样我们运行A类,看到控制台打印的堆栈信息如下所示。



这很明显,我们可以看到对于Exception来说,打印堆栈信息时从底层到高层的。

java中的异常我们是写在try....catch中的catch块去处理的,底层一般采用抛出异常的方式,这样在界面层就能捕捉到异常,如果我们在界面层也没有对异常进行处理,那么异常就会交给jvm来处理。我们也可以采用声明式异常来简化。

我们可以根据不同的异常分类,来确定转向到不同的页面,我们在web.xml中配置如下:

<error-page>
		<exception-type>java.lang.Throwable</exception-type>
		<location>/WEB-INF/views/error/500.jsp</location>
	</error-page>
	<error-page>
		<exception-type>java.lang.IllegalAccessException</exception-type>
		<location>/WEB-INF/views/error/404.jsp</location>
	</error-page>
	<error-page>
		<error-code>500</error-code>
		<location>/WEB-INF/views/error/500.jsp</location>
	</error-page>
	<error-page>
		<error-code>404</error-code>
		<location>/WEB-INF/views/error/404.jsp</location>
	</error-page>


我们可以配置不同的异常类转到不同的页面,我们也可以配置错误号(error-code)。

能更好的利用工具和使用工具会提高我们的效率,好的习惯优于一切,学习的不是错误,学习的是别人解决问题的思路,素质和品质,改变吧。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: