この記事では、Freemark の主要な機能、またはそれがどのような問題を解決するために使用されるかを紹介します。最初の記事で、Freemark はテンプレート言語であると述べましたが、テンプレート言語とは何ですか?
はい、私も接触してからすぐにインターネットで情報を検索したところ、以下のブログで Java テンプレート技術を紹介したことが書かれていました。興味がありましたら、ご覧ください:
テンプレート言語について私が理解していることを簡単にまとめます。本質的には、これはプレースホルダーの動的置換技術です。 Web 開発でよく使用される EL 式、Struts tablib、およびその他のテクノロジも、プレースホルダの動的置換テクノロジです。しかし、Freemark はそれらとは異なります。Freemark はサーブレット コンテナから独立して実行される独立したテンプレート テクノロジであると述べました。これは、私たちがよく使用する JSP テクノロジとは異なります。 JSP は本質的にサーブレットであるため、JSP はサーブレット コンテナに依存して実行する必要があります。 jsp メカニズムを使用すると、データはリクエスト ストリームを通じてフロントエンドに送信されます。Freemark では、データをフロントエンドに送信するには、リクエスト オブジェクトの代わりに POJO をページに渡すだけで済みます。
テンプレート言語を簡単に理解した後、例を実装してみましょう。
1. MyEclipse で Web プロジェクトを作成し、Freemark jar パッケージを追加します。出力する必要があるページ テンプレートを保存するために、WebRoot フォルダーの下に新しいテンプレート フォルダーを作成します。
2. テンプレートを作成する
(注: ファイル作成後にファイルが赤い場合は、次の方法を使用してそれを取り除くことができます)
3. バックグラウンドコードは上記からデータ
FreeMarkerHandler クラス コード:
package com.ftl;import java.io.IOException;import java.io.PrintWriter;import java.util.ArrayList;import java.util.HashMap;import java.util.List;import java.util.Map;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import com.entity.User;import freemarker.template.Configuration;import freemarker.template.Template;import freemarker.template.TemplateException;public class FreeMarkerHandler extends HttpServlet { private Configuration configuration = null; //解释Configuration //构造函数 public FreeMarkerHandler(){ //创建Configuration实例 configuration = new Configuration(); //输出的数据默认的编码类型 configuration.setDefaultEncoding("utf-8"); } @SuppressWarnings("unchecked") public void doGet(HttpServletRequest request,HttpServletResponse response) throws ServletException,IOException { //---------------1.准备数据----------------- //要填入的数据文件 Map dataMap = new HashMap();//解释数据的容器 //添加数据 dataMap.put("title", "FreeMarker示例"); List<User> userList = new ArrayList<User>(); User user1 = new User(); user1.setId("1"); user1.setName("小依"); User user2 = new User(); user2.setId("2"); user2.setName("小耳"); userList.add(user1); userList.add(user2); dataMap.put("userList", userList); //将数据放到Map中 //--------------------------------------- //---------------2.设置模板装载的方法(有多种方法)- //介绍两种方法: configuration.setServletContextForTemplateLoading(getServletContext(),"templates");// configuration.setClassForTemplateLoading(this.getClass(),"/com/template"); //--------------------------------------- //----------------3.获得模板---------------- //获得需要装载的模版 Template template = null; try { template = configuration.getTemplate("hello.ftl"); template.setEncoding("utf-8"); } catch (IOException e) { e.printStackTrace(); } //--------------------------------------- //--------------4.开始准备生成输出-------------- //使用模版文件的charset作为本页面的charset //使用text/html MIME-type response.setContentType("text/html; charset=" + template.getEncoding()); PrintWriter out = response.getWriter(); //合并数据模型和模版,并将结果输出到out中 try { template.process(dataMap,out);// 用模板来开发servlet可以只在代码里面加入动态的数据 } catch(TemplateException e) { throw new ServletException("处理Template模版中出现错误", e); } //------------------------------------------ } }
<?xml version="1.0" encoding="UTF-8"?><web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"> <welcome-file-list> <welcome-file>index.jsp</welcome-file> </welcome-file-list> <servlet> <servlet-name>FreeMarkerHandler</servlet-name> <servlet-class>com.ftl.FreeMarkerHandler</servlet-class> </servlet> <servlet-mapping> <servlet-name>FreeMarkerHandler</servlet-name> <url-pattern>*.do</url-pattern> </servlet-mapping></web-app>
6. 効果表示
プロジェクトを Tomcat にデプロイし、それにアクセスして効果を確認します。
概要
上記のテスト例では、Web フレームワークを使用していません。実際、このテンプレート言語は、一般的に使用されているフレームワークで使用できます。興味があれば、皆さんと共有できる関連情報をいくつか見つけました。行って見てもいいよ!