Servlet 教程 之 Servlet 异常处理 5

简介: `ErrorHandler` 是一个 Servlet 示例,用于处理错误和异常。当发生错误时,它从请求中获取异常和状态码信息,然后生成一个 HTML 响应来显示错误详情。包括错误代码、Servlet 名称、异常类型和请求 URI。支持 GET 和 POST 方法。

Servlet 教程 之 Servlet 异常处理 5

Servlet 异常处理

Servlet 错误处理程序实例

以下是 Servlet 实例,将应对任何您所定义的错误或异常发生时的错误处理程序。

本实例让您对 Servlet 中的异常处理有基本的了解,您可以使用相同的概念编写更复杂的异常处理应用程序:

//导入必需的 java 库
import java.io.;
import javax.servlet.
;
import javax.servlet.http.;
import java.util.
;

//扩展 HttpServlet 类
public class ErrorHandler extends HttpServlet {

// 处理 GET 方法请求的方法
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
{
    Throwable throwable = (Throwable)
    request.getAttribute("javax.servlet.error.exception");
    Integer statusCode = (Integer)
    request.getAttribute("javax.servlet.error.status_code");
    String servletName = (String)
    request.getAttribute("javax.servlet.error.servlet_name");
    if (servletName == null){
        servletName = "Unknown";
    }
    String requestUri = (String)
    request.getAttribute("javax.servlet.error.request_uri");
    if (requestUri == null){
        requestUri = "Unknown";
    }
    // 设置响应内容类型
    response.setContentType("text/html;charset=UTF-8");

    PrintWriter out = response.getWriter();
    String title = "百度 Error/Exception 信息";

    String docType = "<!DOCTYPE html>\n";
    out.println(docType +
        "<html>\n" +
         "<head><title>" + title + "</title></head>\n" +
         "<body bgcolor=\"#f0f0f0\">\n");
       out.println("<h1>百度异常信息实例演示</h1>");
       if (throwable == null && statusCode == null){
          out.println("<h2>错误信息丢失</h2>");
          out.println("请返回 <a href=\"" + 
        response.encodeURL("http://localhost:8080/") + 
            "\">主页</a>。");
       }else if (statusCode != null) {
          out.println("错误代码 : " + statusCode);
    }else{
           out.println("<h2>错误信息</h2>");
          out.println("Servlet Name : " + servletName + 
                          "</br></br>");
          out.println("异常类型 : " + 
                          throwable.getClass( ).getName( ) + 
                          "</br></br>");
          out.println("请求 URI: " + requestUri + 
                          "<br><br>");
          out.println("异常信息: " + 
                              throwable.getMessage( ));
       }
       out.println("</body>");
       out.println("</html>");
}
// 处理 POST 方法请求的方法
public void doPost(HttpServletRequest request,
                  HttpServletResponse response)
   throws ServletException, IOException {
    doGet(request, response);
}

}

目录
相关文章
|
4月前
|
Java 应用服务中间件 API
Servlet 教程 之 Servlet 调试 2
Servlet调试常面临挑战,建议采用日志记录,推荐使用log4J。Servlet API的`log()`方法也能辅助调试,如示例代码所示,通过`ServletContext`记录消息。当参数缺失时,它能生成带有异常的日志。Tomcat容器会将这些日志保存在安装目录的logs文件夹下,有助于识别和追踪错误。在不常见异常的catch块中使用`log()`函数是良好实践。
36 8
|
4月前
|
小程序
Servlet 教程 之 Servlet 调试 3
Servlet调试是开发中的挑战,涉及复杂交互且错误难复现。使用JDB调试器,将HttpServer视为Servlet响应HTTP请求的调试目标。调试时,需配置调试器的classpath以包含HttpServer、Servlet及其相关类。为启用Servlet重载,通常将`server_root/servlets`加入classpath,但在调试时此规则有助于在加载Servlet前设置断点。在正确配置后,可在Servlet代码中设定断点,通过浏览器请求该Servlet以启动调试,程序会在断点处暂停。
48 6
|
4月前
|
Java
Servlet 教程 之 Servlet 调试 1
Servlet调试常面临挑战,尤其是复杂的客户端/服务器交互导致的错误。`System.out.println()`是常用的调试工具,用于验证代码执行和显示变量值,尤其在无需额外类的环境中,如Servlet、JSP等。它不会中断程序执行,适合时序关键的场景。调试信息会出现在Web服务器日志中,例如:`System.out.println(&quot;Debugging message&quot;)`。
28 2
|
4月前
|
Java
Servlet 教程 之 Servlet 异常处理 5
`ErrorHandler` 是一个Servlet示例,用于处理错误和异常。当发生错误时,它捕获并显示相关详细信息,如异常类型、Servlet名称、请求URI和错误代码。通过响应设置为HTML格式,向用户展示友好的错误页面。支持GET和POST方法。
41 1
|
4月前
|
容器
Servlet 教程 之 Servlet 异常处理 1
Servlet异常处理通过web.xml配置,当Servlet抛出异常,容器会查找匹配的error-page元素。定义名为`ErrorHandler`的Servlet处理所有异常和特定HTTP状态码。例如,配置`&lt;error-code&gt;`处理404和403错误,以及通过`&lt;exception-type&gt;`处理`ServletException`和`IOException`,均调用`/ErrorHandler`。
27 1
|
4月前
|
容器
Servlet 教程 之 Servlet 编写过滤器 6
该教程介绍了如何在Servlet中编写过滤器。可以创建多个过滤器,如AuthenFilter和LogFilter,并通过不同的映射进行配置。过滤器的应用顺序由web.xml中filter-mapping的顺序决定,可通过调整顺序改变过滤器执行的先后。
24 3
|
4月前
Servlet 教程 之 Servlet 编写过滤器 5
在Servlet教程中,了解如何编写过滤器。示例展示了定义两个过滤器:AuthenFilter和LogFilter。每个过滤器有自己的映射和初始化参数。LogFilter和AuthenFilter都匹配所有URL(/*),按照声明顺序执行。
22 3
|
4月前
|
Java
Servlet 教程 之 Servlet 编写过滤器 3
`LogFilter` 是一个 Servlet 过滤器示例,它打印网站名称并传递请求至过滤链。当与 `DisplayHeader` Servlet(显示 HTTP 头信息)配合使用时,提供基础过滤器概念的理解。过滤器在请求处理前可添加额外功能或修改输入,而 `doGet` 方法则用于响应 GET 请求,展示请求头信息。
18 2
|
4月前
|
XML 数据格式
Servlet 教程 之 Servlet 编写过滤器 4
在Servlet教程中,学习如何编写过滤器。在`web.xml`配置文件中,创建一个名为`LogFilter`的过滤器,类为`com.baidu.test.LogFilter`,设置初始化参数`Site`为`百度`。将过滤器映射到`/*`,确保所有请求都会经过此过滤器。同时定义了一个名为`DisplayHeader`的Servlet,映射到`/TomcatTest/DisplayHeader`路径。
22 1
|
4月前
|
XML Java 数据安全/隐私保护
Servlet 教程 之 Servlet 编写过滤器 1
Servlet过滤器用于动态拦截请求和响应,实现如身份验证、数据压缩、日志记录等多种功能。它们可附加于Servlet、JSP或HTML,按web.xml中配置的顺序执行。Web容器启动时会根据部署描述符创建过滤器实例。
23 2