因为是显示给浏览器的也就是说是由Servlet抛出给浏览器的,而且要具备通用性即任何异常信息都通过同一种途径来显示
具体思路如下:
- 在request域中设置attribute(Servlet.GLOBAL_ERROR_NAME, "错误信息");
- 然后通过forward转向到error.jsp(注:统一显示异常信息的页面)
- error.jsp是一个不完整的html(即没有head、body块只有alert函数以及history.back()方法,这样就会只显示警告框然后当点击的时候就退回到上一步操作了)
具体代码如下:
error.jsp
<%@page language="java" contentType="text/html; charset=GBK"%>
<%@ page import ="java.util.*, com.shengsiyuan.imis.util.*"%>
<%@ page import ="com.shengsiyuan.imis.util.*"%>
<link rel="stylesheet" href="style.css">
<body style="margin:0px" bgcolor="#D5E3E0">
<br>
<br>
<br>
<table width="100%" height="384" cellpadding="0" cellspacing="0" align="center">
<tr>
<td>
<img src="<%=request.getContextPath()%>/Images/loginbg_left.gif" width="100%" height="384"><br>
</td>
</tr>
</table>
<script type="text/javascript">
alert("<%= request.getAttribute(ServletString.GLOBAL_ERROR_NAME)%>");
history.back();
</script>
servlet中的部分代码:
try {
long newsCatalogNum = service.getNewsCatalogCount(id);
if (0 != newsCatalogNum) {
request.setAttribute(ServletString.GLOBAL_ERROR_NAME, "有子分类不能够删除!");
request.getRequestDispatcher("/error.jsp").forward(request, response);
return;
} else {
service.deleteNewsCatalogById(id);
response.sendRedirect("ListNewsCatalog?parentId=" + parentId + "&start=" + start + "&range=" + range);
}
} catch (ServiceException e) {
e.printStackTrace();
}