由于jsp终究是要转换为servlet的java文件,然后再编译为.class文件,最后才执行,那么在这过程的任何一个步骤都可能有问题,主要包括三个方面,下面逐一分析:
一、JSP转换为Servlet的java源码时
因为上面的这个jsp转java、再转class的过程是在运行期执行来做的,也就是客户第一次请求该jsp页面的时候做的,所以如果jsp页面中有语法错误,使得容器不知如何把jsp转换为servlet的java文件时,比如
<%@page contentType="html/text" buffer="16" %>
这里指定buffer的语法有误,应该包含单位,如果客户请求该页面,就会出现类似如下的错误,从异常信息可以定位到错误源码的位置。
初学者应该尽量选用具有jsp语法检查功能的开发工具来做开发。
二、将servlet源码编译为.class文件的时候
比如在jsp中使用了某个类,但是在部署服务器上忘了放该类的jar包了,这样在初次请求该jsp的时候,虽然该jsp可以转译完成,但是编译时会报错,比如在tomcat中会有类似于下面的错误提示,这个错误比较容易人, 使用tomcat的时候,如果出现unable to compile,就是编译期的错误。
三、Servlet载入容器进行服务的时候发生错误。
此时Servlet已经编译成功了,但是在运行时由于某种未捕获的异常,比如NullPointerException就是最常见的错误。
一般来说这种错误会在界面上表现为an exception occured processing jsp page。这种一般就是运行时错误。
四、错误处理
如果jsp页面不做处理,那么容器就会捕捉这些异常,让像上面这样显示出来。
如果我们想要针对某个页面,或者针对某个特殊类型的异常做处理,则可以在jsp页面和web.xml文件中做一些配置,下面仅给出两个例子,不想详细展开说》
1)指定页面发生错误时,转到另外一个错误处理页面 errorPage, isErrorPage配合使用
....
2)在web.xml文件中配置,指定异常发生时
3)指定html错误码发生时