`

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

阅读更多
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.jar下载

    javax.servlet.RequestDispatcher.class javax.servlet.Servlet.class javax.servlet.ServletException.class javax.servlet.ServletRequest.class javax.servlet.ServletResponse.class javax.servlet....

    Servlet关于RequestDispatcher的原理详解

    主要介绍了Servlet关于RequestDispatcher的原理详解,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

    servlet-api-2.4.jar.zip

    javax.servlet.RequestDispatcher javax.servlet.SingleThreadModel javax.servlet.ServletInputStream javax.servlet.ServletContextEvent javax.servlet.ServletOutputStream javax.servlet.ServletRequestEvent ...

    java-servlet-api.doc

    通过使用这个对象,Servlet可以记录事件、得到资源并得到来自Servlet引擎的类(例如RequestDispatcher对象)。一个Servlet只能运行在一个Servlet环境中,但是不同的Servlet可以在Servlet引擎上有不同的视图。 如果...

    servlet2.4doc

    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的体系结构 ◎ Servlet的配置与执行以及如何使用Web程序和Servlet进行交互 ◎ RequestDispatcher接口 ◎ 会话跟踪与应用程序事件

    JAVA WEB 开发详解:XML+XSLT+SERVLET+JSP 深入剖析与实例应用.part2

    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中使用RequestDispatcher的forward方法,要跳转到userlist.jsp,可以写: RequestDispatcher rd = request.getRequestDispatcher("userlist.jsp"); rd.forward(request,response); sendRedirect方式...

    JAVA WEB 开发详解:XML+XSLT+SERVLET+JSP 深入剖析与实例应用.part3

    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 属性的线程安全 ...

    JAVA WEB 开发详解:XML+XSLT+SERVLET+JSP 深入剖析与实例应用.part4

    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中实现页面跳转的方式实例总结

    本文实例总结了jsp和servlet中实现页面跳转的方式。分享给大家供大家参考,具体如下: 假设要求从test1.jsp 跳转到test2.jsp 一. jsp中跳转: 1. 使用RequestDispatcher.forward方法转发 &lt;&#37; ...

    JAVA WEB 开发详解:XML+XSLT+SERVLET+JSP 深入剖析与实例应用.part5

    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中页面之间的跳转forward与sendRedirect的区别

    页面之间的跳转可以通过两种方式实现:forward和sendRedirect。...在Servlet中使用RequestDispatcher的forward方法,要跳转到userlist.jsp,可以写: 代码如下: RequestDispatcher rd = request.getRequestDispatcher

    Java™ Servlet 规范.

    1.4 Servlet 与其他技术的比较 ........................................................................................................................14 1.5 与 Java 平台企业版的关系 ......................

    Servlet查询数据库案例--Query(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

    RequestDispatcher

    C-ATM.zip jsp+servlet 项目【练手/总结/巩固】

    5. 使用转发时,需要使用`RequestDispatcher`对象获取转发器,并使用`forward()`方法执行转发操作。 6. 根据具体的业务需求,选择适合的方式进行页面跳转,注意考虑URL路径是否需要变化。 *************************...

    Servlet会话小例子

    Servlet会话小例子

    JavaWeb开发技术-RequestDispatcher对象.pptx

    JavaWeb开发技术-RequestDispatcher对象.pptx

Global site tag (gtag.js) - Google Analytics