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());
再次访问页面可以看到页面中显示了调用栈
根据环境做不同处理
在实际应用中,开发环境我们希望看到异常信息,生产环境希望看到的是统一的异常提示页面,而不是用户看不懂的代码信息,在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


猜你喜欢
- 1、功能需求本实例将通过c# winform实现简单的分页功能,需要的基础知识有SQL语句,c#语言基础以及c# winform的一些简单知
- 缘起工作时使用java开发服务器后台,用Jersey写Restful接口,发现有一个Post方法始终获取不到参数,查了半天,发现时获取参数的
- 这篇文章主要介绍了SpringBoot如何通过devtools实现热部署,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考
- 本文实例讲述了C#使用oledb操作excel文件的方法。分享给大家供大家参考。具体分析如下:不管什么编程语言都会提供操作Excel文件的方
- 本文是针对AndBase框架学习整理的第三篇笔记,想要了解AndBase框架的朋友可以阅读本文,大家共同学习。学习内容:1.使用AndBas
- 本文实例为大家分享了java生成字母验证码的具体代码,供大家参考,具体内容如下import java.awt.BasicStroke;imp
- LinkedList实现班级信息管理系统,供大家参考,具体内容如下代码如下:import java.util.*;public class
- 配置文件-yaml在spring Boot开发中推荐使用yaml来作为配置文件。基本语法:key: value;kv之间有空格大小写敏感使用
- 在练习Java的Scanner时,EditPlus如何读取从键盘输入的数呢?例如如下程序,编译通过,运行时却输入不了数据:package m
- 根据列表的适配器类型,列表分为三种,ArrayAdapter,SimpleAdapter和SimpleCursorAdapter,这三种适配
- 本文实例为大家分享了Java实现计算器设计的具体代码,供大家参考,具体内容如下需求分析目的是实现一个基于Java的可以求解带括号加减乘除表达
- 这种结果的原因在于,Random()函数的默认种子是时间,但在循环中产生随机数时,由于运算速度太快,用做种子的时间是相同的(毫秒级),因此产
- 这个其实很简单,思路是这样的,就是拿view的宽度,除以点的点的宽度+二个点 之间的间距,就可以算出大概能画出几个点
- 在谈 Volatile 之前,我们先回顾下 Java 内存模型 的三要素:原子性、可见性、有序性,也就是大家常提到的并发编程三要素。并发编程
- redis实现了对数据的缓存,在项目里一些字典数据,会话数据,临时性数据都会向redis来存储,而在springboot里对redis也有支
- 平时开发中经常遇到的很小的问题,这里记录一下。一般在AndroidManifest.xml中添加了android:windowSoftInp
- HttpServletRequest对象代表客户端的请求,当客户端通过HTTP
- 最近接触到个新项目,发现它用了一个比较有意思的框架,可以说实现了我刚入行时候的梦想,所以这里马不停蹄的和大家分享下。在我刚开始工作接触的项目
- java 中 System.out.println()和System.out.write()的区别.这两个函数一个是System
- Ben Evans是一名资深培训师兼顾问,他在演讲可视化垃圾回收中从基础谈起讨论了垃圾回收。以下是对其演讲的简短总结。基础当谈到释放不再使用