决心好好把Web页面的报错机制搞清楚
1. web应用的错误页面
web.xml中可以设置error-page, 其中这个标记可以有这样的子标签
error-code,exception-type:HTTP错误码,或者异常信息的类型
exception-type指定的必须是一个Throwable,并且这个类在容器的类路径下能够被找到
location:错误页面的位置
<!ELEMENT error-page ((error-code | exception-type), location)>
<!ELEMENT exception-type (#PCDATA)>
<!ELEMENT error-code (#PCDATA)>
那么在错误页面我们可以拿到什么信息呢?
首先,在这个页面,我们可以知道出现了什么异常,这个有error-page的配置决定
2. 在JSP页面指定错误页面
exception-type指定的必须是一个Throwable,并且这个类在容器的类路径下能够被找到
容器会为错误页面提供一个exception对象,不过要想在错误页面里访问这个对象,
必须在错误页面里指定isErrorPage属性:
error.jsp
<%@ page isErrorPage="true" %>
然后,在scriptlet中就可以使用隐式对象exception,在EL中可以使用EL隐式对象${pageContext.exception}。
3.stuts中设置错误页面(版本1.2.4)
在struts-config.xml的global-exceptions标签中可以设置
<exception key="all.excption" path="/jsp/error/errorAll.jsp" type="java.lang.Exception"/>
dtd
<!ELEMENT global-exceptions (exception*)>
<!ATTLIST global-exceptions id ID #IMPLIED>
<!ELEMENT exception (icon?, display-name?, description?, set-property*)>
<!ATTLIST exception id ID #IMPLIED>
<!ATTLIST exception bundle %AttributeName; #IMPLIED>
<!ATTLIST exception className %ClassName; #IMPLIED>
<!ATTLIST exception handler %ClassName; #IMPLIED>
<!ATTLIST exception key CDATA #REQUIRED>
<!ATTLIST exception path %RequestPath; #IMPLIED>
<!ATTLIST exception scope CDATA #IMPLIED>
<!ATTLIST exception type %ClassName; #REQUIRED>
bundle Servlet context attribute for the message resources bundle
associated with this handler. The default attribute is the
value specified by the string constant declared at
Globals.MESSAGES_KEY.
[org.apache.struts.Globals.MESSAGES_KEY]
className The configuration bean for this ExceptionHandler object.
If specified, className must be a subclass of the default
configuration bean
["org.apache.struts.config.ExceptionConfig"]
handler Fully qualified Java class name for this exception handler.
["org.apache.struts.action.ExceptionHandler"]
key The key to use with this handler's message resource bundle
that will retrieve the error message template for this
exception.
path The module-relative URI to the resource that will complete
the request/response if this exception occurs.
scope The context ("request" or "session") that is used to access
the ActionError object [org.apache.struts.action.ActionError]
for this exception.
type Fully qualified Java class name of the exception type to
register with this handler.
这里注意几点
1.机制
映射异常和错误页面,struts找到异常对应的配置后,按照配置,根据key找到resource_bundle,
然后转到错误页面,错误页面应该使用<html:errors/>标记将错误信息显示出来
2.key是用于找到resource bundle对应信息的关键字,由于这里规定死了,所以要显示一种错误信息就要配置一个
3.resource bundle的配置
<message-resources parameter="resources.MessageResources"/>
这里,bundle文件应放置在WEB-INF/classes/resource/目录,
并且名称类似于MessageResources_zh_CN.properties
4.在action中也可以设置exception
参考
1.隔叶黄莺 《JSP的errorPage 指令异常转向错误页的实现机制及应用》 http://www.blogjava.net/Unmi/archive/2008/05/17/200963.html
2.孙卫琴 《精通Struts:基于MVC的Java Web设计与开发》