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中文文档是Java Web开发中的重要参考资料,它详尽地解释了Servlet技术的各种接口、类和方法,为开发者提供了全面的理解和使用指南。Servlet API是J2EE平台的一部分,主要用于构建动态Web应用程序,它是...
Servlet应用中,可以使用`@WebExceptionHandler`注解来处理全局异常,或者在特定Servlet中捕获并处理异常。 10. **部署与调试**:最后,我们需要知道如何将项目打包成WAR文件,部署到Tomcat或其他Servlet容器中,并...
- **服务**:每当有新的请求到达,Servlet容器(如Tomcat)会创建一个`service()`方法的线程来处理请求。 - **销毁**:当Servlet不再需要或服务器关闭时,调用`destroy()`方法进行清理工作。 2. **Servlet接口和...
Servlet是Java Web开发中的核心组件,它用于扩展服务器的功能,处理来自客户端(通常是Web浏览器)的请求,并向客户端发送响应。这个"Servlet中文帮助文档CHM格式"提供了一个全面的指南,帮助开发者理解和掌握...
最后,Servlet 3.0引入了注解驱动的Servlet配置,开发者可以直接在Servlet类上使用`@WebServlet`注解来声明Servlet,而不是在web.xml中配置。 总的来说,"Servlet API 中文手册"将涵盖以上所有内容,并可能包括更多...
Servlet关于RequestDispatcher的原理详解 RequestDispatcher是Servlet中的一种机制,可以将请求从...RequestDispatcher是Servlet中的一种强大机制,可以帮助我们更好地处理请求和响应,提高应用程序的性能和可扩展性。
4. **转发与重定向**:在处理请求时,Servlet可以使用`RequestDispatcher`进行请求转发,或者使用`response.sendRedirect()`进行重定向,这两种方式在控制流程上有所不同。 5. **会话管理**:考勤管理系统可能涉及...
在这个实验中,学生将学习如何使用JavaBean封装数据,通过Servlet处理HTTP请求,以及DAO模式在数据库操作中的应用。此外,还将了解JavaScript客户端验证、JSP表达式和请求转发等Web开发技术。通过实践,学生能够更...
在Java Web应用中,Servlet常与JSP(JavaServer Pages)结合使用,Servlet处理业务逻辑,JSP负责展示视图。通过RequestDispatcher,Servlet可以将请求转发到JSP页面,实现动态内容的生成。 九、异常处理 Servlet ...
2. **转发和重定向**:Servlet可以使用RequestDispatcher进行请求转发或者响应重定向,控制流程跳转到不同的JSP页面。 3. **请求参数处理**:从HttpServletRequest对象中获取请求参数,传递给业务逻辑层进行处理。 ...
6. **转发到JSP页面**:使用Servlet的`RequestDispatcher`的`forward()`方法,将请求转发到JSP页面。在转发时,可以将之前获取的数据库数据作为请求属性,以便JSP页面可以访问。 7. **在JSP页面上显示数据**:在JSP...
在Servlet中,可以使用RequestDispatcher的forward()方法将请求转发到另一个资源,或者使用Response.sendRedirect()方法进行重定向。转发在服务器端完成,而重定向则是在客户端完成。 六、Servlet过滤器 除了...
在Servlet中,不要使用静态变量存储请求相关的数据,除非已经做好了同步控制。 5. **Servlet的转发和重定向**:Servlet可以通过RequestDispatcher的forward()方法将请求转发到其他资源,或者通过...
总结起来,Servlet中的请求转发是通过`RequestDispatcher`实现的一种服务器内部资源之间的传递,常用于构建Web应用的导航逻辑。在用户登录场景中,我们首先验证用户提供的凭据,然后根据验证结果决定是展示登录成功...
4. **转发与重定向**:在Servlet中,可以使用`RequestDispatcher`对象的`forward()`方法将请求转发到其他资源,或者使用`Response.sendRedirect()`方法重定向用户到新的URL。 5. **MVC模式**:Servlet常与Model-...
在Servlet中,处理客户端请求主要涉及到以下几种方法: - **doGet()**:处理GET请求。 - **doPost()**:处理POST请求。 - **doPut()**:处理PUT请求。 - **doDelete()**:处理DELETE请求。 #### 六、数据传递 在...
7. **多线程安全**:由于Servlet是多线程的,所以需要特别注意线程安全问题,避免在Servlet中使用非线程安全的数据结构或方法。 8. **Filter和Listener**:Servlet还常常配合Filter和Listener使用,Filter可以用来...
7. 异常处理:如何在Servlet中捕获和处理异常,以及使用error-page元素在web.xml中配置错误页面。 8. JSP与Servlet的关系:JSP是动态网页技术,它最终会被转换成Servlet。课件可能解释如何在JSP中使用脚本元素、...
9. **异常处理**:课程可能涵盖了如何使用`throws ServletException, IOException`来处理Servlet中的异常,以及自定义错误页面。 10. **实战演练**:"myWebSite"这个文件可能是实际创建的Web项目,包含Servlet的源...
当你在浏览器中访问一个Web应用时,请求会被发送到Web服务器,服务器上的Servlet容器(如Tomcat、Jetty等)会识别出请求并调用相应的Servlet来处理。Servlet通过实现javax.servlet.Servlet接口或其子接口,如javax....