Javaフレームワーク - FreeMarkerのテンプレートエンジン

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の者の上に、非常に簡単ではありません。何か問題がある場合は、私を修正してください!

おすすめ

転載: www.cnblogs.com/hmit/p/11608241.html