`

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默认的页面,没有容器的相关信息。



分享到:
评论

相关推荐

    Servlet API中文文档

    Servlet API中文文档是Java Web开发中的重要参考资料,它详尽地解释了Servlet技术的各种接口、类和方法,为开发者提供了全面的理解和使用指南。Servlet API是J2EE平台的一部分,主要用于构建动态Web应用程序,它是...

    servlet的项目练习.zip

    Servlet应用中,可以使用`@WebExceptionHandler`注解来处理全局异常,或者在特定Servlet中捕获并处理异常。 10. **部署与调试**:最后,我们需要知道如何将项目打包成WAR文件,部署到Tomcat或其他Servlet容器中,并...

    servlet 中文帮助文档

    - **服务**:每当有新的请求到达,Servlet容器(如Tomcat)会创建一个`service()`方法的线程来处理请求。 - **销毁**:当Servlet不再需要或服务器关闭时,调用`destroy()`方法进行清理工作。 2. **Servlet接口和...

    servlet中文帮助文档CHM格式

    Servlet是Java Web开发中的核心组件,它用于扩展服务器的功能,处理来自客户端(通常是Web浏览器)的请求,并向客户端发送响应。这个"Servlet中文帮助文档CHM格式"提供了一个全面的指南,帮助开发者理解和掌握...

    Servlet+API+中文+手册

    最后,Servlet 3.0引入了注解驱动的Servlet配置,开发者可以直接在Servlet类上使用`@WebServlet`注解来声明Servlet,而不是在web.xml中配置。 总的来说,"Servlet API 中文手册"将涵盖以上所有内容,并可能包括更多...

    Servlet关于RequestDispatcher的原理详解

    Servlet关于RequestDispatcher的原理详解 RequestDispatcher是Servlet中的一种机制,可以将请求从...RequestDispatcher是Servlet中的一种强大机制,可以帮助我们更好地处理请求和响应,提高应用程序的性能和可扩展性。

    实验四 JavaBean及Servlet使用

    在这个实验中,学生将学习如何使用JavaBean封装数据,通过Servlet处理HTTP请求,以及DAO模式在数据库操作中的应用。此外,还将了解JavaScript客户端验证、JSP表达式和请求转发等Web开发技术。通过实践,学生能够更...

    基于servlet 的考勤管理系统

    4. **转发与重定向**:在处理请求时,Servlet可以使用`RequestDispatcher`进行请求转发,或者使用`response.sendRedirect()`进行重定向,这两种方式在控制流程上有所不同。 5. **会话管理**:考勤管理系统可能涉及...

    Servlet2.4 api 帮助文档

    在Java Web应用中,Servlet常与JSP(JavaServer Pages)结合使用,Servlet处理业务逻辑,JSP负责展示视图。通过RequestDispatcher,Servlet可以将请求转发到JSP页面,实现动态内容的生成。 九、异常处理 Servlet ...

    基于Mybatis/servlet的简单CRUD

    2. **转发和重定向**:Servlet可以使用RequestDispatcher进行请求转发或者响应重定向,控制流程跳转到不同的JSP页面。 3. **请求参数处理**:从HttpServletRequest对象中获取请求参数,传递给业务逻辑层进行处理。 ...

    使用servlet,jdbc将mysql中数据显示在jsp页面中

    6. **转发到JSP页面**:使用Servlet的`RequestDispatcher`的`forward()`方法,将请求转发到JSP页面。在转发时,可以将之前获取的数据库数据作为请求属性,以便JSP页面可以访问。 7. **在JSP页面上显示数据**:在JSP...

    Java_Servlet教程(繁体)

    在Servlet中,可以使用RequestDispatcher的forward()方法将请求转发到另一个资源,或者使用Response.sendRedirect()方法进行重定向。转发在服务器端完成,而重定向则是在客户端完成。 六、Servlet过滤器 除了...

    servlet代码+说明文档

    在Servlet中,不要使用静态变量存储请求相关的数据,除非已经做好了同步控制。 5. **Servlet的转发和重定向**:Servlet可以通过RequestDispatcher的forward()方法将请求转发到其他资源,或者通过...

    servlet中实现请求转发,用户登录

    总结起来,Servlet中的请求转发是通过`RequestDispatcher`实现的一种服务器内部资源之间的传递,常用于构建Web应用的导航逻辑。在用户登录场景中,我们首先验证用户提供的凭据,然后根据验证结果决定是展示登录成功...

    servlet练习代码

    4. **转发与重定向**:在Servlet中,可以使用`RequestDispatcher`对象的`forward()`方法将请求转发到其他资源,或者使用`Response.sendRedirect()`方法重定向用户到新的URL。 5. **MVC模式**:Servlet常与Model-...

    servlet 笔记

    在Servlet中,处理客户端请求主要涉及到以下几种方法: - **doGet()**:处理GET请求。 - **doPost()**:处理POST请求。 - **doPut()**:处理PUT请求。 - **doDelete()**:处理DELETE请求。 #### 六、数据传递 在...

    韩顺平servlet部分的源码文件

    7. **多线程安全**:由于Servlet是多线程的,所以需要特别注意线程安全问题,避免在Servlet中使用非线程安全的数据结构或方法。 8. **Filter和Listener**:Servlet还常常配合Filter和Listener使用,Filter可以用来...

    Servlet 课件

    7. 异常处理:如何在Servlet中捕获和处理异常,以及使用error-page元素在web.xml中配置错误页面。 8. JSP与Servlet的关系:JSP是动态网页技术,它最终会被转换成Servlet。课件可能解释如何在JSP中使用脚本元素、...

    韩顺平servlet 第4、5讲 事例代码

    9. **异常处理**:课程可能涵盖了如何使用`throws ServletException, IOException`来处理Servlet中的异常,以及自定义错误页面。 10. **实战演练**:"myWebSite"这个文件可能是实际创建的Web项目,包含Servlet的源...

    servlet.jar包

    当你在浏览器中访问一个Web应用时,请求会被发送到Web服务器,服务器上的Servlet容器(如Tomcat、Jetty等)会识别出请求并调用相应的Servlet来处理。Servlet通过实现javax.servlet.Servlet接口或其子接口,如javax....

Global site tag (gtag.js) - Google Analytics