一、spring mvc的异常配置java
spring mvc 提供了SimpleMappingExceptionResolver来处理异常,这里的只是由web 请求,经由controller引起的异常,没法处理freemarker的异常web
二、freemarker自定义异常spring
/** * 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对个别的错误,好比某个变量没有定义,能够忽略,只是后台抛异常,而后整个页面仍是会渲染出来)api
三、配置HtmlFreeMarkerConfigurermvc
<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>
四、针对该异常,配置web.xmlapp
<!--配置freemarker异常--> <error-page> <exception-type>com.persia.exception.ViewException</exception-type> <location>/WEB-INF/views/error/viewException.ftl</location> </error-page>