zoukankan      html  css  js  c++  java
  • Java: FreeMarker的配置和使用

    初学什么都不可以忽略的地方就是这个东西的官方网站:http://freemarker.org/。下载或者API都可以参考这里。

    FreeMarker是什么

    非常的简单明了。FreeMarker是一个java包。实现了MVC模式,分离开发者和设计师。也就是分离html也java的代码。

    FreeMarker是如何工作的

    这是官网的图。非常明确的说明了FreeMarker是如何运作的。首先需要有一个template模板,在那里就是一堆的html标签和一些专属FreeMarker的标签,这些标签之后会被具体的数据代替。这些数据就是有左下的Java objects提供。<FreeMarker>就是工程中的Jar包。他把这些模板和Java objects的数据加工组合之后输出html页面。所以,FreeMarker的功能,就如官网中一直强调的,不是别的而是一个模板引擎。

    在工程中最后把这些捏合在一起,让他们彼此知道、协同工作的是web.xml配置文件。这里先介绍web.xml的配置,之后具体说明如何一步一步的添加配置文件中涉及到的模板、java objects等。这样有利于读者从总体出发逐步把握每一个相关的细节。

    复制代码
    <?xml version="1.0" encoding="UTF-8"?>
    <web-app version="3.0" 
        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_3_0.xsd">
        <servlet>
            <servlet-name>Test</servlet-name>
            <servlet-class>example.Test</servlet-class>
        </servlet>
        <servlet-mapping>
            <servlet-name>Test</servlet-name>
            <url-pattern>*.do</url-pattern>
        </servlet-mapping>
      <welcome-file-list>
        <welcome-file>index.jsp</welcome-file>
      </welcome-file-list>
    </web-app>
    复制代码

    配置依次说明了:有一个叫Test的servlet,对应在代码的example包的Test类。这个类的名字可以随便起,其他的节点在配置的时候使用的知识servlet-name,然后他会找到这个类。下面的servlet-mapping在url中访问*.do的时候会访问这个servlet-name为Test的节点配置的类。之后,在index.jsp中添加一个指向*.do的超链接。整个的整个测试项目就可以run起来了。

    按照MVC的方式理解。在servlet-name中配置的类就是Controller。View就是模板。Model就是之后在HashMap中的数据。下面依次创建在配置文件中直接或者间接需要用到的代码。

    添加可运行的代码

    这里假设你已经创建了一个web project,这个project的名字叫做test。首先创建模板。一定要在WebRoot目录下创建一个templates目录。然后在里面添加后缀为ftl(freemarker template的缩写),名称为Test的模板。在配置文件中没有出现模板叫什么,所以这里你可以随便命名这个模板文件。这个文件之后会在Controller中明确指定。不会出现找不到的问题。

    代码:

    复制代码
    <!DOCTYPE html>
    <html>
      <head>
        <title>Hello</title>
      </head>
      
      <body>
        This is my HTML page. <br>
        <h1>${user}</h1>
      </body>
    </html>
    复制代码

    这个模板非常简单。只在h1标签中方了一个需要数据“user”的Freemarker标签。这个“user”数据就是在之后的HashMap提供的。

    然后添加Controller,也就是在web.xml配置文件中指定的example.Test类。首先在项目的根目录下,创建一个“example”的包,然后在里面添加一个Servlet。Servlet的名称设定为Test。名字可以随意起,但是在配置文件中的必须和这个类的名称是一致的。

    复制代码
    package example;
    
    import java.io.*;
    import java.util.*;
    import javax.servlet.ServletException;
    import javax.servlet.http.*;
    import freemarker.template.*;
    
    public class Test extends HttpServlet {
        
        private Configuration _config;
        
        public void init() {
            // 初始化Freemarker配置
            _config = new Configuration(Configuration.VERSION_2_3_0);
            // 设置Freemarker模板文件的位置
            _config.setServletContextForTemplateLoading(this.getServletContext(), "templates");
        }
    
        public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException{
            // 数据
            Map root = new HashMap();
            root.put("user", "Jack");
            
            // 获取模板
            Template t = _config.getTemplate("Test.ftl");
            
            // 准备输出, 使用模板的编码作为本页的charset
            response.setContentType("text/html; charset=" + t.getEncoding());
            PrintWriter out = response.getWriter();
            
            try{
                // 在模板中加入动态数据
                t.process(root, out);
            }
            catch(freemarker.template.TemplateException e){
                throw new ServletException("处理Template模版中出现错误", e);
            }
        }
    }
    复制代码

    代码_config.setServletContextForTemplateLoading(this.getServletContext(), "templates");指定了模板文件所在的目录,以后的全部的Controller的模板文件都是从这个地方找了,也就是前文指定的在WebRoot下创建的templates目录。在后面的代码Template t = _config.getTemplate("Test.ftl");中指定了具体的模板文件是哪一个。Map root = new HashMap(); root.put("user", "Jack");指定了具体的数据Model。这个key值必须和在模板中设定的${user}一致。最后在方法t.process(root, out);中,把数据添加到模板中。通过这几步以后,MVC的几个部分就结合到了一起。

    最后在index.jsp中添加一个超链接:<a href="Hello.do">Freemarker first page</a>。整个例子就可以运行了。看那看效果吧。

    Freemarker是一个功能十分强大的模板引擎。不只有文中介绍的简单的数据的替换,还有指令、宏等功能。非常好用。

    参考:

    http://freemarker.org/docs/

    http://gqsunrise.iteye.com/blog/1659118

    欢迎加群互相学习,共同进步。QQ群:58099570 | 做人要厚道,转载请注明出处!
  • 相关阅读:
    解决request.getRemoteAddr()获取的值为0:0:0:0:0:0:0:1这个小问题
    百度编辑器
    java程序中输出console的日志到文本
    收集常用的.net开源项目
    Html Agility Pack基础类介绍及运用
    HTML Agility Pack 搭配 ScrapySharp,彻底解除Html解析的痛苦
    HTML WEB 和HTML Agility Pack结合
    HtmlWeb类
    简单方便统一封装的傻瓜式GET/POST库AliasNet正式公布~开源喽~
    HtmlAgilityPack.dll的使用 获取HTMLid
  • 原文地址:https://www.cnblogs.com/wnlja/p/4345204.html
Copyright © 2011-2022 走看看