首页 > 其他分享 >【FreeMarker模板引擎】4.freemarker结合Servlet使用

【FreeMarker模板引擎】4.freemarker结合Servlet使用

时间:2023-03-19 11:01:48浏览次数:41  
标签:FreeMarker freemarker Servlet HelloFreemarkerServlet import servlet 模板


之前讲解了freemarker的基础知识和数据结构,以及freemarker的样例。下面我们将结合JavaWeb
和其它框架来使用freemarker作为视图框架。

一、Freemarker与JavaWeb的Servlet结合
首先在MyEclipse中创建一个Web Project工程:

【FreeMarker模板引擎】4.freemarker结合Servlet使用_Web

【FreeMarker模板引擎】4.freemarker结合Servlet使用_xml_02

然后在WEB-INF/lib下放置freemarker的jar包,并引入编译环境:


【FreeMarker模板引擎】4.freemarker结合Servlet使用_java_03


之后在WEB-INF文件夹下创建template文件夹,用于放置模板文件:


【FreeMarker模板引擎】4.freemarker结合Servlet使用_xml_04


然后创建一个Servlet类,名为HelloFreemarkerServlet:


【FreeMarker模板引擎】4.freemarker结合Servlet使用_Freemarker_05


此时Web.xml内容为:


<?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>
<description>This is the description of my J2EE component</description>
<display-name>This is the display name of my J2EE component</display-name>
<servlet-name>HelloFreemarkerServlet</servlet-name>
<servlet-class>cn.com.freemark.servlet.test.HelloFreemarkerServlet</servlet-class>
</servlet>

<servlet-mapping>
<servlet-name>HelloFreemarkerServlet</servlet-name>
<url-pattern>/servlet/HelloFreemarkerServlet</url-pattern>
</servlet-mapping>

</web-app>

即我们在浏览器访问“/servlet/HelloFreemarkerServlet”就会得到该Servlet类运行的结果。


此时编辑HelloFreemarkerServlet,让其生成一个后台信息,展示给请求者:


package cn.com.freemark.servlet.test;

import java.io.IOException;
import java.io.Writer;
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;

import freemarker.template.Configuration;
import freemarker.template.Template;
import freemarker.template.TemplateException;

public class HelloFreemarkerServlet extends HttpServlet {

private Configuration cfg;//freemarker的配置类

public void init() throws ServletException {
//在初始化Servlet的时候就做的事情:
cfg = new Configuration();//创建freemarker配置实例
//指定freemarker的上下文环境和模板路径:
cfg.setServletContextForTemplateLoading(
getServletContext(), "WEB-INF/template");
}

public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//装载map数据模型信息
Map root = new HashMap();
root.put("information", "欢迎光临!O(∩_∩)O哈哈~");

//设置具体模板名称,并生成模板对象
Template t = cfg.getTemplate("test.flt");

//设置响应输出类型和编码格式
//设置浏览器用utf8来解析返回的数据
response.setHeader("Content-type", "text/html;charset=UTF-8");
//设置servlet用UTF-8转码,而不是用默认的ISO8859
response.setCharacterEncoding("UTF-8");
PrintWriter out = response.getWriter();//创建相应内容写出对象

//将map数据模型与模板结合输出
try {
t.process(root, out);
} catch (TemplateException e) {
throw new ServletException("加载Freemarker模板失败!",e);
}
}

public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request,response);
}
}

可以看到,在代码中,首先在init方法中初始化freemarker的配置类Configuration,指定上下文


对象和模板路径。然后在具体的get或post请求处理方法中,装载Map数据模型、生成具体模板对象,


设置响应的类型和编码格式,创建响应写出对象,然后将模板与数据模型写出。



之后在WEB-INF/template下创建名为“test.flt”的模板文件:


【FreeMarker模板引擎】4.freemarker结合Servlet使用_xml_06


“test.flt”内容如下:


<html>
<head>
<title>FreeMarker 与 JavaWeb结合样例</title>
</head>
<body>
<h1 style="color:red">${information}</h1>
</body>
</html>


将该Web Project部署至Tomcat中,运行:


【FreeMarker模板引擎】4.freemarker结合Servlet使用_xml_07


在浏览器中访问“/servlet/HelloFreemarkerServlet”即可得到freemarker编译模板后


的HTML页面:


【FreeMarker模板引擎】4.freemarker结合Servlet使用_Freemarker_08


以上就是Freemarker与JavaWeb结合的样例。



我们可以发现,使用Servlet来调Freemarker,显然有一些麻烦。可以说,要在Servlet集成


Freemarker,没有在Jsp中那么顺利,就需要写过滤器、拦截器来处理。而一般在开发中使用Servlet


作为后台处理响应时,使用Jsp作为视图模板就足够了,上面就是一个集合Freemarker的基础实例,


大家参考即可,重点是以后要讲解的Freemarker与Web开发框架的结合。

标签:FreeMarker,freemarker,Servlet,HelloFreemarkerServlet,import,servlet,模板
From: https://blog.51cto.com/u_16012040/6131015

相关文章

  • 【FreeMarker模板引擎】3.freemarker命名空间
    上一篇我们讨论了freemarker的数据结构、控制语句的基础知识和使用技巧,本篇我们介绍一下freemarker的命名空间。一、命名空间简介和使用对于“命......
  • day94-javaweb-servlet路径问题
    servlet路径问题在web.xml中设置不同映射走的对应的路径<!--可以自定义后缀实现请求路径注意:*前面不能加项目映射的路径hello/sasasas.ggugu......
  • day93- javaweb-servlet学习
    javaweb的Servlet1.下载maven,tomcat试了10版本的tomcat,好像不兼容,果断放弃安装了tomcat9,就成功了,真是神奇,高了我半天查了各种攻略,tomcat10确实是bug一堆2.从maven中导......
  • 4 HttpServletRequest
    ​ HttpServletRequestHttpServletRequest对象代表客户端浏览器的请求,当客户端浏览器通过HTTP协议访问服务器时,HTTP请求中的所有信息都会被Tomcat所解析并封装在这个对......
  • 4 HttpServletRequest
    ​ HttpServletRequestHttpServletRequest对象代表客户端浏览器的请求,当客户端浏览器通过HTTP协议访问服务器时,HTTP请求中的所有信息都会被Tomcat所解析并封装在这个对......
  • 9 ServletConfig和ServletContext
    ​ ServletContext和ServletConfigServletContext对象ServletContext对象介绍ServletContext官方叫Servlet上下文。服务器会为每一个Web应用创建一个ServletContext对......
  • 9 ServletConfig和ServletContext
    ​ ServletContext和ServletConfigServletContext对象ServletContext对象介绍ServletContext官方叫Servlet上下文。服务器会为每一个Web应用创建一个ServletContext对......
  • 8 Servlet的生命周期1
    ​    Servlet的生命周期 Servlet的生命周期是由容器管理的,分别经历四各阶段:阶段     次数    时机创建     1次    ......
  • 8 Servlet的生命周期1
    ​    Servlet的生命周期 Servlet的生命周期是由容器管理的,分别经历四各阶段:阶段     次数    时机创建     1次    ......
  • 7 Servlet的继承结构1
    Servlet的继承结构 Servlet接口1.init(),创建Servlet对象后立即调用该方法完成其他初始化工作。2.service(),处理客户端请求,执行业务操作,利用响应对象响应客户端请求。......