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> |