Servlet 中使用 RequestDispatcher 来集中处理异常
利用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>
网页显示如下信息:
我们可以对这个Servlet进行统一的包装,使他成为一个中央错误页。还有一个好处就是报错是自定义的页面而不是Tomcat默认的页面,没有容器的相关信息。
分享到:
相关推荐
javax.servlet.RequestDispatcher.class javax.servlet.Servlet.class javax.servlet.ServletException.class javax.servlet.ServletRequest.class javax.servlet.ServletResponse.class javax.servlet....
主要介绍了Servlet关于RequestDispatcher的原理详解,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
javax.servlet.RequestDispatcher javax.servlet.SingleThreadModel javax.servlet.ServletInputStream javax.servlet.ServletContextEvent javax.servlet.ServletOutputStream javax.servlet.ServletRequestEvent ...
通过使用这个对象,Servlet可以记录事件、得到资源并得到来自Servlet引擎的类(例如RequestDispatcher对象)。一个Servlet只能运行在一个Servlet环境中,但是不同的Servlet可以在Servlet引擎上有不同的视图。 如果...
forward(ServletRequest, ServletResponse) - Method in interface javax.servlet.RequestDispatcher Forwards a request from a servlet to another resource (servlet, JSP file, or HTML file) on the server. ...
◎ Servlet的基本介绍,以及Servlet的生命周期 ◎ Servlet的运行环境以及Servlet的体系结构 ◎ Servlet的配置与执行以及如何使用Web程序和Servlet进行交互 ◎ RequestDispatcher接口 ◎ 会话跟踪与应用程序事件
10.2.2 使用requestdispatcher来处理异常 346 10.3 小结 349 第11章 开发线程安全的servlet 350 11.1 多线程的servlet模型 350 11.2 线程安全的servlet 351 11.2.1 变量的线程安全 351 11.2.2 属性的线程安全 ...
在Servlet中使用RequestDispatcher的forward方法,要跳转到userlist.jsp,可以写: RequestDispatcher rd = request.getRequestDispatcher("userlist.jsp"); rd.forward(request,response); sendRedirect方式...
10.2.2 使用requestdispatcher来处理异常 346 10.3 小结 349 第11章 开发线程安全的servlet 350 11.1 多线程的servlet模型 350 11.2 线程安全的servlet 351 11.2.1 变量的线程安全 351 11.2.2 属性的线程安全 ...
10.2.2 使用requestdispatcher来处理异常 346 10.3 小结 349 第11章 开发线程安全的servlet 350 11.1 多线程的servlet模型 350 11.2 线程安全的servlet 351 11.2.1 变量的线程安全 351 11.2.2 属性的线程安全 ...
本文实例总结了jsp和servlet中实现页面跳转的方式。分享给大家供大家参考,具体如下: 假设要求从test1.jsp 跳转到test2.jsp 一. jsp中跳转: 1. 使用RequestDispatcher.forward方法转发 <% ...
10.2.2 使用requestdispatcher来处理异常 346 10.3 小结 349 第11章 开发线程安全的servlet 350 11.1 多线程的servlet模型 350 11.2 线程安全的servlet 351 11.2.1 变量的线程安全 351 11.2.2 属性的线程安全 ...
页面之间的跳转可以通过两种方式实现:forward和sendRedirect。...在Servlet中使用RequestDispatcher的forward方法,要跳转到userlist.jsp,可以写: 代码如下: RequestDispatcher rd = request.getRequestDispatcher
1.4 Servlet 与其他技术的比较 ........................................................................................................................14 1.5 与 Java 平台企业版的关系 ......................
* This class demonstrates how JDBC can be used within a servlet. It uses * initialization parameters (which come from the web.xml configuration file) * to create a single JDBC database connection, ...
import javax servlet RequestDispatcher; import javax servlet ServletException; import javax servlet ServletRequest; import javax servlet ServletResponse; import javax servlet http HttpServletRequest; ...
RequestDispatcher
5. 使用转发时,需要使用`RequestDispatcher`对象获取转发器,并使用`forward()`方法执行转发操作。 6. 根据具体的业务需求,选择适合的方式进行页面跳转,注意考虑URL路径是否需要变化。 *************************...
Servlet会话小例子
JavaWeb开发技术-RequestDispatcher对象.pptx