Eclipse Maven Servlet freemarker


1.创建Maven Web项目,Archetype选择 archetype-maven-webapp

2.添加Servlet依赖

<dependency >
    <groupId>javax.servlet</groupId>
    <artifactId>javax.servlet-api</artifactId>
    <version>4.0.1</version>
</dependency>

3.添加freemarker依赖

<dependency>
    <groupId>org.freemarker</groupId>
    <artifactId>freemarker</artifactId>
    <version>2.3.28</version>
</dependency>

4.web.xml配置freemarker

<servlet-mapping>
    <servlet-name>TestServlet</servlet-name>
    <url-pattern>/TestServlet</url-pattern>
</servlet-mapping>
<servlet>
    <servlet-name>freemarker</servlet-name>
    <servlet-class>freemarker.ext.servlet.FreemarkerServlet</servlet-class>
    <!-- Init-param documentation: https://freemarker.apache.org/docs/api/freemarker/ext/servlet/FreemarkerServlet.html -->
    <!-- FreemarkerServlet settings: -->
    <init-param>
        <param-name>TemplatePath</param-name>
        <param-value>/</param-value>
    </init-param>
    <init-param>
        <param-name>NoCache</param-name>
        <param-value>true</param-value>
    </init-param>
    <init-param>
        <param-name>ResponseCharacterEncoding</param-name>
        <!-- Use the output_encoding setting of FreeMarker: -->
        <param-value>fromTemplate</param-value>
    </init-param>
    <init-param>
        <param-name>ExceptionOnMissingTemplate</param-name>
        <!-- true => HTTP 500 on missing template, instead of HTTP 404. -->
        <param-value>true</param-value>
    </init-param>
    <!-- FreeMarker engine settings: -->
    <init-param>
        <param-name>incompatible_improvements</param-name>
        <param-value>2.3.28</param-value>
        <!-- Recommended to set to a high value. See: https://freemarker.apache.org/docs/pgui_config_incompatible_improvements.html -->
    </init-param>
    <init-param>
        <param-name>template_exception_handler</param-name>
        <!-- Use "html_debug" during development! -->
        <param-value>rethrow</param-value>
    </init-param>
    <init-param>
        <param-name>template_update_delay</param-name>
        <!-- Use 0 during development! Consider what value you need otherwise. -->
        <param-value>30 s</param-value>
    </init-param>
    <init-param>
        <param-name>default_encoding</param-name>
        <!-- The encoding of the template files: -->
        <param-value>UTF-8</param-value>
    </init-param>
    <init-param>
        <param-name>output_encoding</param-name>
        <!-- The encoding of the template output; Note that you must set "ResponseCharacterEncodring" 
            to "fromTemplate" for this to work! -->
        <param-value>UTF-8</param-value>
    </init-param>
    <init-param>
        <param-name>locale</param-name>
        <!-- Influences number and date/time formatting, etc. -->
        <param-value>en_US</param-value>
    </init-param>
    <init-param>
        <param-name>number_format</param-name>
        <param-value>0.##########</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
    <servlet-name>freemarker</servlet-name>
    <url-pattern>*.ftl</url-pattern>
</servlet-mapping>

5.创建Servlet

package com.codingdict.servlet;

import java.io.IOException;
import java.util.HashMap;
import java.util.Map;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class TestServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;
    @Override
    public void init() throws ServletException {
    }
    public TestServlet() {
        super();
    }
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        Map<String, Object> data = new HashMap<String, Object>();
        data.put("name", "Tom"); 
        request.setAttribute("age", "20");
        request.setAttribute("map", data);
        request.getRequestDispatcher("ftl/test.ftl").forward(request, response);
    }
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        doGet(request, response);
    }
}

6.创建模板文件test.ftl

<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8" />
    <title>Document</title>
</head>
<body>
${map.name}

${age}
</body>
</html>