Servlet 中使用 RequestDispatcher 来集中处理异常

[b]Servlet 中使用 RequestDispatcher 来集中处理异常[/b]

利用Servlet 的 RequestDispatcher 方法,可以将不同的异常封装在请求中,发给一个 Servlet 来统一处理,可以有效的避免代码重复,提高管理效率。

举例如下:

测试环境:JDK1.6.0_21 Tomcat6.0.29

第一步:创建一个产生异常的Servlet(DemoServlet)

package cn.test;

import java.io.IOException;

import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class DemoServlet extends HttpServlet {

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

try{
int a=100;
int b=0;
int c=a/b;

}catch(ArithmeticException ae){
request.setAttribute("servletException",ae);
request.setAttribute("servletExceptionUrl", request.getRequestURI());
RequestDispatcher rd = request.getRequestDispatcher("ExceptionHandlerServlet");
rd.forward(request, response);
}
}
}


第二步:建立一个处理异常的Servlet(ExceptionHandlerServlet)

package cn.test;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class ExceptionHandlerServlet extends HttpServlet {

@Override
protected void service(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {

response.setContentType("text/html;charset=GB2312");
PrintWriter out = response.getWriter();

out.println("<html><head><title>系统错误</title></head>");
out.println("<body>");
String uri = (String) request.getAttribute("servletExceptionUrl");
Object msg = request.getAttribute("servletException");
out.println("<p>错误位置:" + uri + "</p>");
out.println("<p>错误信息:[" + msg + "]</p>");
out.println("</body></html>");
out.close();
}
}


web.xml的配置信息:

 <servlet>
<description></description>
<display-name>DemoServlet</display-name>
<servlet-name>DemoServlet</servlet-name>
<servlet-class>cn.test.DemoServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>DemoServlet</servlet-name>
<url-pattern>/Demo</url-pattern>
</servlet-mapping>
<servlet>
<description></description>
<display-name>ExceptionHandlerServlet</display-name>
<servlet-name>ExceptionHandlerServlet</servlet-name>
<servlet-class>cn.test.ExceptionHandlerServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>ExceptionHandlerServlet</servlet-name>
<url-pattern>/ExceptionHandlerServlet</url-pattern>
</servlet-mapping>



网页显示如下信息:

[img]http://dl.iteye.com/upload/picture/pic/72864/aa604aa9-e858-341f-a639-7f7042282888.jpg[/img]

我们可以对这个Servlet进行统一的包装,使他成为一个中央错误页。还有一个好处就是报错是自定义的页面而不是Tomcat默认的页面,没有容器的相关信息。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值