我的编程空间,编程开发者的网络收藏夹
学习永远不晚

freemarker是什么

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

freemarker是什么

freemarker是什么?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。

FreeMarker是一个模板引擎,一个基于模板生成文本输出的通用工具,使用纯Java编写 

FreeMarker被设计用来生成HTML Web页面,特别是基于MVC模式的应用程序 

虽然FreeMarker具有一些编程的能力,但通常由Java程序准备要显示的数据,由FreeMarker生成页面,通过模板显示准备的数据。

FreeMarker不是一个Web应用框架,而适合作为Web应用框架一个组件 

FreeMarker与容器无关,因为它并不知道HTTP或Servlet;FreeMarker同样可以应用于非Web应用程序环境 

FreeMarker更适合作为Model2框架(如Struts)的视图组件,你也可以在模板中使用JSP标记库 

FreeMarker是免费的 

1、通用目标 

能够生成各种文本:HTML、XML、RTF、Java源代码等等 

易于嵌入到你的产品中:轻量级;不需要Servlet环境 

插件式模板载入器:可以从任何源载入模板,如本地文件、数据库等等 

你可以按你所需生成文本:保存到本地文件;作为Email发送;从Web应用程序发送它返回给Web浏览器 

2、强大的模板语言 

所有常用的指令:include、if/elseif/else、循环结构 

在模板中创建和改变变量 

几乎在任何地方都可以使用复杂表达式来指定值 

命名的宏,可以具有位置参数和嵌套内容 

名字空间有助于建立和维护可重用的宏库,或者将一个大工程分成模块,而不必担心名字冲突 

输出转换块:在嵌套模板片段生成输出时,转换HTML转义、压缩、语法高亮等等;你可以定义自己的转换 

3、通用数据模型 

freeMarker不是直接反射到Java对象,Java对象通过插件式对象封装,以变量方式在模板中显示 

你可以使用抽象(接口)方式表示对象(JavaBean、XML文档、SQL查询结果集等等),告诉模板开发者使用方法,使其不受技术细节的打扰 

4、为Web准备 

  • 在模板语言中内建处理典型Web相关任务(如HTML转义)的结构 

  • 能够集成到Model2 Web应用框架中作为JSP的替代 

  • 支持JSP标记库 

  • 为MVC模式设计:分离可视化设计和应用程序逻辑;分离页面设计员和程序员 

5、智能的国际化和本地化 

  • 字符集智能化(内部使用UNICODE) 

  • 数字格式本地化敏感 

  • 日期和时间格式本地化敏感 

  • 非US字符集可以用作标识(如变量名) 

  • 多种不同语言的相同模板 

6、强大的XML处理能力 

<#recurse> 和<#visit>指令(2.3版本)用于递归遍历XML树 

在模板中清楚和直觉的访问XML对象模型 

Helloworld

新建一个WEB工程,下载(我使用的是freemarker-2.3.20)freemarker并导入freemarker.jar,在WEB-INF下新建文件夹templates用于存放模版文件

在templates下新建test.ftl,这是示例模版文件。内容就是HTML内容,里面带有一个标记符,用于将来进行变量替换,内容如下:

<html>  <head>     <title>freemarker测试</title>   </head>   <body>     <h2>${message},${name}</h2>   </body> </html>

新建一个Servlet,用于请求设置变量,并处理模版的输出:

package com.test.servlet; 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; @SuppressWarnings("serial") public class HelloFreeMarkerServlet extends HttpServlet {   // 负责管理FreeMarker模板的Configuration实例   private Configuration cfg = null;   public void init() throws ServletException {     // 创建一个FreeMarker实例     cfg = new Configuration();     // 指定FreeMarker模板文件的位置     cfgsetServletContextForTemplateLoading(getServletContext(),         "/WEB-INF/templates");   }   @SuppressWarnings("unchecked")   public void doPost(HttpServletRequest request, HttpServletResponse response)       throws ServletException, IOException {     // 建立数据模型     Map root = new HashMap();     root.put("message", "hello world");     root.put("name", "java小强");     // 获取模板文件     Template t = cfg.getTemplate("test.ftl");     // 使用模板文件的Charset作为本页面的charset     // 使用text/html MIME-type     responsesetContentType("text/html; charset=" + tgetEncoding());     Writer out = response.getWriter();     // 合并数据模型和模板,并将结果输出到out中     try {       tprocess(root, out); // 往模板里写数据     } catch (TemplateException e) {       e.printStackTrace();     }   }   public void doGet(HttpServletRequest request, HttpServletResponse response)       throws ServletException, IOException {     doPost(request, response);   }   public void destroy() {     super.destroy();   } }

注意要在你的web.xml中配置该Servlet:

<?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">   <servlet>     <servlet-name>hello</servlet-name>     <servlet-class>       com.test.servlet.HelloFreeMarkerServlet     </servlet-class>   </servlet>   <servlet-mapping>     <servlet-name>hello</servlet-name>     <url-pattern>/hello</url-pattern>   </servlet-mapping>   <welcome-file-list>     <welcome-file>index.jsp</welcome-file>   </welcome-file-list> </web-app>

为了方便测试,访问工程直接跳转到Servlet,对主页index.jsp做一个简单修改:

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <% String path = request.getContextPath(); String basePath = request.getScheme()+"://"+request.getServerName() +":"+request.getServerPort()+path+"/"; %> <html>  <body>   <%   String mypath = "hello";   response.sendRedirect(basePath + mypath);   %>  </body> </html>

看完上述内容是否对您有帮助呢?如果还想对相关知识有进一步的了解或阅读更多相关文章,请关注编程网行业资讯频道,感谢您对编程网的支持。

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

freemarker是什么

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

freemarker是什么

freemarker是什么?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。FreeMarker是一个模板引擎,一个基于模板生成文本输出的通用工具,使用纯Java编
2023-05-31

FreeMarker标签怎么使用

本篇内容介绍了“FreeMarker标签怎么使用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!在前台模板使用FreeMarker标签获取数据
2023-06-26

Java的Freemarker类怎么使用

本篇内容介绍了“Java的Freemarker类怎么使用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!一、工具类public class F
2023-06-29

springboot整合freemarker报错怎么解决

这篇文章主要讲解了“springboot整合freemarker报错怎么解决”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“springboot整合freemarker报错怎么解决”吧!spr
2023-06-30

Java怎么使用Freemarker生成页面静态化

本篇内容介绍了“Java怎么使用Freemarker生成页面静态化”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!前言:页面静态化其实就是将原
2023-07-02

SpringBoot怎么整合freemarker实现代码生成器

本文小编为大家详细介绍“SpringBoot怎么整合freemarker实现代码生成器”,内容详细,步骤清晰,细节处理妥当,希望这篇“SpringBoot怎么整合freemarker实现代码生成器”文章能帮助大家解决疑惑,下面跟着小编的思路
2023-07-05

怎么屏蔽前台FreeMarker模板的错误信息

这篇文章主要讲解了“怎么屏蔽前台FreeMarker模板的错误信息”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么屏蔽前台FreeMarker模板的错误信息”吧!通常不屏蔽模板的错误信息。
2023-06-26

利用Freemarker怎么生成一个树形导航菜单

利用Freemarker怎么生成一个树形导航菜单?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。很多导航菜单是树形的,即一级一级往下分,这样的结构固然需要用递归来处理。 对于
2023-05-31

freemarker静态化生成html页面乱码怎么解决

这篇文章主要介绍“freemarker静态化生成html页面乱码怎么解决”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“freemarker静态化生成html页面乱码怎么解决”文章能帮助大家解决问题。
2023-07-04

什么是 ipsec?SDN 是什么?

IPsec是一种协议套件,用于确保IP网络通信的安全,提供保密性、完整性和身份验证。SDN是一种网络架构,将网络控制平面与数据平面分离,集中控制和可编程性。两者的结合可增强网络安全性和可编程性:SDN可动态配置IPsec策略,IPsec增强SDN网络安全性,SDN简化IPsec管理。
什么是 ipsec?SDN 是什么?
2024-04-02

SpringBoot2怎么使用FreeMarker模板完成页面静态化处理

这篇文章主要介绍“SpringBoot2怎么使用FreeMarker模板完成页面静态化处理”,在日常操作中,相信很多人在SpringBoot2怎么使用FreeMarker模板完成页面静态化处理问题上存在疑惑,小编查阅了各式资料,整理出简单好
2023-07-06

Windows Vista是什么?什么是Windows Vista

我身边很多朋友对Windows Vista是什么一点都不知道,经常来问我,所以今天我就像大家详细介绍Windows Vista这个操作系统,如有不足,还请大家见谅,好了,进入正题:Windows Vista是微软公司的一款视窗操作系统。微软
2023-06-05

Spring之什么是ObjectFactory?什么是ObjectProvider?

这篇文章主要介绍了Spring之什么是ObjectFactory?什么是ObjectProvider?具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
2023-01-01

window.setinterval是什么 其作用是什么

window.setInterval是一个JavaScript方法,它允许您周期性地执行指定的函数或代码块。该方法以指定的时间间隔(以毫秒为单位)触发指定的函数。window.setInterval的语法如下:javascriptsetIn
2023-07-12

colspan_colspan是什么意思?作用是什么

colspan是HTML中的一个属性,用于指定一个单元格横跨的列数。作用是将一个单元格合并为多个列,使得该单元格占据更大的水平空间。例如,如果一个表格中有两列,而某个单元格需要占据这两列的水平空间,可以使用colspan属性将该单元格的co
2023-08-22

什么是DHCP?什么是DHCP服务器

DHCP是Dynamic Host Configuration Protocol(动态主机配置协议)的缩写,它是一种网络协议,常用于局域网(LAN)中自动分配IP地址和其他网络配置信息给客户端设备。DHCP服务器是运行DHCP协议的服务器,
2023-09-05

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录