zoukankan      html  css  js  c++  java
  • freeMarker异常处理

    https://blog.csdn.net/lyd135364/article/details/50826899

    转载自点击打开链接

     

    可能的异常

    关于FreeMarker发生的异常,可以分为如下几类:

    • 当加载和解析模板时发生异常:调用Configuration.getTemplate()方法,FreeMarker就要把模板文件加载到内存中然后来解析它。在这期间,有两种异常可能发生:
      • 因模板文件没有找到而发生的IOExceptio一场,或在读取文件时发生其他I/O问题。比如没有读取权限,或者磁盘错误。
      • 根据FTL语言的规则,模板文件发生语法错误时会导致freemarker.core.ParseException一场。当获得Template对象(Configuration.getTemplate)时,这种错误就会发生,而不是执行(Template.process)模板的时候。这种异常是IOException异常的一个子类。
    • 当执行模板时发生的异常,也就是当调用了Template.process()方法时会发生的两种异常:
      • 当试图写入输出对象时发生错误而导致的IOException异常
      • 当执行模板时发生的其他问题而导致的freemarker.template.TemplateException异常。比如,当模板引用一个不存在的变量。在默认情况下,当TempalteException异常发生时,FreeMarker会用普通文本格式在输出中打印出FTL的错误信息和堆栈跟踪信息。然后再次抛出TemplateException异常而中止模板的执行,然后就可以捕捉到Tempalte.process()方法抛出的异常了。这种行为是可以定制的。

    异常处理器 TemplateExceptionHandler

    TemplateException 异常在模板处理期间的抛出是由 freemarker.template.TemplateExceptionHandler 对象控制的,这个对象可以使用 setTemplateExceptionHandler() 方法配置到 Configuration 对象中。

    TemplateExceptionHandler对象只包含一个方法:

    [html] view plain copy
     
     
     
     在CODE上查看代码片派生到我的代码片
    1. void handleTemplateException(TemplateException te, Environment env, Writer out) throws TemplateException;  

    无论 TemplateException 异常什么时候发生,这个方法都会被调用。

    如果方法抛出异常,那么模板的执行就会中止,而且Template.process() 方法也会抛出同样的异常。如果 handleTemplateException 对象不抛出异常,那么模板将会继续执行,就好像什么也没发生过一样,但是引发异常的语句将会被跳过。

    当TempalteExceptionHandler被调用前,FreeMarker将会记录异常日志。

    例如:

    [html] view plain copy
     
     
     
     在CODE上查看代码片派生到我的代码片
    1. class MyTemplateExceptionHandler implements TemplateExceptionHandler {  
    2.     public void handleTemplateException(TemplateException te, Environment env, java.io.Writer out)  
    3.     throws TemplateException {  
    4.         try {  
    5.             out.write("[ERROR: " + te.getMessage() + "]");  
    6.         } catch (IOException e) {  
    7.             throw new TemplateException("Failed to print error message. Cause: " + e, env);  
    8.         }  
    9.     }  
    10. }  
    11. ...  
    12. cfg.setTemplateExceptionHandler(new MyTemplateExceptionHandler());  

    FreeMarker本身带有的预先编写的错误控制器

    • TemplateExceptionHandler.DEBUG_HANDLER —— 打印堆栈信息和重新抛出异常。这是默认的异常控制器
    • TemplateExceptionHandler.HTML_DEBUG_HANDLER —— 和DEBUG_HANDLER相同,但是可以格式化堆栈跟踪信息,HTML页面,建议使用它而不是DEBUG_HANDLER
    • TemplateExceptionHandler.IGNORE_HANDLER —— 简单地压制所有异常。它对处理异常没有任何作用,也不会重新抛出异常
      • TemplateExceptionHandler.RETHROW_HANDLER —— 简单重新抛出所有异常而不会做其他的事情。这个控制器对Web应用很好,因为它在生成的页面发生错误的情况下,给了对Web应用的更多的控制权
  • 相关阅读:
    swoole 安装方法 使用即时聊天
    git的介绍以及简单应用
    curl的应用
    linux下监听和同步代码配置
    mac skim 修改背景色
    php 编译安装的一个 configure 配置
    mac mysql error You must reset your password using ALTER USER statement before executing this statement.
    yii2 控制器里 action 大小写组合造成的路由问题
    warning : json_decode(): option JSON_BIGINT_AS_STRING not implemented in xxx
    redis 自启动脚本
  • 原文地址:https://www.cnblogs.com/linus-tan/p/12597187.html
Copyright © 2011-2022 走看看