IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 系统运维 -> 使用Servlet和JSP开发Java应用程序 ----错误处理 -> 正文阅读

[系统运维]使用Servlet和JSP开发Java应用程序 ----错误处理

错误和异常处理

  • 在 Web 应用程序中发生错误并引发异常
  • 在服务通过发生错误消息状态代码,并为客户提供冠以错误和异常的信息
  • 状态代码是应用程序服务器发生给客户端的关于客户端请求是成功或失败的信息
  • Http 状态代码用三位数表示
  • 分为以下五个类别:
    • 提示信息(1XX):表示请求已被接受,需要继续处理
    • 成功(2XX):表示成功,请求被成功接收并处理
    • 重定向(3XX):表示重定向,需要进一步的操作以完成请求处理,如跳转页面
    • 客户端错误(4XX):表示客户端错误,它表示请求有错误导致无法完成请求处理,如语法错误
    • 服务器错误(5XX):表示服务器错误
  • 常见状态代码:200、301、304、400、404、410、500

配置错误页面

WEB-INF 下新建 web.xml 文件
在这里插入图片描述

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.1" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd">
    <session-config>
        <session-timeout>
            30
        </session-timeout>
    </session-config>
    <!--error-page元素用于配置错误页面-->
    <!--error-code元素用于指定针对的错误代码-->
    <!--location元素用于指定错误页面的位置-->
    <error-page>
        <error-code>404</error-code>
        <location>/error404.html</location>
    </error-page>
</web-app>

配置前的错误页面
在这里插入图片描述

配置后的错误页面
在这里插入图片描述

针对异常配置错误页面

算数异常
java.lang.ArithmeticException
在这里插入图片描述
格式异常
java.lang.NumberFormatException
在这里插入图片描述

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.1" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd">
    <session-config>
        <session-timeout>
            30
        </session-timeout>
    </session-config>
    
    <!--error-page元素用于配置错误页面-->
    <!--error-code元素用于指定针对的错误代码-->
    <!--location元素用于指定错误页面的位置-->    
    <error-page>
        <error-code>404</error-code>
        <location>/error404.html</location>
    </error-page>
    
    <!--也可以针对异常类型配置错误页面-->
    <error-page>
        <exception-type>java.lang.ArithmeticException</exception-type>
        <location>/error500.html</location>
    </error-page>
    <error-page>
        <exception-type>java.lang.NumberFormatException</exception-type>
        <location>/error500.html</location>
    </error-page>
</web-app>

配置后的异常页面
在这里插入图片描述

java.lang.Throwable 所有异常的基类
只要出现异常就会显示错误页面

    <error-page>
        <exception-type>java.lang.Throwable</exception-type>
        <location>/error500.html</location>
    </error-page>

使用 Servlet 配置错误页面

    <error-page>
        <exception-type>java.lang.Throwable</exception-type>
        <location>/errorServlet</location>
    </error-page>

在这里插入图片描述

package com.qdu.servlet;

import java.io.IOException;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * 自定义错误页面可以是一个html或jsp页面,也可是一个servlet
 * <br>如果是针对简单错误代码的错误页面,使用html即可,如果是需要收集错误和异常信息,可以考虑使用servlet或jsp作为错误页面
 *
 * @author Anna
 */
@WebServlet("/errorServlet")
public class ErrorServlet extends HttpServlet {

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp)
            throws ServletException, IOException {

        //javax.servlet.error.status_code
        //javax.servlet.error.message
        //javax.servlet.error.exception_type
        //一个web程序有且仅有一个ServletContext对象,用于存储程序范围的数据
        //ServletContext接口提供log对象,用于在输出窗口输出
        ServletContext ctx = getServletContext();

        //如果一个servlet是作为自定义错误页面使用,则该错误和异常信息会被以属性的形式添加到请求对象中
        //从请求对象中可根据固定的属性名,获取错误和异常信息,如javax.servlet.error.status_code用于获取状态码
        //此外,ServletContext接口的log方法可用于写入信息到服务器日志,如果需要,可考虑使用该方法写入日志内容
        //也可借助一些其他专门的日志类库写入日志,如log4j等
        ctx.log("....................................................................");
        ctx.log("状态代码:" + req.getAttribute("javax.servlet.error.status_code"));
        ctx.log("错误消息:" + req.getAttribute("javax.servlet.error.message"));
        ctx.log("异常类型:" + req.getAttribute("javax.servlet.error.exception_type"));
        ctx.log("....................................................................");

        resp.setContentType("text/html;charset=utf-8");
        resp.getWriter().println("这是处理500错误的Servlet,作为自定义错误页面用!");
    }
}

控制台的输出
在这里插入图片描述

在这里插入图片描述

自己指定发送的状态代码

我们可以从客户端自己主动发送状态代码给服务器,得到相应的回应

setStatus() 发送非错误状态代码

setStatus()方法(非错误状态码)
临时地 temporarily 302 临时重定向
永久地 permanently 301 永久重定向

<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>百搜一下,你就知道</title>
        <link rel="stylesheet" href="css/style.css"/>
    </head>
    <body>

        <h1>百搜-搜天下</h1>
        <form>
            <input type="text">
            <input type="submit" value="百搜一下">
        </form>

        <%

            //如果想自己指定发送的状态代码,可以使用setStatus()方法(非错误状态码)或sendError()方法(错误状态码)
            //永久地 permanently 301-永久重定向
            //临时地 temporarily 302-临时重定向
            
            response.sendRedirect("https://www.baidu.com");
            
            //如果想要临时重定向到某个页面,可以使用302
            //response.setStatus(302);
            //如果想要永久重定向,可以使用301
            response.setStatus(301);
            response.setHeader("location", "https://www.baidu.com");
            
        %>

    </body>
</html>

sendError() 发送错误状态代码

可以调用 sendError() 自行指定发送给客户端的错误代码(4XX5XX
可以只指定发送的错误代码,也可同时指定发送的错误代码和一个消息

<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>百搜一下,你就知道</title>
        <link rel="stylesheet" href="css/style.css">
    </head>
    <body> 
        <h1>百搜搜-搜天下</h1>
        <form>
            <input type="text">
            <input type="submit" value="百搜一下">
        </form>
        <%
            
            //如果想自己指定发送的状态代码,可以使用setStatus()方法(非错误状态码)或sendError()方法(错误状态码)
            
            //可以调用sendError()自行指定发送给客户端的错误代码(4XX或5XX)
            //可以只指定发送的错误代码,也可同时指定发送的错误代码和一个消息
            
            //1. 只指定发送的状态码
//            response.sendError(404);
            
            //2. 指定状态码的同时指定一个消息
//            response.sendError(410,"请求的资源已经被永久删除了!!!");
            
            //3. 也可使用HttpServletResponse接口中的常量来指定发送的状态码
            response.sendError(HttpServletResponse.SC_GONE,"请求的资源已经被永久删除了!!!");
            
        %>
    </body>
</html>

在这里插入图片描述

  系统运维 最新文章
配置小型公司网络WLAN基本业务(AC通过三层
如何在交付运维过程中建立风险底线意识,提
快速传输大文件,怎么通过网络传大文件给对
从游戏服务端角度分析移动同步(状态同步)
MySQL使用MyCat实现分库分表
如何用DWDM射频光纤技术实现200公里外的站点
国内顺畅下载k8s.gcr.io的镜像
自动化测试appium
ctfshow ssrf
Linux操作系统学习之实用指令(Centos7/8均
上一篇文章      下一篇文章      查看所有文章
加:2022-04-01 00:32:30  更:2022-04-01 00:32:53 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/15 23:48:34-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码