https://www.cnblogs.com/itdragon/p/7750903.html
FreeMarkerのは、テンプレートエンジンを学ぶことは非常に価値があります。これは、共通のテンプレートファイル生成ツール他のテキストに基づいています。この章によってHTMLウェブページや迅速FreeMarkerのを理解するための自動コード生成ツールを生成するためにFreeMarkerのを使用する方法について説明します。
1はじめに
それはウェブアプリケーションフレームワークではありませんが、FreeMarkerのは、Javaのテンプレートエンジンを持つ言語であるが、それはWebアプリケーションフレームワークの構成要素として非常に適しています。
特徴:
1.軽量テンプレートエンジン、サーブレット環境を必要としないアプリケーションに容易に埋め込むことができます
図2は、等、HTML、XML、Java(登録商標)、等のテキスト、様々なを生成することができます
はじめに3.これは、Java、Javaと多くの類似の構文で記述され、シンプルであります
オンライン写真から借り:(作品)
2 FreeMarkerのプログラム
ここではFreeMarkerのは、単純な自動化生産ツールをシミュレートすることにより、第1のプログラムコードを感じます。
プロジェクトのディレクトリ構造
プロジェクトの作成プロセス
ステップ1:FreeMarkerのジャーパッケージにMavenプロジェクトを作成します。
ステップ2:カタログテンプレートを作成し、FreeMarkerのテンプレートファイルhello.ftlを作成します
ステップ3:FreeMarkerDemo.java FreeMarkerのテンプレートエンジンを実行するためのファイルを作成します。
ステップ4:メインメソッドの更新プロジェクトを実行した後
pom.xmlファイル、Mavenプロジェクト・コア・ファイルは、jarファイルのパッケージを管理します。
1 <プロジェクトのxmlns = "http://maven.apache.org/POM/4.0.0"のxmlns:XSI = "http://www.w3.org/2001/XMLSchema-instance" 2のxsi:schemaLocationの= "HTTP ://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd "> 3 <modelVersion> 4.0.0 </ modelVersion> 4 <のgroupId> com.freemark </ groupIdを> 5 <たartifactId> freemarkerStudy </たartifactId> 6 <バージョン> 0.0.1-SNAPSHOT </バージョン> 7 <パッケージ>戦争</包装> 8 9 <依存性> 10 <依存性> 11 <のgroupId > org.freemarker </ groupIdを> 12 <たartifactId> FreeMarkerの</たartifactId> 13 <バージョン> 2.3.20 </バージョン> 14 </依存> 15 </依存関係> 16 17 </プロジェクト>
hello.ftl FreeMarkerの基本的な構文:後} $ {プレースホルダとしてのxxx xxxは、Java(登録商標)は、バックグラウンドに割り当てられ、XXX次いで$によって出力{}
1つのパッケージ$ {}のclassPath。 2 3パブリッククラス$ {クラス名} { 4 5パブリック静的無効メイン(文字列[] args){ 6のSystem.out.println( "$ {}のhelloWorld")。 7} 8 9}
FreeMarkerのテンプレートエンジンを使用してFreeMarkerDemo.javaコア方法。
パッケージcom.freemark.hello 1; 2 。3インポートjava.io.BufferedWriter; 4インポートjava.io.Fileの、 5インポートjava.io.FileOutputStreamは、 6インポートjava.io.OutputStreamWriterが、 7インポートのjava.io.Writer; 8 java.util.HashMapをインポート; 9インポートjava.util.Map; 10 。11インポートfreemarker.template.Configuration; 12インポートfreemarker.template.Templateある; 13は 14 / ** 15 *最も一般的な問題: 16 * java.io. FileNotFoundException:xxxは解決策は存在しません:我慢して FreeMarkerのジャーの最新バージョン(2.3.23)ヒントの設定方法が放棄された* 17 :基本的な原則18 *自動生産コードを 19充満*データFreeMarkerのプレースホルダ 20 * / 21のパブリッククラスFreemarkerDemo { 22 35 dataMap.put( "のclassPath"、 " 23プライベート静的最終文字列TEMPLATE_PATH = "SRC /メイン/ javaの/ COM / freemark /ハロー/テンプレート"。 24プライベート静的最終文字列CLASS_PATH = "SRC /メイン/ javaの/ COM / freemark /こんにちは"; 25 26のpublic static無効メイン(文字列[] args){ 27 // STEP1创建FreeMarkerの配置实例 28構成設定=新しい構成(); 29ライターアウト= NULL; 30試み{ 31 // STEP2获取模版路径 32 configuration.setDirectoryForTemplateLoading(新しいファイル(TEMPLATE_PATH))。 33 // STEP3创建数据模型 34地図の<string、オブジェクト>データマップ=新しいハッシュマップの<string、オブジェクト>(); 36 dataMap.put( "クラス名"、 "AutoCodeDemo")。 37 [dataMap.put( "のhelloWorld"、 "シンプル<自動コード生成プロセス>のHelloWorldのFreeMarkerのプレゼンテーション!"); 38がロードされているテンプレートファイル//ステップ4 39のテンプレートconfiguration.getTemplate =テンプレート( "hello.ftl"); 40の// STEP5生成データ 41はDOCFILE =新しい新しいファイルファイル(CLASS_PATH + "\\" + "AutoCodeDemo.java")であり、 42は新しい新しいBufferedWriterのある、OUT =(OutputStreamWriterを新新(新新たFileOutputStream(DOCFILE))); 43出力ファイル//ステップ6で 44 template.process(データマップ、OUT)であり、 45のSystem.out.println(「^^^^^^^^^^^^^^^^^^^ ^^^^^ AutoCodeDemo.javaファイルが正常)」が作成され!; 46}キャッチ(例外e){ 47 e.printStackTrace(); 48} {ついに 49試し{ 50(ヌル!アウト=)場合は{ 51 out.flush()。 52} 53}キャッチ(例外E2){ 54 e2.printStackTrace()。 55} 56} 57} 58 59}
プログラムを実行すると、プロジェクトをリフレッシュした後、あなたはAutoCodeDemo.javaクラス以上のものを見つけるでしょう。ただ、Javaのような、またXML可能。FreeMarkerのは簡単なツールは、同社の経営・ページと標準のCRUD機能だけでなく、関連する設定ファイル(13ファイル)、キャリッジリターンがすべて自動的に生成されます(怠惰ING)を作って、著者があります。
3 FreeMarkerの文法
Java構文は、コードの最初のマクロの概念はなじみのない可能な、非常に類似しています
stringFreeMarker.ftl FreeMarkerの主コアの知識ポイント
出力文字列: $ { "こんにちは$ {名前}!"} / {$ "こんにちは"!"" +名+} <= R&LT #assign CNAME "出力の特殊文字が完了します(http:\ www.baidu.com)" > $ {} CNAMEの ストリングインターセプトは: インデックスは下付き文字で直接割り当てられなさい:$ {名[2]} 始端添字インデックス..取ら列:$ {名前[0..5]} 算術計算: <# -サポート"+"、 " - "、 "*"、 "/"、 "%"演算子- > <#assign番号1 = 10> <。#assign number2の5 => "+":$番号1の数値2} + { " - " $ {数値1 -数値2} "*" $ {番号1の数値2} * "/" $ {数値1 /数値2} "%" $ {}番号1%の数値2の 比較演算子: < GTE 12は||番号1の#if数値1 +数値2 -である。LT 6数値2> "*」$ {番号1の*の数値2} <の#else> "/" $ {数値1 /数値2} </#場合> 内建函数: <#assignデータ= "ABCD1234"> 最初の文字:{?データcap_first} $ すべて小文字:$ {データLOWER_CASE?} 全て大文字:データUPPER_CASE $ {?} <#assign floatData = 12.34> 取る値整数:$ {floatData int型?} コレクションの長さを取得します:$ {ユーザー大きさ?} 時刻フォーマット:$ {日時文字列( "? YYYY-MM-DD")} オブジェクトの空白の決意とコレクション: <ユーザーの#if? > <ユーザー>には#listユーザ $ {} user.id - user.name $ {} </#リスト> <の#else> {!ユーザー"変数が空であるデフォルト値に" $} </ IF#> 地図セット: <#assign地図データ= {「名」:「プログラマ」、「給与」15000} > $ {地図データ[「名前」:値キー値による直接アクセス ]} キーマップを横断することによって: <#list地図データ?キーキー> AS キー:{キー} $ -価値:$ {地図データ[キー]} </#一覧> 地図値が横切っ: <#list地図データ値を値AS?> 値:$ {値} </#の一覧> 一覧コレクション: <#assignたlistData = [ "ITDragon"、 "ブログ"、 "クール" "IS"]> <#listたlistData値AS> $ {値} </#リスト> のための説明書が含ま: 他の文書の導入を:<#含める"otherFreeMarker.ftl" /> マクロマクロ: <#macro命令のMo> 定義されたマクロパラメータなしのマクロ- $ {名前} </#マクロ> 使用マクロマクロ<@mo /> <#macro命令moArgs AB&C> 定義されたマクロパラメータ{A + B $ macro-- + C} </#マクロ> パラメータ化されたマクロマクロを使用して<@moArgs A = 1、B = 2、C = 3 /> 名前空間 :<otherFtl> AS "otherFreeMarker.ftl"の#import $} {otherFtl.otherName <20であるotherFtl.addMethod @ = B = 10 /> <#assign otherName = "otherNameはotherFreeMarker.ftl変数の値を変更し" /> $ {} otherFtl.otherName <#assign otherName = otherFtl /に"otherNameはotherFreeMarker.ftl変数の値を変更した"> $ {} otherFtl.otherName
名前空間をテストし、FreeMarkerのファイルの指示を含めることotherFreeMarker.ftl
他の文書FreeMarkerの <AB&#macro命令addMethod> 結果:$ {A + B} </マクロ#> <#assign otherName = "別の変数FreeMarkerの">
FreeMarkerDemo.javaコア法
1つのパッケージcom.freemark.demo。 2 3インポートjava.util.Listに。 4インポートjava.io.BufferedWriter。 5輸入はjava.io.File; 6インポートjava.io.FileOutputStreamは。 7インポートjava.io.OutputStreamWriterが。 8輸入のjava.io.Writer。 9インポートjava.util.Date。 10インポートjava.util.ArrayListの。 11輸入java.util.HashMapを。 12インポートjava.util.Map; 13 14インポートfreemarker.template.Configuration。 15インポートfreemarker.template.Template。 16 17パブリッククラスFreeMarkerDemo { 18 19プライベート静的最終文字列TEMPLATE_PATH = "SRC /メイン/ javaの/ COM / freemark /デモ/テンプレート"。 20 21パブリック静的無効メイン(文字列[] args){ 22 // STEP1创建FreeMarkerの配置实例 23構成設定=新しい構成(); 24ライターアウト= NULL; 25試し{ 26 // STEP2获取模版路径 27 configuration.setDirectoryForTemplateLoading(新しいファイル(TEMPLATE_PATH)); 28 // STEP3创建数据模型 29地図<文字列、オブジェクト> DATAMAP =新しいHashMapの<文字列、オブジェクト>(); 30 dataMap.put( "名前"、 "itdragon博客")。 31 dataMap.put( "dateTime"に、新しいDate()); 32 33リスト<ユーザー>ユーザー=新規のArrayList <ユーザー>(); 34 users.add(新しいユーザー(1、 " 35 users.add(新しいユーザー(2、 "欢迎")); 36 users.add(新しいユーザー(3、 "あなた!")); 37 dataMap.put(「ユーザ」ユーザ)。 38 // STEP4加载模版文件 39テンプレートテンプレート= configuration.getTemplate( "stringFreeMarker.ftl")。 40 // STEP5生成数据 41アウト=新しいのOutputStreamWriter(のSystem.out); 42 // STEP6输出文件 43 template.process(OUTデータマップ)。 44}キャッチ(例外e){ 45 e.printStackTrace(); 46}最後に{ 47試し{ 48 IF(ヌル=アウト!){ 49 out.flush(); 50} 51}キャッチ(例外E2){ 52 e2.printStackTrace()。 53} 54} 55} 56 57}
User.java FreeMarkerのコレクションオブジェクトをテストするには
1 package com.freemark.demo; 2 3 public class User { 4 5 private Integer id; 6 private String name; 7 8 public User() { 9 } 10 11 public User(Integer id, String name) { 12 this.id = id; 13 this.name = name; 14 } 15 16 public Integer getId() { 17 return id; 18 } 19 20 public void setId(Integer id) { 21 this.id = id; 22 } 23 24 public String getName() { 25 return name; 26 } 27 28 public void setName(String name) { 29 this.name = name; 30 } 31 32 @Override 33 public String toString() { 34 return "User [id=" + id + ", name=" + name + "]"; 35 } 36 37 }
最后的打印结果
字符串输出: Hello itdragon博客 ! / Hello itdragon博客 ! 特殊字符完成输出(http:\www.baidu.com) 字符串截取 : 通过下标直接获取下标对应的字母: d 起点下标..结尾下标截取字符串:itdrag 算数运算: "+" : 15 "-" : 5 "*" : 50 "/" : 2 "%" : 0 比较运算符: "*" : 50 内建函数: 第一个字母大写:Abcd1234 所有字母小写:abcd1234 所有字母大写:ABCD1234 数值取整数:12 获取集合的长度:3 时间格式化:2017-10-29 空判断和对象集合: 1 - ITDragon 博客 2 - 欢迎 3 - You! Map集合: 直接通过Key获取 Value值:程序员 通过Key遍历Map: Key: name - Value: 程序员 Key: salary - Value: 15,000 通过Value遍历Map: Value: 程序员 Value: 15,000 List集合: ITDragon blog is cool include指令: 其他FreeMarker文件 macro宏指令: 使用宏macro: 定义无参数的宏macro--itdragon博客 使用带参数的宏macro: 定义带参数的宏macro-- 6 命名空间: 另外一个FreeMarker的变量 result : 30 另外一个FreeMarker的变量 修改otherFreeMarker.ftl中的otherName变量值
语法详解
数据类型
和java不同,FreeMarker不需要定义变量的类型,直接赋值即可。
字符串: value = "xxxx" 。如果有特殊字符 string = r"xxxx" 。单引号和双引号是一样的。
数值:value = 1.2。数值可以直接等于,但是不能用科学计数法。
布尔值:true or false。
List集合:list = [1,2,3] ; list=[1..100] 表示 1 到 100 的集合,反之亦然。
Map集合:map = {"key" : "value" , "key2" : "value2"},key 必须是字符串哦!
实体类:和EL表达式差不多,直接点出来。
字符串操作
字符串连接:可以直接嵌套${"hello , ${name}"} ; 也可以用加号${"hello , " + name}
字符串截取:string[index]。index 可以是一个值,也可以是形如 0..2 表示下标从0开始,到下标为2结束。一共是三个数。
比较运算符
== (等于),!= (不等于),gt(大于),gte(大于或者等于),lt(小于),lte(小于或者等于)。不建议用 >,< 可能会报错!
一般和 if 配合使用
内建函数
FreeMarker 提供了一些内建函数来转换输出,其结构:变量?内建函数,这样就可以通过内建函数来转换输出变量。
1. html: 对字符串进行HTML编码;
2. cap_first: 使字符串第一个字母大写;
3. lower_case: 将字符串转成小写;
4. upper_case: 将字符串转成大写;
5. size: 获得集合中元素的个数;
6. int: 取得数字的整数部分。
变量空判断
! 指定缺失变量的默认值;一般配置变量输出使用
?? 判断变量是否存在。一般配合if使用 <#if value??></#if>
宏指令
可以理解为java的封装方法,供其他地方使用。宏指令也称为自定义指令,macro指令
语法很简单:<#macro val > 声明macro </#macro>; 使用macro <@val />
命名空间
可以理解为java的import语句,为避免变量重复。一个重要的规则就是:路径不应该包含大写字母,使用下划线_分隔词语,myName --> my_name
语法很简单:<#import "xxx.ftl" as val>
其他没有说明的语法是因为和java一样,没什么特别之处。所以没有列出来。
4 FreeMarker Web
这里是和SpringMVC整合的,SpringMVC的配置就不多说了,笔者也写过相关的文章,同时也会提供源码
导入相关的jar pom.xml
<!-- freeMarker start --> <dependency> <groupId>org.freemarker</groupId> <artifactId>freemarker</artifactId> <version>2.3.20</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context-support</artifactId> <version>4.1.4.RELEASE</version> </dependency> </dependencies> <!-- freeMarker end -->
springmvc的配置文件:
<!-- 整合Freemarker --> <!-- 放在InternalResourceViewResolver的前面,优先找freemarker --> <bean id="freemarkerConfig" class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer"> <property name="templateLoaderPath" value="/WEB-INF/views/templates"/> </bean> <bean id="viewResolver" class="org.springframework.web.servlet.view.freemarker.FreeMarkerViewResolver"> <property name="prefix" value=""/> <property name="suffix" value=".ftl"/> <property name="contentType" value="text/html; charset=UTF-8"/> </bean>
Controller 层
import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.RequestMapping; @Controller public class HelloFreeMarkerController { @RequestMapping("/helloFreeMarker") public String helloFreeMarker(Model model) { model.addAttribute("name","ITDragon博客"); return "helloFreeMarker"; } }
最后是Freemarker文件
<HTML> <HEAD> <META HTTP-当量= "Content-Typeの"コンテンツ= "text / htmlの;のcharset = UTF-8"> <タイトル> FreeMarkerのウェブ</ TITLE> </ HEAD> <BODY> <H1>こんにちは$ {名前}!</ H1> </ BODY> </ HTML>
送信元アドレス:https://gitee.com/itdragon/springmvc
5まとめ
1.知ってFreeMarkerのは、XML、HTML、Javaおよびその他の文書を生成することができますテンプレートエンジンであります
2.知っFreeMarkerのファイルは、プレースホルダを提供し、javaファイルは、データを提供し、FreeMarkerのテンプレートエンジンの生産によるデータのページがあり、テキストデータは、地図の中に置かれます。セッター/ゲッターメソッドを使用することができるWebアプリケーション
3.操作が撮影した、特別な文字列FreeMarkerの構文を知っています。そして、いくつかの組み込みメソッドを使用します
空の裁判官の知識FreeMarkerのを理解する4.フォーカス。変数がNULLセットのデフォルトである場合、変数は、「??」と空気か否かが判断されます。あなたは、ああのイエローページを促すことができる空気の問題に注意を払う場合は!
名前空間、インポートドキュメントの5 FreeMarkerのマクロコンセプト、変数、トラバーサルコレクションに値を割り当てます。
6. Freemarkerの統合SpringMVC。
ここで取得すると、FreeMarkerの者の上に、非常に簡単ではありません。何か問題がある場合は、私を修正してください!