㈠ springmvc+freemarker
用c:forEach 標簽,<c:forEach var="user" items="${ulist}" >
裡面取Users類屬性 循環 即可
</c:forEach>
㈡ jsp spring mvc freemarker 哪個好
jsp和freemarker比較起來,自然是jsp好一點,freemarker 只是常用功能較多(html過濾,日期金額格式化)現在el表達式也可以輕松實現這些東西。而jsp可以寫後台代碼。
㈢ springmvc怎麼使用freemarker
直接加入freemarker的jar包就可以使用了,不需要有什麼額外的配置。
㈣ springmvc整合freemarker怎麼弄
一、 用macro實現自定義指令,例如:
自定義指令可以使用macro指令來定義。
<#macro greet person>
<font size="+2">Hello ${person}!</font>
</#macro>
macro指令自身不列印任何內容,它只是用來創建宏變數,所以就會有一個名為greet的變數。
使用這個宏:
<@greet person="Fred"/>
會列印出:
<font size="+2">Hello Fred!</font>
二、用java代碼標簽實現自定義指令:
可以使用TemplateDirectiveModel介面在Java代碼中實現自定義指令。
簡單示例如下:
1、實現TemplateDirectiveModel介面。
public class UpperDirective implements TemplateDirectiveModel {
public void execute(Environment env,
Map params, TemplateModel[] loopVars,
TemplateDirectiveBody body)
throws TemplateException, IOException {
if (!params.isEmpty()) {
throw new TemplateModelException(
"parameters 此處沒有值!");
}
if (loopVars.length != 0) {
throw new TemplateModelException(
" variables 此處沒有值!");
}
if (body != null) {
//執行nested body 與FTL中 <#nested> 類似。
body.render(new UpperCaseFilterWriter(env.getOut()));
} else {
throw new RuntimeException("missing body");
}
}
private static class UpperCaseFilterWriter extends Writer {
private final Writer out;
UpperCaseFilterWriter (Writer out) {
this.out = out;
}
public void write(char[] cbuf, int off, int len)
throws IOException {
char[] transformedCbuf = new char[len];
for (int i = 0; i < len; i++) {
transformedCbuf[i] = Character.toUpperCase(cbuf[i + off]);
}
out.write(transformedCbuf);
}
public void flush() throws IOException {
out.flush();
}
public void close() throws IOException {
out.close();
}
}
}
說明:<#nested>指令執行位於開始和結束標記指令之間的模板代碼段。
2、注入FreeMarkerConfigurer的freemarkerVariables中。
例如:在jeecms-servlet-front.xml
<entry key="upper" value-ref="upper"/>
<bean id="upper" class="com.example.UpperDirective" />
說明:
FreeMarkerConfigurer. 、setFreemarkerVariables(Map<String,Object> variables)
底層調用了FreeMarker的Configuration.setAllSharedVariables()方法。
因為更好的實踐是將常用的指令作為共享變數放到Configuration中。
3、調用自定義指令:
[@upper]
bar
[#list ["red", "green", "blue"] as color]
${color}
[/#list]
baaz
[/@upper]
4、顯示輸出結果:
BAR RED GREEN BLUE BAAZ
㈤ SpringMVC中使用freemarker需要配置哪些信息
<bean id="freeMarkerTemplate" class="platform.ecation.visualization.app.front.utils.FreeMarkerTemplate">
<property name="freeMarkerConfigurer" ref="freeMarkerConfigurer" />
</bean>
<!--配置Freemarker -->
<bean id="freeMarkerConfigurer" class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer">
<property name="templateLoaderPath" value="/WEB-INF/ftl/" />
<property name="freemarkerSettings">
<props>
<prop key="template_update_delay">10</prop>
<prop key="defaultEncoding">UTF-8</prop>
</props>
</property>
</bean>
㈥ springmvc怎麼配置freemarker
一、從freemarker談起
Freemarker使用模板技術進行視圖的渲染。自從看了Struts標簽、Freemarker、JSTL的性能對比後,我毅然決定放棄Struts標簽了!效率太差……
Spring本身支持了對Freemarker的集成。只需要配置一個針對Freemarker的視圖解析器即可。
二、Spring MVC視圖解析器
視圖解析器的工作流程大致是這樣的:Controller的某個方法執行完成以後,返回一個視圖(比如:listUser),視圖解析器要做的工作就是找到某個對象來完成視圖的渲染,或者跳轉到其他的邏輯視圖。這里的渲染對象通常就是我們的jsp文件或者我們下面用的Freemarker(例如listUser.jsp或者listUser.ftl)。渲染完成以後,將解析結果發送到客戶端瀏覽器
下面介紹一下本文需要用到的解析器(更多解析器資料,請參考http://e-freya.iteye.com/blog/384083):
InternalResourceViewResolver:這是一個最常用的解析器。通常使用它指定渲染對象為jsp頁面
FreeMarkerViewResolver:這就是Spring與Freemarker整合需要用到的解析器
三、配置多視圖,支持freemarker
我們通常不希望所有的動態頁面請求都使用Freemarker來渲染,那就需要配置多個視圖解析器。網上有很多這方面的帖子。我看到很多人的做法是在web.xml中配置兩個DispatcherServlet,一個攔截*.do,一個攔截*.ftl;然後再寫兩個dispatcherServlet.xml,配置兩個視圖解析器;jsp頁面、ftl模板就各司其職。
其實沒有那麼復雜。
1.Web.xml
<?xmlversion="1.0"encoding="UTF-8"?>
<web-appversion="2.4"xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
<!--========================================================-->
<!--SpringMVCConfigServlet-->
<!--========================================================-->
<!--JSPDispatcherServlet-->
<servlet>
<servlet-name>dispatcher</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/classes/applicationContext.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<!--========================================================-->
<!--SpringMVCConfigMapping-->
<!--========================================================-->
<servlet-mapping>
<servlet-name>dispatcher</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
</web-app>
2.dispatcherServlet.xml
<?xmlversion="1.0"encoding="UTF-8"?>
<beansxmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:p="http://www.springframework.org/schema/p"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xsi:schemaLocation="
http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans-2.5.xsd
http://www.springframework.org/schema/txhttp://www.springframework.org/schema/tx/spring-tx-2.5.xsd
http://www.springframework.org/schema/aophttp://www.springframework.org/schema/aop/spring-aop-2.5.xsd
http://www.springframework.org/schema/contexthttp://www.springframework.org/schema/context/spring-context-2.5.xsd
http://www.springframework.org/schema/mvchttp://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd">
<!--通用視圖解析器-->
<beanid="viewResolverCommon"class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<propertyname="prefix"value="/WEB-INF/page/"/>
<propertyname="suffix"value=".jsp"/><!--可為空,方便實現自已的依據擴展名來選擇視圖解釋類的邏輯-->
<propertyname="viewClass">
<value>org.springframework.web.servlet.view.InternalResourceView</value>
</property>
<propertyname="order"value="1"/>
</bean>
<!--配置freeMarker視圖解析器-->
<beanid="viewResolverFtl"class="org.springframework.web.servlet.view.freemarker.FreeMarkerViewResolver">
<propertyname="viewClass"value="org.springframework.web.servlet.view.freemarker.FreeMarkerView"/>
<propertyname="contentType"value="text/html;charset=utf-8"/>
<propertyname="cache"value="true"/>
<propertyname="suffix"value=".ftl"/>
<propertyname="order"value="0"/>
</bean>
<!--配置freeMarker的模板路徑-->
<beanid="freemarkerConfig"class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer">
<propertyname="templateLoaderPath">
<value>/WEB-INF/ftl/</value>
</property>
<propertyname="freemarkerVariables">
<map>
<entrykey="xml_escape"value-ref="fmXmlEscape"/>
</map>
</property>
<propertyname="defaultEncoding">
<value>utf-8</value>
</property>
<propertyname="freemarkerSettings">
<props>
<propkey="template_update_delay">3600</prop>
</props>
</property>
</bean>
<beanid="fmXmlEscape"class="freemarker.template.utility.XmlEscape"/>
<!--註解支持-->
<mvc:annotation-driven/>
<!--對包中的所有類進行掃描,以完成Bean創建和自動依賴注入的功能-->
<context:component-scanbase-package="com.hl.usersmanager">
<!--允許定義過濾器將基包下的某些類納入或排除
<context:include-filtertype="annotation"expression="org.springframework.stereotype.Controller"/>-->
</context:component-scan>
</beans>
3.Controller
Java代碼
packagecom.hl.usersmanager.controller;
importjava.util.List;
importorg.springframework.beans.factory.annotation.Autowired;
importorg.springframework.stereotype.Controller;
importorg.springframework.ui.ModelMap;
importorg.springframework.web.bind.annotation.RequestMapping;
importcom.hl.usersmanager.model.Users;
importcom.hl.usersmanager.service.IUserService;
@Controller
publicclassUserController{
//使用註解實現自動裝配不需要再寫getset方法以及在context中配置bean
@Autowired
;
@RequestMapping(value="findUserByName.do")
publicStringfindUserByName(Stringname,ModelMapmodel){
Usersusers=userService.findUserByName(name);
model.addAttribute("userPhone",users.getPhone());
System.out.println("userPhone:"+users.getPhone());
return"showUser";
}
@RequestMapping(value="findAllUsers.do")
publicStringfindAllUsers(ModelMapmodel){
List<Users>users=userService.findAllUsers();
model.addAttribute("users",users);
return"listUser";
}
……
}
在視圖解析器中有一個<property name="order" value="orderValue"/>的配置,這個配置表示解析器的優先順序別。我們將FreeMarkerViewResolver的級別設為0,將InternalResourceViewResolver的級別設為1。這樣,解析器就會優先使用 FreeMarkerViewResolver進行解析,如果找不到相應的模板,就使用InternalResourceViewResolver進行解析,如果還找不到頁面,就會產生一個404錯誤!
在本例中,我們在/WEB-INF/page/下有一個showUser.jsp頁面,在/WEB-INF/ftl/下有一個listUser.ftl的模板文件。那麼當訪問findAllUsers.do的時候,Controller返回一個listUser視圖,根據解析器配置,先使用FreeMarkerViewResolver進行解析。它會根據模板路徑templateLoaderPath的配置/WEB-INF/ftl/下去找是否有一個listUser並且以後綴配置suffix值.ftl,即listUser.ftl文件,如果找到則使用該模板進行解析。這里我們實現已經創建了這個模板文件,所以user列表成功被顯示出來。
當用戶訪問findUserByName.do的時候,返回showUser視圖,毅然先使用FreeMarkerViewResolver進行解析,結果發現在/WEB-INF/ftl/下並沒有showUser.ftl這個模板文件,於是使用InternalResourceViewResolver進行解析,於是開始尋找/WEB-INF/page/下是否有showUser.jsp文件。由於我們已經創建了這個文件,於是最終使用showUser.jsp進行渲染。那麼如果沒有找到showUser.jsp,就會拋出404錯誤。
這里還要注意的是,如果Controller中返回視圖加了後綴jsp或者ftl,在配置中就不要加入suffix配置,否則會找不到頁面。
㈦ spring boot中怎麼使用freemarker
這個很簡單,添加進freemarker的jar,就可以直接使用了,不需要再有什麼額外的配置。
㈧ springframework freemarker 在哪個包里
1、 新建WebProject,工程名稱是SpringFreemarker;然後手動添加jar包,需要的jar包如下:
SpringFramework jar包下載地址:
http://ebr.springsource.com/repository/app/library/version/detail?name=org.springframework.spring&version=3.0.5.RELEASE
FreeMarker library下載地址:
http://ebr.springsource.com/repository/app/bundle/version/detail?name=com.springsource.freemarker&version=2.3.15
當然你也可以去官方下載
2、 在web.xml中添加如下配置:
<!-- 載入Spring容器配置 -->
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<!-- 設置Spring容器載入配置文件路徑 -->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath*:applicationContext-*.xml</param-value>
</context-param>
<servlet>
<servlet-name>dispatcher</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/dispatcher.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>dispatcher</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
上面分別是添加Spring的監聽器、以及配置Spring的配置文件、還有SpringMVC的控制器;
3、 在WEB-INF中添加文件dispatcher.xml,和web.xml中的對應。內容如下:
<?xmlversion="1.0"encoding="UTF-8"?>
<beansxmlns="http://www.springframework.org/schema/beans"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:util="http://www.springframework.org/schema/util"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans >
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.0.xsd
http://www.springframework.org/schema/util
http://www.springframework.org/schema/util/spring-util-3.0.xsd"
<context:component-scanbase-package="com.hoo"/>
<!-- annotation的方法映射適配器
<bean id="handlerAdapter" class="org.springframework.web.servlet.mvc.annotation."/>
-->
<!-- annotation默認的方法映射適配器 -->
<beanid="handlerMapping"
class="org.springframework.web.servlet.mvc.annotation."/>
<beanclass="org.springframework.web.servlet.view.InternalResourceViewResolver">
<propertyname="viewClass"value="org.springframework.web.servlet.view.JstlView"/>
</bean>
</beans>
上面是SpringMVC的基本配置
4、 在src中添加applicationContext-beans.xml,內容如下:
<?xmlversion="1.0"encoding="UTF-8"?>
<beansxmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:util="http://www.springframework.org/schema/util"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans >
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
http://www.springframework.org/schema/util
http://www.springframework.org/schema/util/spring-util-3.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.0.xsd"
</beans>
裡面可以添加一些bean的配置
5、 在src目錄添加freemarker.properties配置文件,這個文件是freemarker一些常用的轉換,內容如下:
tag_syntax=auto_detect
template_update_delay=2
default_encoding=UTF-8
output_encoding=UTF-8
locale=zh_CN
date_format=yyyy-MM-dd
time_format=HH:mm:ss
datetime_format=yyyy-MM-dd HH:mm:ss
6、 在dispatcher.xml中添加freemarker的配置,配置如下:
<!-- 設置freeMarker的配置文件路徑 -->
<beanid="freemarkerConfiguration"class="org.springframework.beans.factory.config.PropertiesFactoryBean">
<propertyname="location"value="classpath:freemarker.properties"/>
</bean>
<!-- 配置freeMarker的模板路徑 -->
<beanid="freemarkerConfig"class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer">
<!--property name="freemarkerSettings" ref="freemarkerConfiguration"/-->
<propertyname="templateLoaderPath">
<value>/WEB-INF/ftl/</value>
</property>
<propertyname="freemarkerVariables">
<map>
<entrykey="xml_escape"value-ref="fmXmlEscape"/>
</map>
</property>
</bean>
<beanid="fmXmlEscape"class="freemarker.template.utility.XmlEscape"/>
<!-- 配置freeMarker視圖解析器 -->
<beanid="viewResolver"class="org.springframework.web.servlet.view.freemarker.FreeMarkerViewResolver">
<propertyname="viewClass"value="org.springframework.web.servlet.view.freemarker.FreeMarkerView"/>
<propertyname="viewNames"value="*.ftl"/>
<propertyname="contentType"value="text/html; charset=utf-8"/>
<propertyname="cache"value="true"/>
<propertyname="prefix"value=""/>
<propertyname="suffix"value=""/>
<propertyname="order"value="2"/>
</bean>
上面最關鍵的就是freeMarker的視圖解析器viewResolver的配置,viewClass是使用哪個視圖解析器,這里是類路徑;其他的和jsp的視圖解析器都很類似。
7、 下面在WEB-INF中添加2個ftl模板,在WEB-INF添加ftl,然後添加hello.ftl/hi.ftl,內容分別是:
hello.ftl
<html>
<body>
<h1>say hello ${name}</h1><br/>
${(1 == 1)?string("yes", "no")}
</body>
</html>
hi.ftl
<html>
<body>
<h1>say hello ${name}</h1><br/>
${(1 != 1)?string("yes", "no")}
</body>
</html>
8、 添加Controller控制器,代碼如下:
packagecom.hoo.controller;
importorg.springframework.stereotype.Controller;
importorg.springframework.ui.ModelMap;
importorg.springframework.web.bind.annotation.RequestMapping;
/**
* <b>function:</b> FreeMarker示例控制器
* @author hoojo
* @createDate 2011-3-3 下午04:50:10
* @file HelloWorldController.java
* @package com.hoo.controller
* @project SpringFreemarker
* @version 1.0
*/
@Controller
@RequestMapping("/freeMarker")
{
@RequestMapping("/hello")
publicString sayHello(ModelMap map) {
System.out.println("say Hello ……");
map.addAttribute("name", " World!");
return"/hello.ftl";
}
@RequestMapping("/hi")
publicString sayHi(ModelMap map) {
System.out.println("say hi ……");
map.put("name", "jojo");
return"/hi.ftl";
}
@RequestMapping("/jsp")
publicString jspRequest(ModelMap map) {
System.out.println("jspRequest ……");
map.put("name", "jsp");
return"/temp.jsp";
}
}
9、 添加index.jsp的測試鏈接或temp.jsp的內容:
index.jsp
<body>
<ahref="freeMarker/hello.do">say hello</a><br/>
<ahref="freeMarker/hi.do">say hi</a><br/>
<ahref="freeMarker/jsp.do">jspRequest</a>
</body>
temp.jsp
<body>
<h3>${name }</h3>
</body>
如果運行無錯誤,並輸出正確的結果就整合成功!
㈨ spring mvc freemarker 怎麼讓指定的控制器不適用freemarker
先附上一個SiteMesh3+FreeMarker+SpringMVC例子/adaikiss/sitemesh3_freemarker_springmvc.zip下載後解壓,本地環境變數要有MAVEN,CMD進入工程目錄直接運行mvnjetty:run昨天花了一天時間來跟蹤調試springmvc,freemarker,sitemesh3,終於弄明白了大概的原理,最後解決了sitemesh中文(UTF-8)亂碼,ftl裝飾頁不被渲染的問題。sitemesh3是通過一個filter來對response進行攔截處理,在response提交之前,它會把response流里的數據備份起來,清空流,然後用request.getRequestDispatcher(裝飾頁URI).forward()來取得渲染後的裝飾頁,然後再把裝飾頁里的標簽替換成之前備份的對應內容。也就是說sitemesh不關心你的頁面是如何生成的,它只是將兩者拼接起來,不管你用的是JSP,Volocity,FreeMarker還是SpringMVC,Struts,wicket。這樣一來你就可以靈活地控制頁面的生成方式。你可以把sitemesh3當成一個中間瀏覽器,他使用用戶瀏覽器發送過來的request對象發送了兩次(或以上)請求,第一次是原來的請求,第二次是對裝飾頁面的請求,然後把這兩個請求結果拼接起來返回給用戶瀏覽器。看到這里,裝飾頁如果是FTL就不被渲染的問題也就有了解決方法了。只要自己寫一個過濾器對.ftl的請求用freemarker渲染一遍就可以了。由於我使用的是springmvc+freemarker,因此我直接拿springmvc來渲染FTL文件了,這樣可以像被裝飾頁一樣方便地使用spring的宏和其他一些對象。下面是我的filter復制代碼{privateLocalelocale;@Overridepublicvoidinit(FilterConfigfilterConfig)throwsServletException{StringlocaleStr=filterConfig.getInitParameter("locale");if(StringUtils.isNotBlank(localeStr)){locale=newLocale(localeStr);}else{locale=Locale.getDefault();}}@OverridepublicvoiddoFilter(ServletRequestrequest,ServletResponseresponse,FilterChainchain)throwsIOException,ServletException{try{HttpServletRequestreq=(HttpServletRequest)request;HttpServletResponseres=(HttpServletResponse)response;Stringname=req.getRequestURI();name=name.substring(1,name.lastIndexOf(".ftl"));=SpringContextHolder.getBean(FreeMarkerViewResolver.class);Viewview=viewResolver.resolveViewName(name,locale);@SuppressWarnings("unchecked")Mapmodel=(Map)request.getAttribute(ViewRendererServlet.MODEL_ATTRIBUTE);view.render(null,req,res);}catch(Exceptione){thrownewServletException(e);}}@Overridepublicvoiddestroy(){//TODOAuto-generatedmethodstub}}復制代碼在這里,我是把SpringMVC對被裝飾頁處理時生成的model傳到了裝飾頁。裝飾頁和原來被include進來的頁面差不多,一般裝飾頁可能不需要使用被裝飾頁中的model,可以把SuppressWarnings註解下面那行注釋掉,下面傳null過去。在web.xml里加上過濾器配置:復制代碼freemarkerFilterorg.adaikiss.kay.web.*.ftlREQUESTFORWARD復制代碼這樣一來由sitemeshforward的請求就能被攔截並渲染。當然,你也可以把裝飾頁的後綴改成.des,url-pattern要同步改。關於中文亂碼的問題,在跟蹤代碼的時候發現對於沒有contentType的view,SpringMVC會使用默認的contentType:AbstractTemplateView.DEFAULT_CONTENT_TYPE,即"text/html;charset=ISO-8859-1",view中可以設置這個屬性,不過我的配置里沒有定義view,還好ViewResolver里也可以設置,在springmvc配置文件里加上contentType屬性即可。
㈩ 如何當freemarker模板出現錯誤時屏蔽錯誤並跳轉
在日常的開發過程中,對錯誤信息的合理處理都是很重要的一個環節,特別對於門戶系 統,其重要性就不言而喻了 然而我們在實際的開發過程中,要想錯誤提示明確、又要想客戶不至於太反感,看似矛盾的 大多數系統都是採用一檢測到錯誤,統一跳轉到統一的錯誤頁面,然後統一去做處理,但 是 那 種 錯 誤 檢 測 僅 僅 是 處 理 大 部 分 的 錯 誤 , 如 java.sql.SQLException 、 java.lang.RuntimeException,但是對於使用freemarker 模板語言的系統來說,其支持不是 很好(我嘗試把freemarker.template.TemplateException 等異常加入到其檢測機制中,發 現沒有作用,只好改用其實現方法)。通過查詢freemarker、spring 的api 獲知,freemarker 提供了一個支持其錯誤處理機制的介面 TemplateExceptionHandler,需要自己去擴展實現, 構造自己的處理freemarker 模板錯誤的機制 主要分為兩個部分 1、構造自己的錯誤處理機制 2 、在 spring 啟動的時候將自定義的錯誤機制加入到freemarker 配置中 具體做法如下: 1、新建一個類,讓其實現TemplateExceptionHandler 介面 public class implements TemplateExceptionHandler{ public void handleTemplateException(TemplateException arg0, Environment arg1, Writer out) throws TemplateException { //這里構建你的錯誤機制,可以進行跳轉及錯誤日誌的列印等等}}