跟我学《Web组件与框架开发技术》深入掌握J2EE JSP Web应用系统中的异常处理技术及应用示例.docx
- 文档编号:7254042
- 上传时间:2023-05-11
- 格式:DOCX
- 页数:17
- 大小:851.90KB
跟我学《Web组件与框架开发技术》深入掌握J2EE JSP Web应用系统中的异常处理技术及应用示例.docx
《跟我学《Web组件与框架开发技术》深入掌握J2EE JSP Web应用系统中的异常处理技术及应用示例.docx》由会员分享,可在线阅读,更多相关《跟我学《Web组件与框架开发技术》深入掌握J2EE JSP Web应用系统中的异常处理技术及应用示例.docx(17页珍藏版)》请在冰点文库上搜索。
跟我学《Web组件与框架开发技术》深入掌握J2EEJSPWeb应用系统中的异常处理技术及应用示例
跟我学《Web组件与框架开发技术》——深入掌握J2EEJSPWeb应用系统中的异常处理技术及应用示例
1.1J2EEJSPWeb应用系统中的异常处理技术
1.1.1JSPWeb页面中的exception异常信息对象及应用
1、exception对象包装JSP文件在执行时所有发生的异常错误信息
(1)如何正确地处理Web应用系统中所有发生的异常错误
软件应用系统在运行过程中出现各种形式的错误是不避免的,在Web应用系统开发实现的过程中,也应该要正确地处理应用系统中的各种异常错误以提高应用系统的可靠性。
但如何正确地进行处理?
开发人员应该要遵守哪些基本的原则?
(2)JSPWeb页面中的exception异常信息对象
exception对象是java.lang.Exception类的对象实例,包装JSP文件中的脚本代码在执行时所有发生的异常错误信息。
但此时需要在JSP页面中应用page指令、并设置它的isErrorPage属性值为true(如下为代码示例:
<%@pageisErrorPage="true"%>),JSP引擎才会在该JSP页面中创建出exception对象。
2、exception对象中主要的功能方法及功能说明
exception对象中主要的功能方法其实也就是java.lang.Exception异常类中的成员方法。
如下为exception对象中主要的方法及功能说明:
1)getMessage():
返回异常错误信息。
2)printStackTrace():
以标准错误的形式输出一个错误和错误的堆栈。
3)toString():
以字符串的形式返回异常信息。
3、exception内置对象的应用示例
在客户关系信息系统项目的站点根目录下的errorDeal子目录内再添加一个显示各个JSP页面在执行过程中所可能抛出的异常信息的JSP页面文件showSystemError.jsp,在该页面中添加如下的page指令设置:
<%@pageisErrorPage="true"%>(如下示例中黑体所标识的标签语句),将该页面设置为异常错误信息显示的页面,以便能够使用内置的exception对象。
如下为说明exception内置对象的应用示例,并注意其中的黑体所标注的代码:
<%@pagepageEncoding="GB18030"%>
<%@pageisErrorPage="true"%>
<%out.print("错误信息如下:
"+exception.getMessage());%>
StackTraceis:
<%
java.io.CharArrayWritercw=newjava.io.CharArrayWriter();
java.io.PrintWriterpw=newjava.io.PrintWriter(cw,true);
exception.printStackTrace(pw);
out.println(cw.toString());
%>
然后在客户关系信息系统项目中的各个功能页面中利用page指令设置错误页面文件为showSystemError.jsp,如下示例图为项目中的responseUserLogin.jsp页面示图。
示例代码如下:
<%@pageerrorPage="/errorDeal/showSystemError.jsp"%>
在某个功能页面(如上示例图所示的responseUserLogin.jsp页面)中添加如图所示的语句,该语句被零除而故意产生出异常错误。
再执行客户关系信息系统项目中的用户登录功能页面,将出现如下示例图所示的错误状态和抛出异常错误信息。
注意在上面的示例图中的浏览器URL地址栏中的目标JSP文件仍然为responseUserLogin.jsp页面,但所显示的错误信息却是由showSystemError.jsp页面输出的信息,表明Servlet容器实现此功能时是采用请求转发形式实现的。
另外,由于在上面示例代码中实现了在浏览器窗口中打印输出详细的异常跟踪信息的功能。
因此,在上面的示例图中能够看到具体出现错误的语句行号,为错误定位和排除提供了参考信息。
1.1.2J2EEJSPWeb应用系统中的异常处理技术及应用
1、Web应用中异常处理的基本原则
软件应用系统在运行过程中出现各种形式的错误是不避免的,在Java语言中提供有功能强大的异常处理的支持。
并且分别针对系统级异常(与应用系统中的业务逻辑无关的系统平台程序所产生的错误)和应用级异常(由于用户违背了商业业务逻辑而导致的异常错误,这种错误一般不是致命的错误)都提供有对应的技术支持。
在Web应用系统开发实现过程中,也应该要正确地处理系统中的各种异常。
一般应该要遵守如下的基本原则。
首先,要注意不要让用户看到原始的Java异常信息,而应该要将原始的系统抛出的异常信息转换或者翻译为中文。
因为,原始的Java异常信息一般都是英文描述,而且其中也会出现大量的专业术语。
应用系统的普通用户并不能准确地理解这些错误信息的真正含义,如下图所示的为Http404类型错误信息所示。
而如下图所示的为Http505类型错误信息所示。
其次,可以将原始的Java异常信息记录到日志文件中有助于以后系统在维护和功能扩展时的错误定位。
尽管原始的Java异常信息对于普通的用户来说没有什么实际的意义,但对于应用系统的开发者来者却有用,开发人员可以借助这些专业的信息理解错误所在和了解出现错误的主要原因。
在如下所示的示例中应用Java语言中的日志API记录系统中的原始异常信息,并将原始的异常信息再翻译和转换为更容易理解的信息向上层的调用程序返送。
如下为利用日志技术保存原始的Java异常信息的代码示例:
packagecom.bluedream.webcrm.dao.imple;
importcom.bluedream.webcrm.exception.WebCRMException;
importjava.util.logging.Level;
importjava.util.logging.Logger;
publicclassMySQLConnectDBBeanimplementsConnectDBInterface{
StringJDBC_DBDriver_ClassName="com.mysql.jdbc.Driver";
privateLoggerlogger=Logger.getLogger(this.getClass().getName());
publicMySQLConnectDBBean()throwsWebCRMException{
try{
Class.forName(JDBC_DBDriver_ClassName);
}catch(ClassNotFoundExceptione){
logger.log(Level.INFO,e.getMessage());
thrownewWebCRMException("不能正确地加载JDBC驱动程序");
}
}
//其他的功能代码在此省略
}
最后,在控制层或者表现层的组件中捕获用户自定义的异常,并转发到错误信息显示页面中显示错误信息,如下示例图所示为执行的结果。
2、Web应用系统中的错误信息显示的基本要求
(1)不能应用System.out.println()方法输出错误信息
在JSP页面中的错误信息的处理方法类同于Java程序中的异常错误信息的处理方法,只是应该将输出的错误信息发送到浏览器窗口中显示输出,如前面示例中的示例所示;而不是发送到服务器主机的系统控制台中,也就是不应该再使用System.out.println()方法输出错误信息。
如下示例为应用System.out.println()方法输出错误信息,但只能在运行环境的系统控制台中显示,而不能将错误信息发送到客户端所能够预览的信息窗口中。
因此,不利于应用系统的使用者及时了解所出现的错误信息:
如下的程序代码示例为将输出的错误信息发送到浏览器窗口中显示输出的相关的程序示例:
<%@pagecontentType="text/html;charset=GB2312"%>
<%@pagelanguage="java"%>
<%@pageimport="java.io.*"%>
<%
inta=10,b=0,c;
try{
c=a/b;//在这里人为的方式产生除以零的错误
}
catch(Exceptione){
out.println(e.toString());
}
finally{
out.println("
这里产生了除以零的错误");
}
%>
如下的示例图为程序代码示例执行的结果局部截图:
(2)在分层系统实现中,下层系统向上层系统报告异常错误时,通常采用抛出自定义异常的方式实现
(3)设计自定义的异常以统一系统中不同的异常类型
为什么要抛出自定义的异常?
有利于下层的代码移植,如将DAO中的JDBC异常改变为基于Hibernate框架的异常。
(4)设计自定义异常时,一般都让自定义的异常直接继承RuntimeException,从而使得上层的系统代码不必进行与异常相关的try...catch处理,也就是使得上层程序代码不必依赖于下层的程序代码实现。
(5)在控制层组件中捕获用户自定义的异常
(6)在表示层组件中处理未捕获的异常类型
而如下示例图为显示异常信息的页面showSystemError.jsp文件所在的目录路径及定位示例截图:
而在显示异常信息的页面showSystemError.jsp文件中通过使用exception对象捕获所抛出的异常信息,然后在目标页面中显示输出。
但需要在showSystemError.jsp页面中添加<%@pageisErrorPage="true"%>。
如果除掉<%@pageisErrorPage="true"%>,此时该页面为正常的页面——不再为错误处理页面:
3、在J2EEJSPWeb应用系统中异常处理的方式
(1)采用编程方式在程序中直接进行异常处理
对于系统在运行过程中所可能抛出的异常,可以在程序中直接应用try/catch语句块捕获异常;然后定制出个性化的比较详细的错误信息,并保存到request请求对象中。
最后在特定的页面中把错误信息反馈给用户并在错误信息显示页中显示输出。
采用编程方式在程序中直接进行异常处理,可以达到“灵活”的目的,对于异常的处理,主要是采用try/catch语句捕获异常,然后再定制出个性化的比较详细的错误信息。
(2)以配置的方式处理异常
在J2EEWeb技术规范中定义了可配置形式的异常错误显示的支持,不同的应用服务器都对此规范提供了技术实现的支持。
而且可以指定错误编码或者异常的具体类型,但可配置的异常处理方式一般只应用于特定类型的异常错误处理。
4、以配置的方式进行J2EEJSPWeb应用系统中异常处理的示例
在客户关系信息系统项目站点根目录下的errorDeal子目录内再添加一个显示指定错误编码形式的错误信息的JSP页面文件showIECodeError.jsp,该页面的内容如下程序代码示例所示。
在该示例页面中设计了一个表格,在其中显示指定的错误信息(黑体所标识的标签)。
如下为showIECodeError.jsp页面文件中的代码示例:
<%@pagepageEncoding="GB18030"%>
您的系统出现了404或者500等类型的错误!
在系统的部署描述文件web.xml中进行配置定义,针对每个错误类型添加一个
在该示例中,分别针对Http状态码404、500和505所代表的错误以配置的方式进行异常处理,并指明显示异常错误信息的JSP页面(本示例为showIECodeError.jsp文件)。
如下为在部署描述文件web.xml中以配置的方式进行异常处理的示例:
在web.xml文件中,不仅可以指定Http状态码所对应的错误信息,而且也可以针对指定异常类型配置出错误信息显示的JSP页面中。
在如下的程序代码示例标签中,为ArithmeticException算术异常和NullPointerException空指针异常指定错误信息页面。
如下为针对指定异常类型配置出错误信息显示的JSP页面示例代码:
MyEclipse工具也提供有对web.xml文件可视化编辑修改的支持,如下示例图所示。
然后再测试以配置的方式进行异常处理的效果,如下示例图中的代码示例为人为地产生出异常错误:
针对如上面所示的产生错误的程序代码示例结果在执行后,未在web.xml文件中加以配置定义之前,会出现如下示例图所示的Http状态码500的错误。
而添加前面的标签之后,不再出现上面的错误页面,而是显示指定的错误信息的显示页面:
而添加下面的异常类型定义后的结果页面:
java.lang.NullPointerException
/errorInfo/showRuntimeExceptionInfo.jsp
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Web组件与框架开发技术 跟我学Web组件与框架开发技术深入掌握J2EE JSP Web应用系统中的异常处理技术及
链接地址:https://www.bingdoc.com/p-7254042.html