JSP异常处理有以下两个步骤。
撰写一个JSP“错误页面”:异常处理文件中需要使用page指令的isErrorPage属性。
格式: <%@ page isErrorPage=“true”%>
如果在页面上进行了这样的设置,页面就具有了一项特殊的功能,能够访问异常对象exception。该对象是JSP的内置对象,当页面在运行过程中产生异常时,会抛出异常对象exception,该对象包含了异常信息。
<%=exception%>
exception.printStackTrace(new PrintWriter(out));
在JSP内指定异常发生时应该回应到哪个“错误页面”
要想让页面产生异常的时候,由专门的异常处理文件对异常进行处理,需要在该页面中使用page指令的errorPage指定专门的异常处理页面,
格式:<%@ page errorPage="异常处理文件"%>
要想为每种类型的异常指定一个异常处理文件,可以通过web.xml进行配置。
<error-page>
<exception-type>java.lang.NullPointerException<exception-type>
<location>/nullpointer.jsp</location>
</error-page>
也可在web.xml中根据异常编码进行配置
<error-page>
<error-code>401<error-code>
<location>/401.jsp</location>
</error-page>
JSP中文乱码的总结分析:
可能原因:
Servlet程序从请求消息中获取请求参数和从数据库、文件、键盘等外设中读取一个字符串时都要将底层的字节流转换成字符串,但转换过程中指定的字符集编码与外设所输入内容的字符集编码不一致。如果某个第三方API将底层设备中的字节流数据总是按ISO8859-1转换成字符串返回,那么,对于底层设备中的GB2312编码的中文字符来说,返回的将不是其正确的Unicode码,这时候可以通过如下语句来解决:
strNew = new String(strOld.getBytes("ISO8859-1"),"GB2312");
Servlet程序将字符串输出到浏览器、屏幕、文件和数据库时都要将字符串转换成底层的字节流,但转换过程中指定的字符集编码与外设所能显示的字符集编码不一致。
JSP引擎将JSP源文件翻译成Servlet源文件时,其选择的字符集编码与JSP源文件实际使用的字符集编码不一致。
JSP引擎编译由JSP源文件翻译成的Servlet 源文件时,其选择的字符集编码与Servlet 源文件的字符集编码不一致。
诊断方法:
使用System.out.println语句在命令行窗口中打印出现乱码的字符串
跟踪某个中文字符在JSP页面运行过程中的每个阶段的编码值