论坛首页 入门技术论坛

设计DAO异常体系时,JSP错误页面隐含对象exception总是为空的问题?

浏览 2302 次
该帖已经被评为新手帖
作者 正文
   发表时间:2007-03-17  
DAO
之前在其它的项目中使用过这种方法一直好使,但这次不知道为啥会出现这种情况,眼看就要交作品了,这个问题还没解决:

第一步:
自定义了异常体系为:
-com.swc.se.exception
  +SeDAOException(继承自SeException)
    +SeException(继承自RuntimeException)

SeException:
public class SeException extends RuntimeException
{
public SeException(String message )
{
super(message);
}
}

SeDAOException:
public class SeDAOException extends SeException
{
  public SeDAOException(String message)
{
super(message);
}
}

第二步:

错误页面为:
error.jsp
<%@ page contentType="text/html;charset=gb2312" %>
<%@ page isErrorPage="true" %>
<html>
<head>
<title>错误信息!</title>
<meta http-equiv="content-type" content="text/html;charset=gb2312">
</head>
<body>
<center>
<h1>错误信息!</h1>
<br>
<table width="500">
<%
if(exception!=null)
{
%>
<tr>
<td colspan="2" class="warnning">
<%=exception.getMessage()%>
</td>
</tr>
<%
}
out.println("exception为null");
%>
<tr>
<td align="center" colspan="2">
&nbsp;<p>
<input type="button" name="register" value="返回" onclick="javascript:history.go(-1);">
</td>
</tr>
<tr>
<td align="right" colspan="2">
<img height="200" src="images/welcome.gif">
</td>
</tr>
</table>
</center>
</body>
</html>

第三步:
修改web.xml:
<?xml version="1.0" encoding="UTF-8"?>

<web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">

      <servlet>
<description>
</description>
<display-name>login</display-name>
<servlet-name>ConsumerLoginServlet</servlet-name>
<servlet-class>
com.swc.se.controller.ConsumerLoginServlet
</servlet-class>
</servlet>

<servlet-mapping>
<servlet-name>ConsumerLoginServlet</servlet-name>
<url-pattern>/ConsumerLoginServlet</url-pattern>
</servlet-mapping>
     
         ...


        <error-page>
<exception-type>
com.swc.se.exception.SeDAOException
</exception-type>
<location>/error.jsp</location>
</error-page>

</web-app>

最后一步:
Model层,代码中抛出由DAO层引起的自定义异常:
...
public void login(Consumer consumer){
IConsumerDAO consumerDAO=(IConsumerDAO)DaoFactory.getDao("consumerDAO");
if(!consumerDAO.verify(consumer)){
throw new SeDAOException("您输入的用户名跟密码不正确,请重新输入!");
}
}
...


但是这时候不知道为什么,error.jsp中的jsp隐含对象exception确实没有接收到Model层抛出的自定义异常:
if(!consumerDAO.verify(consumer)){
throw new SeDAOException("您输入的用户名跟密码不正确,请重新输入!");
}
这条语句已经执行了,但是
if(exception!=null)
{
%>
<tr>
<td colspan="2" class="warnning">
<%=exception.getMessage()%>
</td>
</tr>
<%
}
并没有进入到if(exception!=null)里面,所以exception为空的。。。。
目前还没有解决这个问题,实在是愁人啊。。。

   发表时间:2007-03-17  
问题解决了!
原来是这样的:
通过eclipse控制台启动tomcat时的信息:
......
2006-3-17 21:09:10 org.apache.catalina.core.ApplicationContext log
信息: Exception initializing TldLocationsCache: XML parsing error on file /WEB-INF/web.xml: (line 3, col 9): Document is invalid: no grammar found.
......
后来研究上面的异常信息,其实并不是因为web.xml的错误,而是因为与其同一个目录的lib(/ServiceEngine/WEB-INF/lib)里的部分jar包(比如说naming-factory.jar,naming-resources.jar等)与tomcat_home下的common/lib/下的jar包部分相同从而冲突了,导致了自定义异常体系不好使,这是个人的理解,不知道真正的原因是否是这样。。。
0 请登录后投票
论坛首页 入门技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics