• springboot


    1、总览

    2、代码

    1)、pom.xml

    <dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    
    <dependency>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
        <optional>true</optional>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-tomcat</artifactId>
        <scope>provided</scope>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <scope>test</scope>
    </dependency>
    
    <dependency>
        <groupId>org.apache.tomcat.embed</groupId>
        <artifactId>tomcat-embed-jasper</artifactId>
        <scope>provided</scope>
    </dependency>
    <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>jstl</artifactId>
    </dependency>
    
    </dependencies>
    View Code

    2)、application.properties

    spring.mvc.view.prefix=/WEB-INF/views/
    spring.mvc.view.suffix=.jsp
    server.error.whitelabel.enabled=false
    server.error.include-stacktrace=always

    3)、java代码

    package com.ebc.controller;
    
    import com.ebc.error.ForbiddenException;
    import com.ebc.error.NotYetImplemented;
    import org.springframework.http.HttpStatus;
    import org.springframework.http.ResponseEntity;
    import org.springframework.stereotype.Controller;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.ResponseStatus;
    
    @Controller
    public class MyController {
        /**
         * response status code=500,导航到5xx.jsp
         */
        @RequestMapping("/")
        public void handleRequest() {
            throw new RuntimeException("test exception");
        }
        /**
         * response status code=501,导航到5xx.jsp
         */
        @RequestMapping("/app")
        public void handleAppInfoRequest() throws NotYetImplemented {
            throw new NotYetImplemented("The request page is not yet implemented");
        }
    
        /**
         * response status code=403,因为没有403.jsp,因此会导航到error.jsp
         */
        @RequestMapping("/admin")
        public void handleAdminRequest() throws ForbiddenException {
            throw new ForbiddenException("The requested page is forbidden");
        }
    
        /**
         * 返回501,但是无法导航到5xx.jsp页面
         */
        @RequestMapping("/some")
        @ResponseStatus(HttpStatus.NOT_IMPLEMENTED)
        public void handleSomeRequest() {
        }
        /**
         * 返回501,但是无法导航到5xx.jsp页面
         */
        @RequestMapping("/some2")
        public ResponseEntity<?> handleSomeInfoRequest() {
            ResponseEntity<?> re = new ResponseEntity<>((Object)null, HttpStatus.NOT_IMPLEMENTED);
            return re;
        }
    }
    
    package com.ebc.error;
    
    import org.springframework.http.HttpStatus;
    import org.springframework.web.bind.annotation.ResponseStatus;
    
    @ResponseStatus(HttpStatus.FORBIDDEN)
    public class ForbiddenException extends Exception {
        public ForbiddenException(String message) {
            super(message);
        }
    }
    
    
    package com.ebc.error;
    
    import org.springframework.http.HttpStatus;
    import org.springframework.web.bind.annotation.ResponseStatus;
    
    @ResponseStatus(HttpStatus.NOT_IMPLEMENTED)
    public class NotYetImplemented extends Exception {
        public NotYetImplemented(String message) {
            super(message);
        }
    }

    4)、5xx.jsp

    所有5开头的http状态返回码都会导航到该5xx.jsp。

    <%@ page language="java"
             contentType="text/html; charset=utf-8"
             pageEncoding="utf-8"%>
    <html>
    <head>
        <style>
            table td{
                vertical-align:top;
                border:solid 1px #888;
                padding:10px;
            }
        </style>
    </head>
    <body>
    <h1>My 5xx Error Page</h1>
    <table>
        <tr>
            <td>Date</td>
            <td>${timestamp}</td>
        </tr>
        <tr>
            <td>Error</td>
            <td>${error}</td>
        </tr>
        <tr>
            <td>Status</td>
            <td>${status}</td>
        </tr>
        <tr>
            <td>Message</td>
            <td>${message}</td>
        </tr>
        <tr>
            <td>Exception</td>
            <td>${exception}</td>
        </tr>
        <tr>
            <td>Trace</td>
            <td>
                <pre>${trace}</pre>
            </td>
        </tr>
    </table>
    </body>
    </html>
    View Code

    5)、404.jsp

    只有404的返回码会导航到404.jsp

    <%@ page language="java"
             contentType="text/html; charset=utf-8"
             pageEncoding="utf-8"%>
    <html>
    <head>
        <style>
            table td{
                vertical-align:top;
                border:solid 1px #888;
                padding:10px;
            }
        </style>
    </head>
    <body>
    <h1>My 404 Error Page</h1>
    <table>
        <tr>
            <td>Date</td>
            <td>${timestamp}</td>
        </tr>
        <tr>
            <td>Error</td>
            <td>${error}</td>
        </tr>
        <tr>
            <td>Status</td>
            <td>${status}</td>
        </tr>
        <tr>
            <td>Message</td>
            <td>${message}</td>
        </tr>
        <tr>
            <td>Exception</td>
            <td>${exception}</td>
        </tr>
        <tr>
            <td>Trace</td>
            <td>
                <pre>${trace}</pre>
            </td>
        </tr>
    </table>
    </body>
    </html>
    View Code

    6)、error.jsp(在views文件夹下,即application.properties 中的spring.mvc.view.prefix=/WEB-INF/views/)

    除了5xx、404外的所有状态码都会到航到error.jsp页面

    <%@ page language="java"
             contentType="text/html; charset=utf-8"
             pageEncoding="utf-8"%>
    <html>
    <head>
        <style>
            table td{
                vertical-align:top;
                border:solid 1px #888;
                padding:10px;
            }
        </style>
    </head>
    <body>
    <h1>My Custom Global Error Page</h1>
    <table>
        <tr>
            <td>Date</td>
            <td>${timestamp}</td>
        </tr>
        <tr>
            <td>Error</td>
            <td>${error}</td>
        </tr>
        <tr>
            <td>Status</td>
            <td>${status}</td>
        </tr>
        <tr>
            <td>Message</td>
            <td>${message}</td>
        </tr>
        <tr>
            <td>Exception</td>
            <td>${exception}</td>
        </tr>
        <tr>
            <td>Trace</td>
            <td>
                <pre>${trace}</pre>
            </td>
        </tr>
    </table>
    </body>
    </html>
    View Code

    3、执行

    发现,没有导航到5xx.jsp,只是返回了501

      输入一个不存在的资源,导航到了404.jsp了。

    总结:

    views

    |_error.jsp【error.jsp一定存放在根下,即application.properties 中的spring.mvc.view.prefix=/WEB-INF/views/

    |_error【其他错误页面一定存放在error目录下

      |_5xx.jsp

      |_404.jsp

  • 相关阅读:
    restic 快速安全可靠的数据备份工具
    使用sidekick 负载均衡minio 集群
    sidekick简单试用
    使用nfpm打包deb&&rpm
    sidekick minio 团队开源的高性能http sidecar 负载均衡器
    baretest小巧但是强大的jest可选测试框架
    fetchq-cron 基于webhook 的任务调度工具
    uwsgi+nginx+flask+docker+supervisord oracle中文乱码问题
    gqless 一个强大灵活的不用写query的graphql client
    cortex 1.0 版本发布
  • 原文地址:https://www.cnblogs.com/yaoyuan2/p/11873110.html
Copyright © 2020-2023  润新知