freemarker的TemplateExceptionHandler使用
系统使用freemarker作为页面展示层,为了解决系统统一异常的问题。于是配置了struts2的统一异常解决的方法(这个网上资料非常多,大家能够查看),但是发现freemarker出现异常后,struts2的全局异常处理仍然捕捉不到这个异常。分析源代码之后发现struts2的FreemarkerResult在解析FTL文件的时候依据Configuration的属性去推断其属性TemplateExceptionHandler是否为"RETHROW_HANDLER"。也就是说是否抛出这个异常,假设抛出则因为FremarkerResult的这些代码是由struts2操作的(大家能够看源代码,事实上上终于是由DefaultActionInvocation的executeResult来调用的,这个类是贯穿拦截器、action、result的一个核心调动类。详细的这里我们不做讨论)。所以假设一旦Freemarker抛出异常,则这个异常会被struts2的全局异常处理来解决。否则就会由freemarker自己解决,就会报那种黄色的非常恶心的页面。FreemarkerResult代码截图例如以下:
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvYWNoaWxsZXMxMjM0NQ==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">
当中上边被选中的蓝色部分就是让freemarker自己来处理这个异常。这样struts2就捕捉不到了。那么,默认情况下struts设置的是HTML_DEBUG_HANDLER的,大家能够在TemplateExceptionHandler这个接口的成员变量定义中看到这个静态属性的详细实现代码,顾名思义或者大家去看这个代码,实际上这样的方式就是输出我们平时看到的FTL报空指针等时输出的那堆非常恶心的东西,这个struts2是捕捉不到这个异常的。
问题找到了。解决思路就非常easy了,如今有两种方法:
1)在freemarker.properties中设置:template_exception_handler=rethrow,这个rethrow也是在TemplateExceptionHandler接口中定义的。
2)想办法设置freemarker的Configuration中该变量,比方我们项目中我扩展了struts2的FreemarkerManger。然后在当中设置了这个属性。
好了。以上的问题就说完了。这样处理后struts的全局异常问题就能攻克了。那么万一你使用了sitemesh。并且你在装饰模板的FTL文件里使用了session的属性,相同万一你的session被清空后,也会报一堆黄色的东西,这个struts2也不会捕捉到。这是由于当sitemesh运行自己的逻辑时,strust2的逻辑已经运行完成,所以再抛什么异常struts2是无法获取到的,那么究竟该怎么处理呢?我们会在还有一个博文中对sitemesh的源代码和设计思路进行分析。然后来解决问题。
freemarker的TemplateExceptionHandler使用的更多相关文章
- Freemarker 程序开发
Freemarker 程序开发 现在web开发中,多使用freemarker 来描述页面.通常会使用的macro来定义各种组件,从而达到UI组件的复用.结合使用其它的指定,可快速的描述一个html页面 ...
- Using FreeMarker templates (FTL)- Tutorial
Lars Vogel, (c) 2012, 2016 vogella GmbHVersion 1.4,06.10.2016 Table of Contents 1. Introduction to F ...
- Java导出Word利用freemarker(含图片)
制作Word模版 建议使用高版本的office做,尽量不要用WPS做,生成xml会出现乱码 编码要统一,推荐UTF-8 建好模板,将模板另存为xml格式,建议原来模板不要删,xml的如果后期打不开,还 ...
- freemarker
一.下载freemarker的jar包,到maven仓库下载 二.引入jar包,参考freemarker的手册写代码 1.Test.ftlh <!DOCTYPE html> <htm ...
- freemarker小例子
1.在D盘下创建一个目录D:\\freemarker 2.在以上目录中放入一个模板文件test.ftl,内容如下: 第一个测试程序:${abc} 3.java代码如下(需要导入freemark ...
- Java模板引擎 FreeMarker
@(编程) [TOC] 1. 简介 FreeMarker是一个模板引擎,一个基于模板生成文本输出的通用工具,使用纯Java编写.它是为Java程序员提供的一个开发包.它不是面向最终用户的,而是为程序员 ...
- FreeMarker 生成Java、mybatis文件
FreeMarker 生成Java.mybatis文件 将mysql数据库表通过FreeMarker生成对应的Java文件和对应的mybatis文件. FreeMarker是一款模板引擎: 即一种基于 ...
- springboot中使用freemarker生成word文档并打包成zip下载(简历)
一.设计出的简历模板图以及给的简历小图标切图 二.按照简历模板图新建简历word文件 :${字段名},同时将图片插入到word中,并将建好的word文件另存为xml文件: 三.直 ...
- freeMarker(八)——程序开发指南之配置(Configuration)
学习笔记,选自freeMarker中文文档,译自 Email: ddekany at users.sourceforge.net 1.基本内容 配置(configuration)就是 freemark ...
随机推荐
- 使用MongoDB的开源项目(转)
根据谷歌的搜索结果筛选出来的. 统计应用 counlty https://count.ly/ mongopress 开源CMS系统 http://www.mongopress.org/ Rubedo ...
- 基于visual Studio2013解决算法导论之052深度优先
题目 深度优先 解决代码及点评 // 深度优先.cpp : 定义控制台应用程序的入口点. // // 图的邻接表表示.cpp : 定义控制台应用程序的入口点. // #include < ...
- 给centOs添加epel源
epel简介: https://fedoraproject.org/wiki/EPEL/zh-cn 1. rpm -Uvh http://dl.fedoraproject.org/pub/epel/5 ...
- go - 变量和常量
1.定义变量 goLang中定义变量的方式很多 先声明再使用:如果定义的变量未使用编译时会报错 a. /*定义单个变量*/ var varName type //定义一个 type 类型的变量 var ...
- iOS swift lazy loading
Why bother lazy loading and purging pages, you ask? Well, in this example, it won't matter too much ...
- 设置VIM的配色方案
[转]Ubuntu的VIM的默认颜色难看死了,蓝色的注释基本上看不到. 查看有多少配色方案: $ ls /usr/share/vim/vim72/colors 发现有以下文件 blue.vim ...
- ultraedit比较两个文件差异经验
链接地址:http://jingyan.baidu.com/article/fcb5aff7876551edab4a714b.html 程序开发人员经常要使用到两个文件的对比,有很多工具可以实现该功能 ...
- JSP两个动作(include,forward)
include动作 <div id="container"> <jsp:include page="HelloWorld.jsp" flush ...
- 一天一个类,一点也不累 之 LinkedList
我们的口号是,一天一个类,一点也不累 .. 今天要讲的是---LinkedList 首先,还是看看他的组织结构 Class LinkedList<E> java.lang.Object j ...
- 自定义类似QMutexLocker的CMutexLocker
最近做项目遇到一个需求,有一个buttonSlot()执行要耗点时间,为了防止用户无限制的乱点出现问题,考虑加一个互斥锁,使得每次执行完后才允许执行下一次.大概意思是: //QMutex m_mut ...