struts2 html模板,使用FreeMarker模板引擎作为Struts2的视图技术
FreeMarker是一個非常優(yōu)秀的模板引擎,這個模板引擎可用于任何場景,FreeMarker負(fù)責(zé)將數(shù)據(jù)模型中的數(shù)據(jù)合并到模板中,從而生成標(biāo)準(zhǔn)輸
出.FreeMarker可以提供昜好的團(tuán)隊(duì)協(xié)作,對于界面開發(fā)人員而言,他們只關(guān)心界面(也就是模板文件)的開發(fā),而無需理會底層數(shù)據(jù);而對于業(yè)務(wù)邏輯
開發(fā)者,他們只需要關(guān)心負(fù)責(zé)將需要顯示的數(shù)據(jù)填入數(shù)據(jù)模型--FreeMarker負(fù)責(zé)合并數(shù)據(jù)模型和模板,從而生成標(biāo)準(zhǔn)輸出.
FreeMarker特別適應(yīng)于MVC模式的web應(yīng)用,雖然FreeMarker具有一些編程能力,但這種編程能力非常有限,無法實(shí)現(xiàn)業(yè)務(wù)邏
輯,保能提供一些數(shù)據(jù)格式的轉(zhuǎn)換。因此,通常由Java程序準(zhǔn)備要顯示的數(shù)據(jù),由FreeMarker模板引擎來生成頁面,而FreeMarker模板則
則提供頁面布局支持,從而能更好地規(guī)范MVC架構(gòu),保證視圖和業(yè)務(wù)邏輯的分離。
除此之外,FreeMarker也是與web容器,也就是FreeMarker并不一定需要運(yùn)行在web容器中。FreeMarker同樣可以應(yīng)用
于非web應(yīng)用程序環(huán)境。而且,FreeMarker并不是只能生成Html頁面,它也可以生成各種文本,如xml,rtf,java程序。
struts2可以非常簡單地使用FreeMarker模板作為視圖技術(shù),對于傳統(tǒng)的jsp頁面而言,FreeMarker是一個絕佳的替代方案。
除此之外,Struts2默認(rèn)采用FreeMarker作為其模板文件,而Struts2所有的主題模板文件都是采用FreeMarker編寫的。因此,如果我們需要擴(kuò)展struts2的主題,也需要熟悉FreeMarker技術(shù)。
Struts2使用FreeMarker作為其黙認(rèn)的模板技術(shù),因此Strus2對FreeMarker的支持非常良好。因此,為了在Struts2應(yīng)用中使用FreeMarker模板技術(shù),只需要在Struts.xml文件中進(jìn)行簡單配置即可。
一.在FreeMarker模板中使用Struts2標(biāo)簽.
雖然FreeMarker自己提供了一些FTL指令,可以對數(shù)據(jù)模型中的數(shù)據(jù)進(jìn)行迭代輸出,也提供了一定的條件判斷能力。但Struts2提供
的標(biāo)簽遠(yuǎn)不止于此,它還提供了一系列的表現(xiàn)標(biāo)簽,例如form標(biāo)簽等。因此,還是需要在FreeMarker模板中使用Strut2標(biāo)簽.
在FreeMarker模板中使用標(biāo)簽畢竟不同于在jsp頁面中使用標(biāo)簽,因?yàn)镕reeMarker不支持使用taglib指令來導(dǎo)入標(biāo)簽庫。但Struts2為了在FreeMarker模板中使用標(biāo)簽庫,提供了額外的支持。
為了在FreeMarker模板中使用標(biāo)簽庫,可按如下步驟進(jìn)行
1.將struts-tags.tld文件復(fù)制到WEB-INF目錄下
即將系統(tǒng)所需的標(biāo)簽庫定義文件(*.tld文件)復(fù)制到web應(yīng)用中。對于基于struts2框架的JAVA_Web應(yīng)用,則需要將Struts2-
core.jar包解壓,取出其中的struts-tags.tld文件,并復(fù)制到web應(yīng)用的WEB-INF目錄下。
2.在web.xml文件中啟動JspSupportServlet
在web.xml文件中作如下配置,如下:
<servlet>
<servlet-name>JspSupportServletservlet-name>
<servlet-class>org.apache.struts2.views.JspSupportServletservlet-class>
<load-on-startup>1load-on-startup>
servlet>
3. 在FreeMarker模板文件中使用“assign指令”導(dǎo)入標(biāo)簽庫
導(dǎo)入標(biāo)簽庫的代碼如下:
<#--定義web-inf/strust-tags.tld文件對應(yīng)的標(biāo)簽庫前綴為s-->
<#assigns=JspTaglibs["/WEB-INF/struts-tags.tld"]/>
說明:在上面導(dǎo)入的標(biāo)簽庫定義文件中,指定了標(biāo)簽庫前綴為s,而該前綴對應(yīng)的標(biāo)簽庫定義文件主放置在/WEB-INF/struts-tags.tld路徑下、
4.完畢
經(jīng)過上述步驟后,即可在應(yīng)用的FreeMarker模板中使用Struts2標(biāo)簽。在FreeMarker模板中增加了標(biāo)簽庫定義后,就可以在FreeMarker模板中使用Struts2標(biāo)簽了。在FreeMarker使用標(biāo)簽與在jsp中使用標(biāo)簽略有差別.
在FreeMarker模板使用Struts2標(biāo)簽示例如下:
<#assigns=JspTaglibs["/WEB-INF/struts-tags.tld"]/>
<html>
<head>
<title>登錄頁面title>
head>
<body>
請輸入用戶名和密碼來登陸<br>
<@s.formaction="Login.action">
<@s.textfieldname="username"label="用戶名"/>
<@s.textfieldname="password"label="密碼"/>
<@s.submitvalue="提交"/>
@s.form>
body>
html>
如果是在jsp中使用Struts2標(biāo)簽,則使用下述代碼:
jsp文件導(dǎo)入struts2的標(biāo)簽庫?略
lt;s:form?action="Login.action">
<s:textfieldname="username"label="用戶名"/>
<s:textfieldname="password"label="密碼"/>
<s:submitvalue="提交"/>
lt;/s:form><spanstyle="font-family:?Arial,?Helvetica,?sans-serif;">span>
補(bǔ)充說明
我們不能直接通過瀏覽器直接請求該頁面,否則看到的不是我們想要的結(jié)果,而是該模板頁面的源代碼(因?yàn)閃EB容器默認(rèn)不會處理
FreeMarker模板頁面)。
正如前面使用FreeMarker模板作為視圖組件時看到的,FreeMarker作為視圖組件是由Servlet負(fù)責(zé)加載該模板,并使用數(shù)據(jù)模型填充該模板,并且填充后的標(biāo)準(zhǔn)HTML響應(yīng)輸出給瀏覽者。
在Strtus2框架的支持下,Struts2框架充當(dāng)了之前的Servlet角色,只要瀏覽者的請求經(jīng)過了Struts2處理后,Struts2框架就會自動加載FreeMarker模板,并使用數(shù)據(jù)模型填充該模板,并且將最后的HTML頁面輸出給瀏覽者.。
為了讓所有的用戶請求都經(jīng)過Struts2框架處理,我們將所有的FreeMarker模板文件放在web-inf/ftl路徑下.
因?yàn)闉g覽者無法直接訪問web-inf/ftl路徑下的資源,所以我們在struts.xml配置文中增加了如下配置片段:
<actionname="*">
<resulttyperesulttype="freemarker">/WEB-INF/ftl/{1}.ftlresult>
action>
在上面配置片段中,配置了一個能匹配所有請求的Action,該Action被映射到一個動態(tài)Result,這個動態(tài)Result是根據(jù)請求來決定的。
因?yàn)樵黾恿松厦娴呐渲闷?#xff0c;在瀏覽器中請求login.action,該Action將被轉(zhuǎn)向到login.ftl模板。具體效果如下:
struts.xml文件內(nèi)容如下:
總結(jié)
以上是生活随笔為你收集整理的struts2 html模板,使用FreeMarker模板引擎作为Struts2的视图技术的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 蓝桥杯之算法模板题 Python版
- 下一篇: [渝粤教育] 西南科技大学 电气控制与P