在Web应用中基本上所有的异常都可以通过Java中基本的异常处理机制来完成。但是在Web应用中有一些特殊的地方,JSP和Servlet是容器来调用的,它们在调用过程中也可能会产生异常,如果我们不对这些异常进行处理,用户将看到系统的异常堆栈信息,对用户来说是不友好的,并且会使用户对系统失去信心,但是这些异常我们不能使用try…catch来处理,但是Web应用提供了相应的机制。
JSP文件在运行的时候系统会使用try…catch来处理页面产生的异常,如果产生异常,系统会抛出一个异常对象exception,这就是JSP提供的几个内部对象之一,这个异常对象我们必须编写异常处理文件来接收这个异常对象,然后对异常进行处理。但是异常处理文件和产生异常的文件不会自动关联,需要我们来处理。
这些比较特殊的异常主要是通过配置来完成的。有两种类型:为某个网页指定异常处理文件;为某种类型的异常指定异常处理文件。
为某个网页指定异常处理的文件
这种方式需要为每个需要进行异常处理的文件指定异常处理文件,这样当文件在运行过程中产生异常了,就会调用异常处理文件对异常进行处理,用户就看不到系统出现的错误堆栈信息,可以通过异常处理文件给用户比较友好的提示。
编写异常处理文件
通过page标签的isErrorPage属性来设置某一个页面为异常处理页面,假设error.jsp为异常处理文件,则error.jsp文件中应该有这样一句话标记该文件为异常处理文件:
<%@ page isErrorPage=”true” %>
只有设置了这个属性的文件才是异常处理文件,才能够访问exception中的信息。访问exception中的异常信息可以通过下面的几个方法:
toString(),把异常信息转换成字符串。
getMessage(),获取异常信息,同样是以字符串的形式返回。
printStackTrace(),使用标准输出流输出异常信息。
为页面指定异常处理文件
如果希望error.jsp能够对当前文件的异常进行处理,需要通过errorPage指定error.jsp文件为异常处理文件,在该文件的上面增加这样一行代码:
<%@ page errorPage=”error.jsp”%>
这样在页面执行过程中,如果产生的异常没有处理,这个异常会抛给容器,然后容器根据所配置的errorPage属性查找到error.jsp,调用error.jsp。
为某种类型的异常指定异常处理文件
前面的方式是为每个文件指定异常处理文件,这样需要在每个文件中进行设置,不方便,另外有些异常是不能通过这种方式处理的,例如用户在客户端输入了一个不存在的网页,通常会报下面的错误:
404错误(图片)
这个错误就是系统在找不对请求文件的时候报的错,不管在什么文件中都无法设置。另外一种方式就是设置统一的异常处理文件,为不同类型的异常设置异常处理文件,这个设置需要在web.xml中设置。
把异常信息显示给用户
系统在处理的过程中可能会产生各种不同类型的异常,用户输入的信息不合法,用户的请求在执行过程中产生异常了,这些信息应该让用户知道,否则用户根据不清楚自己请求的处理是否成功,对用户来说是不友好的。异常信息是我们在处理过程中产生的,但是给用户显示异常信息的是JSP文件,怎样把异常信息显示给用户呢?我们前面介绍过信息页面之间的信息共享,可以采用这种方式,先把信息保存在request对象中,然后在JSP页面中提取信息并显示出来。
异常信息的传递
把异常信息显示给管理员
通常与用户相关的异常信息可以通过页面返回给用户,但是有时候异常是因为系统的原因,这时候应该让管理员知道异常信息,而不是让用户知道异常信息,例如系统的数据库连接不上,这样的错误应该通过管理员,而不是让用户知道数据库有问题,可以告诉用户系统正在维护。
因为管理员可能不能一直在服务器面前,所以通常需要使用日志的方法把异常记录到日志文件中,然后管理员通过察看日志文件去察看异常信息。
JSP文件在运行的时候系统会使用try…catch来处理页面产生的异常,如果产生异常,系统会抛出一个异常对象exception,这就是JSP提供的几个内部对象之一,这个异常对象我们必须编写异常处理文件来接收这个异常对象,然后对异常进行处理。但是异常处理文件和产生异常的文件不会自动关联,需要我们来处理。
这些比较特殊的异常主要是通过配置来完成的。有两种类型:为某个网页指定异常处理文件;为某种类型的异常指定异常处理文件。
为某个网页指定异常处理的文件
这种方式需要为每个需要进行异常处理的文件指定异常处理文件,这样当文件在运行过程中产生异常了,就会调用异常处理文件对异常进行处理,用户就看不到系统出现的错误堆栈信息,可以通过异常处理文件给用户比较友好的提示。
编写异常处理文件
通过page标签的isErrorPage属性来设置某一个页面为异常处理页面,假设error.jsp为异常处理文件,则error.jsp文件中应该有这样一句话标记该文件为异常处理文件:
<%@ page isErrorPage=”true” %>
只有设置了这个属性的文件才是异常处理文件,才能够访问exception中的信息。访问exception中的异常信息可以通过下面的几个方法:
toString(),把异常信息转换成字符串。
getMessage(),获取异常信息,同样是以字符串的形式返回。
printStackTrace(),使用标准输出流输出异常信息。
为页面指定异常处理文件
如果希望error.jsp能够对当前文件的异常进行处理,需要通过errorPage指定error.jsp文件为异常处理文件,在该文件的上面增加这样一行代码:
<%@ page errorPage=”error.jsp”%>
这样在页面执行过程中,如果产生的异常没有处理,这个异常会抛给容器,然后容器根据所配置的errorPage属性查找到error.jsp,调用error.jsp。
为某种类型的异常指定异常处理文件
前面的方式是为每个文件指定异常处理文件,这样需要在每个文件中进行设置,不方便,另外有些异常是不能通过这种方式处理的,例如用户在客户端输入了一个不存在的网页,通常会报下面的错误:
404错误(图片)
这个错误就是系统在找不对请求文件的时候报的错,不管在什么文件中都无法设置。另外一种方式就是设置统一的异常处理文件,为不同类型的异常设置异常处理文件,这个设置需要在web.xml中设置。
把异常信息显示给用户
系统在处理的过程中可能会产生各种不同类型的异常,用户输入的信息不合法,用户的请求在执行过程中产生异常了,这些信息应该让用户知道,否则用户根据不清楚自己请求的处理是否成功,对用户来说是不友好的。异常信息是我们在处理过程中产生的,但是给用户显示异常信息的是JSP文件,怎样把异常信息显示给用户呢?我们前面介绍过信息页面之间的信息共享,可以采用这种方式,先把信息保存在request对象中,然后在JSP页面中提取信息并显示出来。
异常信息的传递
把异常信息显示给管理员
通常与用户相关的异常信息可以通过页面返回给用户,但是有时候异常是因为系统的原因,这时候应该让管理员知道异常信息,而不是让用户知道异常信息,例如系统的数据库连接不上,这样的错误应该通过管理员,而不是让用户知道数据库有问题,可以告诉用户系统正在维护。
因为管理员可能不能一直在服务器面前,所以通常需要使用日志的方法把异常记录到日志文件中,然后管理员通过察看日志文件去察看异常信息。