SpringBoot集成Beetl后统一处理页面异常的方法

作者:滕冲 时间:2023-11-10 19:57:55 

背景

SpringBoot集成Beetl后如果页面出现异常会将出现异常之前的页面输出到客户端,但是由于页面不完整会导致用户看到的页面错乱或者空白,如下


<!DOCTYPE html>
<html lang="en">
<head>
 <meta charset="UTF-8">
 <title>Title</title>
</head>
<body>

在控制台可以看到


>>11:11:47:该方法未注册(FUNCTION_NOT_FOUND):err 位于8行 资源:modular/sys/login/login.html
5|  <title>Title</title>
6|</head>
7|<body>
8|  ${err()}
9|</body>
10|</html>

我们一般希望当出现异常时返回异常提示页面而不是不完整的页面。

设置ErrorHandler

Beetl默认发生页面异常时不对异常进行抛出,在文档中我们可以看到

2.2.3版本以后,新增加org.beetl.ext.web.WebErrorHandler,可以在web开发的时候在页面输出提示信息,在产品模式下在后台输出提示信息(通过配置属性ESOURCE.autoCheck= true来认为是开发模式),仅仅需要配置如下:
ERROR_HANDLER = org.beetl.ext.web.WebErrorHandler

所以这里设置ErrorHandler,使用Beetl提供的org.beetl.ext.web.WebErrorHandler


BeetlConfiguration beetlConfiguration = new BeetlConfiguration();
beetlConfiguration.setErrorHandler(new WebErrorHandler());

再次访问页面可以看到页面中显示了调用栈

SpringBoot集成Beetl后统一处理页面异常的方法

根据环境做不同处理

在实际应用中,开发环境我们希望看到异常信息,生产环境希望看到的是统一的异常提示页面,而不是用户看不懂的代码信息,在org.beetl.ext.web.WebErrorHandler中可以看到


//判断是不是开发者模式,如果不是调用父类方法(默认输出控制台)
if (!Boolean.valueOf(e.gt.getConf().getProperty("RESOURCE.autoCheck"))){
super.processExcption(e, writer);
}

这里通过配置属性ESOURCE.autoCheck= true来认为是开发模式,但是通过BeetlConfiguration.setConfigProperties设置ESOURCE.autoCheck=false后依然无效(模板不会热加载,但是这边依旧当做开发环境),也有可能是我设置不对的原因。
所以通过自定义WebErrorHandler解决此问题,通过判断spring.spring.active去判断当前环境;也可以抛出异常到全局异常统一处理。

来源:https://juejin.im/post/5d5e04ede51d45620c1c53d1

标签:SpringBoot,Beetl,页面异常
0
投稿

猜你喜欢

  • c#实现简单控制台udp异步通信程序示例

    2022-06-13 18:54:38
  • Java异常处理之try...catch...finally详解

    2023-09-17 05:38:24
  • SpringBoot封装响应数据实现过程详解

    2023-01-17 21:32:51
  • Java反射机制的学习总结

    2022-08-30 07:20:39
  • Spring session 获取当前账户登录数的实例代码

    2022-10-17 10:02:05
  • c# wpf如何使用Blend工具绘制Control样式

    2022-10-26 09:35:25
  • 关于使用Mybatisplus自带的selectById和insert方法时的一些问题

    2023-11-01 14:15:42
  • Android 仿微信发动态九宫格拖拽、删除功能

    2022-08-28 12:51:03
  • Android自定义ImageView实现自动放大缩小动画

    2021-11-07 12:24:48
  • 简单聊聊c# 事件

    2022-03-05 06:16:52
  • Android判断设备网络连接状态及判断连接方式的方法

    2023-08-29 16:41:02
  • C++实现softmax函数的面试经验

    2023-06-16 02:07:47
  • SpringBoot整合RedisTemplate实现缓存信息监控的步骤

    2023-10-14 10:17:13
  • Kotlin协程flowOn与线程切换超详细示例介绍

    2022-11-06 08:31:51
  • Spring Boot Security 结合 JWT 实现无状态的分布式API接口

    2021-06-04 05:01:17
  • springboot编程式事务TransactionTemplate的使用说明

    2022-03-01 15:19:37
  • 基于Java实现多线程下载并允许断点续传

    2021-07-19 03:05:52
  • SpringMVC使用RESTful接口案例详解

    2022-08-08 23:41:52
  • SpringBoot整合Mybatis-plus案例及用法实例

    2022-03-31 12:02:44
  • 谈谈对Java中的volatile的理解

    2022-06-28 06:31:26
  • asp之家 软件编程 m.aspxhome.com