Servlet 教程 之 Servlet 异常处理 6

简介: 该教程介绍了Servlet异常处理的示例,创建了一个名为`ErrorHandler`的Servlet,它捕获并显示错误和异常信息。当错误或异常发生时,通过web.xml配置错误页面映射到这个Servlet。当访问不存在的Servlet或触发异常时,`ErrorHandler`会显示错误代码、异常类型、Servlet名称和请求URI等详细信息。用户需将类编译后放入Tomcat的classes目录,并在web.xml中配置错误处理映射。

Servlet 教程 之 Servlet 异常处理 6

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);
}

}

以通常的方式编译 ErrorHandler.java,把您的类文件放入/webapps/ROOT/WEB-INF/classes 中。

让我们在 web.xml 文件中添加如下配置来处理异常:

<?xml version="1.0" encoding="UTF-8"?>


ErrorHandler
com.baidu.test.ErrorHandler


ErrorHandler
/TomcatTest/ErrorHandler


404
/TomcatTest/ErrorHandler


java.lang.Throwable
/ErrorHandler

现在,尝试使用一个会产生异常的 Servlet,或者输入一个错误的 URL,这将触发 Web 容器调用 ErrorHandler 的 Servlet,并显示适当的消息。

目录
相关文章
|
7天前
|
XML 数据格式
Servlet 教程 之 Servlet 文件上传 3
该教程介绍了如何使用Servlet进行文件上传。在web.xml中配置了Servlet `UploadServlet`,类为`com.baidu.test.UploadServlet`,映射路径为`/TomcatTest/UploadServlet`。用户需通过创建的HTML表单提交文件,访问URL为:http://localhost:8080/TomcatTest/upload.jsp。
13 0
|
1天前
|
小程序
Servlet 教程 之 Servlet 调试 3
Servlet调试是开发中的挑战,涉及复杂交互且错误难复现。使用JDB调试器,将HttpServer视为Servlet响应HTTP请求的调试目标。调试时,需配置调试器的classpath以包含HttpServer、Servlet及其相关类。为启用Servlet重载,通常将`server_root/servlets`加入classpath,但在调试时此规则有助于在加载Servlet前设置断点。在正确配置后,可在Servlet代码中设定断点,通过浏览器请求该Servlet以启动调试,程序会在断点处暂停。
11 6
|
1天前
|
Java 应用服务中间件 API
Servlet 教程 之 Servlet 调试 2
Servlet调试常面临挑战,建议采用日志记录,推荐使用log4J。Servlet API的`log()`方法也能辅助调试,如示例代码所示,通过`ServletContext`记录消息。当参数缺失时,它能生成带有异常的日志。Tomcat容器会将这些日志保存在安装目录的logs文件夹下,有助于识别和追踪错误。在不常见异常的catch块中使用`log()`函数是良好实践。
18 8
|
1天前
|
Java
Servlet 教程 之 Servlet 调试 1
Servlet调试常面临挑战,尤其是复杂的客户端/服务器交互导致的错误。`System.out.println()`是常用的调试工具,用于验证代码执行和显示变量值,尤其在无需额外类的环境中,如Servlet、JSP等。它不会中断程序执行,适合时序关键的场景。调试信息会出现在Web服务器日志中,例如:`System.out.println(&quot;Debugging message&quot;)`。
12 2
|
2天前
|
Unix 应用服务中间件 Linux
Servlet 教程 之 Servlet 包 1
Servlet教程介绍了Servlet应用程序的打包部署。默认存放于&lt;Tomcat-installation-directory&gt;/webapps/ROOT,类文件在WEB-INF/classes。例如,Servlet类com.myorg.MyServlet应置于WEB-INF/classes/com/myorg/MyServlet.class。
10 0
|
2天前
|
Java 编译器 API
Servlet 教程 之 Servlet 发送电子邮件 7
在Servlet中发送邮件需要JavaMail API和JAF。将java文件放在类路径下,如`com.myorg`,然后在`&lt;Tomcat-installation-directory&gt;/webapps/ROOT/WEB-INF/classes`目录下,使用`javac`编译`MyServlet.java`。如果依赖其他库,如servlet-api.jar,需将其加入CLASSPATH。确保JDK在PATH环境变量中,以便使用`javac`。
8 0
|
2天前
|
Java API
Servlet 教程 之 Servlet 发送电子邮件 6
Servlet教程展示了如何使用JavaMail API和JAF从Servlet发送邮件。Servlet类位于`com.myorg`包中,名为`MyServlet`,继承自`HttpServlet`。初始化时设置消息,`doGet`方法处理请求,返回HTML响应。要发送邮件,需确保Java库已安装。
9 0
|
3天前
|
Java API 数据安全/隐私保护
Servlet 教程 之 Servlet 发送电子邮件 5
该教程介绍了如何使用Servlet发送带附件的电子邮件。首先,需要安装JavaMail API和JAF。在Servlet中,通过设置邮件服务器属性,创建MimeMessage对象,添加收件人、主题和正文。然后,利用Multipart添加附件,最后通过Transport.send()发送邮件。如果需要身份验证,可添加邮件用户名和密码属性。示例代码展示了完整的发送过程。此外,提到了Web应用的标准目录结构,其中WEB-INF包含classes和lib目录,用于存放类和库文件。
14 1
|
3天前
|
Java API 数据安全/隐私保护
Servlet 教程 之 Servlet 发送电子邮件 4
该教程展示了如何使用Servlet通过JavaMail API发送带附件的电子邮件。首先,确保安装了JavaMail API和JAF。在示例代码`SendEmail.java`中,创建MimeMessage对象,设置发件人、收件人、主题和正文。然后添加MimeBodyPart用于文本和附件,使用Multipart组合它们。最后,通过Transport.send()发送邮件。如果需要认证,可添加&quot;mail.user&quot;和&quot;mail.password&quot;属性。编译并运行Servlet即可发送邮件。
16 2
|
4天前
|
Java API
Servlet 教程 之 Servlet 发送电子邮件 2
使用Servlet发送HTML邮件需要JavaMail API和JAF。在示例中,Servlet创建MimeMessage对象,设置发件人、收件人、主题及HTML内容,然后通过Transport.send()发送。确保相关jar在CLASSPATH中。当Servlet被调用时,它会向指定邮箱发送带有HTML标题的邮件。
25 11