springboot--异常处理、国际化、定制web服务器

异常处理

在controller层程序出现异常,并且未被捕获,springboot提供的异常处理机制将会生效。

springmvc的错误处理方案

如果使用了springmvc的错误处理方案,spring boot的错误处理方案不会生效

局部控制@ExceptionHandler

在控制器中写一个方法,方法使用@ExceptionHandler标注,凡是这个控制器中出现对应异常,则调用这个方法进行异常处理,局部生效。

// 默认响应json字符串
@RestController
public class UserController {

    @GetMapping("/resource/{id}")
    public String getResource(@PathVariable("id") Long id){
        if (id ==1){
            throw new IllegalArgumentException("无效id:"+id);
        }
        return "id"+id;
    }

    // springmvc局部方式处理异常
    // 只有在UserController 中发生IllegalArgumentException异常时,才会调用此方法
    @ExceptionHandler(IllegalArgumentException.class)
    public String handlerIllegalArgumentException(IllegalArgumentException exception){
        return exception.getMessage();
    }
}

全局控制@ControllerAdvice+@ExceptionHandler

把以上局部生效的方法单独放到一个类中,这个类使用@ControllerAdvice标注,凡是任何控制器中出现对应的异常,则会调用对应方法,全局生效。

// 对于所有的控制器都有效
@ControllerAdvice
public class GlobalExceptionHandler {

    @ExceptionHandler(IllegalArgumentException.class)
    @ResponseBody
    public String handlerIllegalArgumentException(IllegalArgumentException exception){
        return exception.getMessage();
    }

}

spring boot的错误处理方案

spring boot的默认处理方案如下:

  1. 如果客户端需要json格式,则直接响应json格式的错误信息。
  2. 如果客户端需要HTML页面,则按照下面步骤执行:
    • 第一步(精确错误码文件):去classpath:/templates/error/目录下找404.html 500.html等精确码文件。如果找不到则去静态资源目录下的/error目录下找,如果找不到,进入下一步
    • 第二步(模糊错误码文件):去classpath:/templates/error/目录下找4xx.html 5xx.html等精确码文件。如果找不到则去静态资源目录下的/error目录下找,如果找不到,进入下一步
    • 第三步(通用错误页面):去找classpath:/templates/error.html,如果找不到,则进入下一步
    • 第四步(默认错误处理):使用默认错误处理,即/error端点。

如何在错误页获取错误信息

spring boot默认在model中放置以下信息:

  • timestamp:错误发生的时间戳
  • status:HTTP状态码
  • error:错误类型
  • exception:异常类名
  • message:错误信息
  • trace:堆栈跟踪

spring boot3.3.5版本默认只向model对象中绑定timestamp、status、error。如果要保存exception、message、trace,需要开启以下三个配置:

server.error.include-exception=true
server.error.include-stacktrace=always
server.error.include-message=always

前后端分离项目的错误处理方案

使用springmvc的错误处理方案,定义全局处理异常@ControllerAdvice+@ExceptionHandler,返回json格式的错误信息。

服务器端负责页面渲染的项目错误处理方案

  1. 如果发生的异常时HTTP错误状态码
    • 建议常见的错误码使用精确错误码文件
    • 不常见的错误码使用模糊错误码文件
  2. 业务相关异常
    • 在程序中处理具体异常,通过程序自行决定跳转哪个页面
  3. 建议提供class path:/templates/error.html 来处理通用错误。

国际化

1.创建资源文件

创建包含不同语言版本的消息文件,这些文件默认放在src/main/resources目录下,并且以.properties为扩展名,字符集设置UTF-8。例如

  • messages.properties(默认语言如英文)
  • messages_zh_CN.properties(简体中文)
  • messages_fr.properties(法语)

每个文件应包含相同的消息键,但值对应相应的语言

messages.properties:

​ welcome.message= welcome to our application!

messages_zh_CN.properties:

​ welcome.message=欢迎来到我们的应用!

2.在模板文件中取出消息

语法格式是#{welcome.message}

比如:

定制web容器

web服务器切换为jetty

spring boot默认使用tomcat,如何切换为jetty?

实现方式:排除tomcat,添加jetty依赖

<!--        排除tomcat-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
            <exclusions>
                <exclusion>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-starter-tomcat</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
<!--        添加jetty依赖-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-jetty</artifactId>
        </dependency>
    </dependencies>

tomcat服务器调优参数

# 请求超时时间
server.tomcat.connection-timeout=2000
#设置tomcat处理请求的最大线程数为200
#超过这个数量,tomcat会把多余的请求放到队列中
#如果队列也满了(由server.tomcat.accept-count配置),新的请求将被拒绝,返回一个“503 Service Unavailable”错误
server.tomcat.max-threads=200
# 等待队列的最大容量
server.tomcat.accept-count=100
# tomcat空闲时至少保持10个线程处于活动状态,以便快速响应新的请求
server.tomcat.threads.min-spare=10
# 允许tomcat在关闭后立即重新绑定相同的地址和端口,即使端口还在time_wait状态
#当一个网络链接关闭时,操作系统会将该链接的端口保持在time_wait状态一段时间(通常时2-4分钟)。以确保所有未完成的数据包能被正确处理。在这段时间内,该端口不会被其他进程绑定。
server.tomcat.address-reuse-enabled=true
# 设置tomcat绑定到所有可用的网络接口,使其可以从任何网络地址访问
server.tomcat.bind-address=0.0.0.0
# 设置tomcat使用HTTP/1.1协议处理请求
server.tomcat.protocol=HTTP/1.1
# 设置tomcat的session超时时间
server.tomcat.session-timeout=30
# tomcat静态资源缓存时间3600秒
server.tomcat.resource-cache-period=3600
# 解决get请求乱码。对请求的url进行编码
server.tomcat.uri-encoding=UTF-8
# 设置tomcat的基础目录为当前目录。这个配置指定tomcat的工作目录。包括日志文件,临时文件,运行时生成的文件的存放位置,生产环境中可能需要重新配置。
server.tomcat.basedir=.
posted @ 2026-01-27 16:30  NE_STOP  阅读(45)  评论(0)    收藏  举报