freemarker 异常处理

SSH2处理方案:

freemarker文件如果出错,网站的前台页面会报出很明显的错误-焦黄的背景,血红的文字,很不利于用户体验的。如何修改这个问题呢?
首先需要在struts.xml配置文件里添加下面一行代码:

1

<constant name="struts.freemarker.manager.classname" value="net.swiftlet.freemarker.MyFreemarkerManager" />

接着新建MyFreemarkerManager类,如下所示:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

public class MyFreemarkerManager extends org.apache.struts2.views.freemarker.FreemarkerManager

{

private static final Logger LOG = LoggerFactory.getLogger(MyFreemarkerManager.class);

public void init(ServletContext servletContext) throws TemplateException

{

config = createConfiguration(servletContext);

config.setTemplateExceptionHandler(TemplateExceptionHandler.IGNORE_HANDLER);

contentType = DEFAULT_CONTENT_TYPE;

wrapper = createObjectWrapper(servletContext);

if (LOG.isDebugEnabled())

{

LOG.debug("Using object wrapper of class " + wrapper.getClass().getName());

}

config.setObjectWrapper(wrapper);

templatePath = servletContext.getInitParameter(INITPARAM_TEMPLATE_PATH);

if (templatePath == null)

{

templatePath = servletContext.getInitParameter("templatePath");

}

configureTemplateLoader(createTemplateLoader(servletContext, templatePath));

loadSettings(servletContext);

}

}

SpringMVC-Freemarker异常配置

1、spring mvc的异常配置

spring mvc 提供了SimpleMappingExceptionResolver来处理异常,这里的只是由web 请求,经由controller引发的异常,无法处理freemarker的异常

2、freemarker自定义异常

?


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

/**

 * freemarker页面上的异常控制

 * 在webmvc-config.xml里面的freemarkerSettings里头配置

 * @author scipio

 * @created 2014-02-01

 */

public class FreemarkerExceptionHandler implements TemplateExceptionHandler {

    private static final Logger log = LoggerFactory

            .getLogger(FreemarkerExceptionHandler.class);

    public void handleTemplateException(TemplateException te, Environment env,

                                        Writer out) throws TemplateException {

            log.warn("[Freemarker Error: " + te.getMessage() + "]");

            throw new ViewException("freemarker error",te);

    }

}

这里重新包装异常抛出(这种方式要求比较严格,因为freemarker对个别的错误,比如某个变量没有定义,可以忽略,只是后台抛异常,然后整个页面还是会渲染出来)

3、配置HtmlFreeMarkerConfigurer

?


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

 <bean id="freemarkerConfig" class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer">

        <property name="templateLoaderPath" value="/WEB-INF/views/"/>

        <property name="freemarkerSettings">

            <props>

                <prop key="template_update_delay">0</prop>

                <prop key="default_encoding">UTF-8</prop>

                <prop key="locale">zh_CN</prop>

                <prop key="url_escaping_charset">UTF-8</prop>

                <prop key="whitespace_stripping">true</prop>

                <prop key="number_format">#</prop>

                <!-- 配置自定义的freemarker异常处理-->

                <prop key = "template_exception_handler">com.persia.exception.FreemarkerExceptionHandler</prop>

            </props>

        </property>

    </bean>

4、针对该异常,配置web.xml


1

2

3

4

5

<!--配置freemarker异常-->

    <error-page>

        <exception-type>com.persia.exception.ViewException</exception-type>

        <location>/WEB-INF/views/error/viewException.ftl</location>

    </error-page>

时间: 2024-11-06 21:52:55

freemarker 异常处理的相关文章

spring+freemarker+redis

1./pom.xml文件内容: <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">

使用freemarker生成word,步骤详解并奉上源代码

1.   步骤 1.    用word编辑好模板 1. 普通字符串替换为 ${string} 2. 表格循环用标签 <#list userList as user> 姓名:${user.userName} , 性别:${user.sex} </#list> word模板原型如下图: 最终生成的结果如下: 2.    将word模板另存为xml格式 选中 [ 仅保存数据 ] 选择 [ 保持wordML(K) ] 3.    将xml模板文件后缀名改为.ftl 4.    编辑ftl文

freeMarker(八)——程序开发指南之配置(Configuration)

1.基本内容 配置(configuration)就是 freemarker.template.Configuration 对象, 它存储了常用(全局,应用程序级)的设置,定义了想要在所有模板中可用的变量(称为共享变量). 而且,它会处理 Template 实例的新建和缓存. 应用程序典型的用法是使用一个独立的共享 Configuration 实例.更精确来说, 典型的做法是每一个独立开发的组件(比如项目,模块等)都有一个 Configuration 实例,它在内部使用FreeMarker, 每一

springMVC+freemarker

springMVC配置文件 <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans"    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"     xmlns:context="http://www.sp

Spring MVC 环境搭建(maven+SpringMVC+mybatis+Freemarker) ----DawnHeaven

Spring MVC 环境搭建(maven+SpringMVC+mybatis+Freemarker)       ------DawnHeaven 一.准备工作 1.Eclipse Java EE IDE(4.4.1) 2.JDK 3.Tomcat 4.Maven  maven安装指南 二.构建工程 1.file->new->Project 2.next 3. next 4.next 5.finish 工程目录如下 三.完善项目 首先,完善目录,增加重要的source Folder,这个不是

关于FreeMarker自定义TemplateDirectiveModel

ava代码如下: Java代码   import freemarker.core.Environment; import freemarker.template.ObjectWrapper; import freemarker.template.TemplateDirectiveModel; /** * FreeMarker自定义宏 * 获取App下载排行列表 * 参数包括 length(列表长度) mtypeCode(主类型代码) typeCode(小类型代码) rankMode(排行模式1.

freemarker的TemplateExceptionHandler使用

系统使用freemarker作为页面展示层,为了解决系统统一异常的问题.于是配置了struts2的统一异常解决办法(这个网上资料很多,大家可以查看),可是发现freemarker出现异常后,struts2的全局异常处理仍然捕捉不到这个异常.分析源码之后发现struts2的FreemarkerResult在解析FTL文件的时候根据Configuration的属性去判断其属性TemplateExceptionHandler是否为"RETHROW_HANDLER",也就是说是否抛出这个异常,

第十五部分_Struts2.1拦截器深度剖析、异常处理

恢复拦截器:interceptor. 在我们声明拦截器(这时候默认的拦截器就不起作用了)的同时,我们一定要加上struts2提供的默认拦截器(否则访问页面的返回信息可能出乎你的意料,比如提交的表单信息出现一堆乱七八糟的信息),且我们自己声明的拦截器一定要在默认的之前. 使用拦截器的步骤: 定义相应的拦截器类,实现Interceptor或是继承AbstractInterceptor(该抽象类空实现实现了Interceptor接口的init和destroy方法) 在struts.xml中声明拦截器,

SpringMVC同时支持多视图 JSP Velocity Freemarker等 的一种思路实现

第一种方式: 在基于SpringMVC的项目中有时需要同时使用多种视图格式,如jsp,velocity及freemarker等,通过不同的请求路径配置规则,映射到不同的视图文件.下面我提供一种思路,通过视图模板文件后缀名的方式来进行处理.例如: @RequestMapping(value = "/hello") public String jspTest(HttpServletRequest request, ModelMap map) { return "demo.jsp&