文档章节

freemarker的TemplateExceptionHandler使用

宇宙星星
 宇宙星星
发布于 2017/08/01 10:44
字数 685
阅读 14
收藏 0
点赞 0
评论 0

系统使用freemarker作为页面展示层,为了解决系统统一异常的问题。于是配置了struts2的统一异常解决办法(这个网上资料很多,大家可以查看),可是发现freemarker出现异常后,struts2的全局异常处理仍然捕捉不到这个异常。分析源码之后发现struts2的FreemarkerResult在解析FTL文件的时候根据Configuration的属性去判断其属性TemplateExceptionHandler是否为"RETHROW_HANDLER",也就是说是否抛出这个异常,如果抛出则由于FremarkerResult的这些代码是由struts2操作的(大家可以看源码,其实上最终是由DefaultActionInvocation的executeResult来调用的,这个类是贯穿拦截器、action、result的一个核心调动类,具体的这里我们不做讨论),所以如果一旦Freemarker抛出异常,则这个异常会被struts2的全局异常处理来解决,否则就会由freemarker自己解决,就会报那种黄色的很恶心的页面。FreemarkerResult代码截图如下:

其中上边被选中的蓝色部分就是让freemarker自己来处理这个异常,这样struts2就捕捉不到了。那么,默认情况下struts设置的是HTML_DEBUG_HANDLER的,大家可以在TemplateExceptionHandler这个接口的成员变量定义中看到这个静态属性的具体实现代码,顾名思义或者大家去看这个代码,实际上这种方式就是输出我们平时看到的FTL报空指针等时输出的那堆很恶心的东西,这个struts2是捕捉不到这个异常的。

问题找到了,解决思路就很简单了,现在有两种方法:

         1)在freemarker.properties中设置:template_exception_handler=rethrow,这个rethrow也是在TemplateExceptionHandler接口中定义的;
         2)想办法设置freemarker的Configuration中该变量,比如我们项目中我扩展了struts2的FreemarkerManger,然后在其中设置了这个属性。

        好了,以上的问题就说完了,这样处理后struts的全局异常问题就能解决了。那么万一你使用了sitemesh,而且你在装饰模板的FTL文件中使用了session的属性,同样万一你的session被清空后,也会报一堆黄色的东西,这个struts2也不会捕捉到,这是因为当sitemesh执行自己的逻辑时,strust2的逻辑已经执行完毕,所以再抛什么异常struts2是无法获取到的,那么到底该怎么处理呢?我们会在另一个博文中对sitemesh的源码和设计思路进行分析,然后来解决这个问题。

版权声明:本文为博主原创文章,未经博主允许不得转载。

本文转载自:http://blog.csdn.net/achilles12345/article/details/40423835

共有 人打赏支持
宇宙星星
粉丝 15
博文 15
码字总数 1753
作品 0
兰州
程序员
freemaker开发学习《一》

 FreeMarker是一个非常优秀的模板引擎,这个模板引擎可用于任何场景,FreeMarker负责将数据模型中的数据合并到模板中,从而生成标准输出.FreeMarker可以提供昜好的团队协作,对于界面开发人...

xiaml
2014/04/25
0
0
FreeMarker在eclipse中的入门例子

刚接触FreeMarker时,只是简单的了解FreeMarker的一些概念及工作原理,至于如何使用FreeMarker还不是非常清楚。随着学习的深入,才渐渐对FreeMarker有了更深入的理解。本文将从基础应用着手,...

oecp
2011/05/16
0
0
细数FreeMarker的优缺点

一、 FreeMarker简介 FreeMarker是一个用Java语言编写的模板引擎,它基于模板来生成文本输出。 所谓模板,就是一份已经写好了基本内容,有着固定格式的文档,其中空出或者用占位符标识的内容...

oecp
2011/04/22
0
3
Struts2与Freemarker的配置方法(附源码和插件)

Freemarker是模板引擎,也可以说是一种表现层的框架,它有自己的模板指令,开发者如果不熟悉这些语法,很难进行表现层的开发。Struts2框架技术对Freemarker做了很好的支持,开发人员只要熟悉...

oecp
2011/04/28
0
0
FreeMarker在eclipse中的入门例子

今天海浪为大家分享一个FreeMarker在eclipse中的入门例子。 一、在eclipse中创建FreeMarker模板 在FreeMarker中模板的概念就是:包含一些由${…}包围的特殊代码的文件。这些特殊代码是FreeM...

oecp
2011/04/26
0
0
freemarker 的ObjectWrapper Settings

关于 struts2 和freemarker合作来处理 map 类型的情况: struts2 官方如下说: Once you get familiar with FreeMarker, you will find certain subtletieswith it that may become frustra......

贰拾壹
2014/03/07
0
2
Eclipse安装Freemarker Editor插件

Eclipse安装Freemarker Editor插件 在下面网址里下载freemarker-ide: http://sourceforge.net/projects/freemarker-ide/files/ http://sourceforge.net/projects/freemarker-ide/files/ 下载......

风中帆
2015/02/10
0
1
手把手教你新建Jfinal 项目(五)

Freemarker原理解析 2011-05-13 11:19:41| 分类: JavaEE | 标签:freemarker 模板 变量 数据模型 文件 |字号 订阅 FreeMarker生成静态页原理 FreeMarker适合于作为Web应用的表现层。freemar...

胡萝卜炒肉
2014/05/29
0
1
Freemarker中如何遍历List

Freemarker中如何遍历List摘要:在Freemarker应用中经常会遍历List获取需要的数据,并对需要的数据进行排序加工后呈现给用户。那么在Freemarker中如何遍历List,并对List中数据进行适当的排序...

oecp
2011/05/18
0
0
freemarker与JSP在同一页面中使用

先申明, 这个实践非常不好, 只有在某些时间确实需要这玩意的时候才使用. 原理很简单, 使用HTML的注释<!--内容--> 因为JSP的注释是<%--内容--%>, freemarker的注释是<#--内容-->, 而JSP/freem...

juqkai
2013/07/24
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

Spring基础

Spring是什么? Spring是一个开源框架,最早由Rod Johnson创建,它解决的是业务逻辑层和其他各层的松耦合问题。 经过十几年的发展,Spring正在扩展其他的领域,如:移动开发、社交API集成、N...

这很耳东先生
3分钟前
0
0
面试系列-40个Java多线程问题总结

前言 这篇文章主要是对多线程的问题进行总结的,因此罗列了40个多线程的问题。 这些多线程的问题,有些来源于各大网站、有些来源于自己的思考。可能有些问题网上有、可能有些问题对应的答案也...

Ryan-瑞恩
16分钟前
0
0
微信分享的细节

分享的缩略图要求: 一、图片大小小于32k 二、图片的尺寸为 宽度 :128px 高度:128px 分享title 和 description 出现金额等 以上情况存在会导致触发分享按钮 但是页面没有反应...

Js_Mei
22分钟前
0
0
【2018.07.23学习笔记】【linux高级知识 Shell脚本编程练习】

1、编写shell脚本,计算1-100的和; #!/bin/bashsum=0for i in `seq 1 100`do sum=$[$sum+$i]doneecho $sum 2、编写shell脚本,要求输入一个数字,然后计算出从1到输入数字的和,要求...

lgsxp
24分钟前
0
0
xss攻防浅谈

导读 XSS (Cross-Site Script) 攻击又叫跨站脚本攻击, 本质是一种注入攻击. 其原理, 简单的说就是利用各种手段把恶意代码添加到网页中, 并让受害者执行这段脚本. XSS能做用户使用浏览器能做的...

吴伟祥
24分钟前
0
0
js回调的一次应用

function hideBtn(option) { if (option == 1) { $("#addBtn").hide(); $("#addSonBtn").hide(); }}$("body").on("click", "#selectBtn", function () {......

晨猫
31分钟前
0
0
C++_读写ini配置文件

1.WritePrivateProfileString:

一个小妞
31分钟前
0
0
通往阿里,BAT的50+经典Java面试题及答案解析(上)

Java是一个支持并发、基于类和面向对象的计算机编程语言。下面列出了面向对象软件开发的优点: 代码开发模块化,更易维护和修改。 代码复用。 增强代码的可靠性和灵活性。 增加代码的可理解性...

Java大蜗牛
31分钟前
1
0
数据库两大神器【索引和锁】

前言 只有光头才能变强 索引和锁在数据库中可以说是非常重要的知识点了,在面试中也会经常会被问到的。 本文力求简单讲清每个知识点,希望大家看完能有所收获 声明:如果没有说明具体的数据库...

Java3y
35分钟前
0
0
Application Express安装

Application Express安装文档 数据库选择和安装 数据库选择 Oracle建议直接12.2.0.1.0及以上的版本,12.1存在20618595bug(具体可参见官方文档) Oracle 12c 中安装oracle application expr...

youfen
47分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部