在JSP中声明出错页面

【前言】为了web安全改造做点前期准备,界面错误统一定向到一个error.jsp上,不能出现tomcat的版本号。

 

【原文】http://www.51cto.com/art/200704/46521.htm

 

由于JSP文件被编译成Servlet执行,出现异常的默认操作就是显示异常的堆栈。JSP页面提供了重写这个默认行为的功能,并且将异常处理转到另一个文件中:

 

<%@ page errorPage="error.jsp"%>

 

这样在这个JSP页面中,如果遇到任何未捕获到的Throwable对象,那么就会显示指定的出错页面error.jsp上。

 

下面我们来看一个具体的例子。首先我们开发一个会出错的页面,如:会出错的页面(mustBeError.jsp)

 

 

 

从代码可以看出,这个页面必定会出错误。在这个页面的page指令中,通过errorPage="error.jsp"指定出错时的错误处理页面。

 

我们来看错误处理页面的具体代码,如错误处理页面(error.jsp)

 

 

在error.jsp中,首先在page指令中指定:

 

isErrorPage="true"

 

这是非常关键的地方,只有这样指定,这个页面才能进行错误处理,才能使用exception对象。

exception对象有几个非常重要的方法,用于获得出错的信息,这些方法如下:

 

 <%=exception.getMessage()%>
 <%=exception.getLocalizedMessage()%>
 <% exception.printStackTrace(PrintWriter);%>

 

最后一个方法用于打印错误堆栈。如果需要在错误页面以外使用这个exception对象,那么可以这样把exception对象保存起来:

session.setAttribute("myError",exception);

在另一个页面使用:

Exception exception=( Exception )session.getAttribute("myError");

把这个异常对象引入进来。

 

 

在浏览器里输入:http://127.0.0.1:8080/mustBeError.jsp。由于这个页面必定产生运行时异常,它将自动调用http://127.0.0.1:8080/error.jsp页面。

 

以上是JSP页面内部出现错误的处理情况。如果异常在JavaBean中产生,那么将怎么办呢?具体的方法是在JavaBean中把异常抛出到JSP页面,如果JSP页面没有捕获这个异常,那么也到错误页面中处理。我们再来看一个例子,假设有一个JavaBean,用于计算两个整数的和,代码如:

 

 

可能在Integer.parseInt方法中出现异常。当出现这个异常时,就把这个异常抛出到JSP页面。我们看在JSP页面中怎么使用这个类,并且怎么处理异常,

 

 

从代码可以看出,在这个页面中没有捕获JavaBean中产生的异常,这样就会自动调用错误处理页面。

 

在浏览器里输入http://127.0.0.1:8080/add.jsp?x=12&y=112将会运行正常。在表单中填写以下的值:

x=12,y=sdkjf

那么必定产生运行异常,这个异常将在error.jsp中进行处理。

 

当输入以上的值提交后,将在error.jsp中捕获到NumberFormatException。

 

 

我们进一步把以上的实践升华一下,总结出一句话:JSP错误处理本质就是在不同的页面或者类中传递异常,并且在目标页面处理异常。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章