设置一个FreemarkerExceptionHandler捕获freemarker页面上的异常

在Freemarker页面中如果使用${userName},并且userName为空,那么Freemarker页面就会崩掉 需要设置默认值${userName!""}来避免对象为空的错误。

同理 ${user.userName}也应该写成这样${(user.userName)!""}

现在有一个需求,就是万一我用了${userName},但是我又不想页面崩掉,怎么办呢?

我的解决方法就是定义一个FreemarkerExceptionHandler捕获freemarker页面上的异常

一、进入SpringMVC的配置文件中,我的是springMVC-servlet.xml文件,配置Freemarker


 
    
    
    
        
        
        
        
        
            org.springframework.web.servlet.view.freemarker.FreeMarkerView
        
    
    
    
    
    
        
            /views/
        
        
            
                5
                UTF-8
                UTF-8
                yyyy-MM-dd HH:mm:ss
                HH:mm:ss
                0.####
                true,false
                true
                auto_detect
                UTF-8
                cn.maple.xueshen.controller.exception.FreemarkerExceptionHandler
            
        
    

注意!!!!上面配置里有这么一句话,作用就是配置你的FreemarkerExceptionHandle的

 cn.xxx.xxx.controller.exception.FreemarkerExceptionHandler

二、自己建一个FreemarkerExceptionHandler 处理器,这个文件位置和名称就是你之前在xml里定义的

/**
 * freemarker页面上的异常控制 在webmvc-config.xml里面的freemarkerSettings里头配置
 */
public class FreemarkerExceptionHandler implements TemplateExceptionHandler {
	private static final Logger log = LoggerFactory
			.getLogger(FreemarkerExceptionHandler.class);

	@Override
	public void handleTemplateException(TemplateException te, Environment env,
			Writer out) throws TemplateException {

		log.warn("[Freemarker Error: " + te.getMessage() + "]");
		String missingVariable = "undefined";
		try {
			String[] tmp = te.getMessageWithoutStackTop().split("\n");
			if (tmp.length > 1)
				tmp = tmp[1].split(" ");
			if (tmp.length > 1)
				missingVariable = tmp[1];

			out.write("[出错了,请联系网站管理员:${ " + missingVariable
					+ "}]");
			log.error("[出错了,请联系网站管理员]", te);
		} catch (IOException e) {
			throw new TemplateException(
					"Failed to print error message. Cause: " + e, env);
		}
	}
}

配置到这里基本就结束了,以下是的我测试:

(1)测试页面代码:


注册





登入



Test FreemarkerExceptionHandler ${name}


(2)没有配置FreemarkerExceptionHandler,页面崩掉图:


设置一个FreemarkerExceptionHandler捕获freemarker页面上的异常_第1张图片


设置一个FreemarkerExceptionHandler捕获freemarker页面上的异常_第2张图片

(3)配置了FreemarkerExceptionHandler处理器后台没有报错,以下是测试效果图:

设置一个FreemarkerExceptionHandler捕获freemarker页面上的异常_第3张图片

最后,想要学习搭建SpringMVC的朋友,可以点击这个链接,这是我写的入门教程,有问题可以跟我交流,一起进步。哈哈 http://blog.csdn.net/maple980326/article/details/51831753





你可能感兴趣的:(Freemarker)