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>
 

最新文章

  1. Oracle数据库常见的误操作恢复方法(上)
  2. css3 3d效果及动画学习
  3. notepad++ erlang开发环境设置
  4. centos下卸载rpm包
  5. Android开发之消息机制
  6. 全局负载均衡GSLB之“部署篇”
  7. 怎么看时序图--nand flash的读操作详解(转载)
  8. js内置函数大全及基本使用方法(一)
  9. ConcurrentHashMap和HashTable的区别
  10. ruban后台项目启动。进入断点
  11. Game Engine Architecture 11
  12. 几种序列化协议(protobuf,xstream,jackjson,jdk,hessian)相关数据对比
  13. MySQL表的定期分析检查优化
  14. update-alternatives符号连接的层数过多
  15. Markdown画各种图表
  16. 早前阅读live555源码做的笔记
  17. quartz 任务时间调度入门使用
  18. Controller组件- 集合点的功能-loadrunner
  19. 水晶报表VS2010防止出现用户登录问题
  20. RSA加密算法和签名算法

热门文章

  1. springboot1.4下hystrix dashboard Unable to connect to Command Metric Stream解决办法
  2. IOS开发UI篇之──自定义加载等待框(MBProgressHUD)
  3. Win7 maven安装及配置
  4. Chocolate Bar(暴力)
  5. 【转】在服务器上排除问题的头五分钟&amp;常用命令
  6. java integer String之equals vs ==
  7. Android程序运行时权限与文件系统权限的区别
  8. 博客没内容可写了怎么办?找BD!
  9. 安装MYSQL时出现libaio.so.1 is needed by MySQL-server-5.5,49.1等等
  10. 高斯过程(GP)