和所有的介绍一样,我们以Hello World开始,在以后所有的例子中,我们采用webwork/xwork作为Controller.
package cn.martin.freemarker.quickstart.action;
import com.opensymphony.xwork.ActionSupport;
/**
* @author martin
*/
public class HelloAction extends ActionSupport {
private String message;
public String getMessage() {
return message;
}
public String execute() throws Exception {
this.message ="Hello World!";
return SUCCESS;
}
}
import com.opensymphony.xwork.ActionSupport;
/**
* @author martin
*/
public class HelloAction extends ActionSupport {
private String message;
public String getMessage() {
return message;
}
public String execute() throws Exception {
this.message ="Hello World!";
return SUCCESS;
}
}
我们的页面很简单,只是显示message
<html>
<head>
<title>FreeMarker Quick Start</title>
</head>
<body>
${message}
</body>
</html>
<head>
<title>FreeMarker Quick Start</title>
</head>
<body>
${message}
</body>
</html>
- ${message}:称为interpolations,FreeMarker会在输出时用实际值进行替代,它会按以下的顺序查找message变量
- The value stack
- The action context
- Request scope
- Session scope
- Application scope
- Built-in variables
如果没有该变量,会抛出异常。
其他还有
- FTL标记(FreeMarker模板语言标记):以<#开头,我们会在下面用到
- 注释:包含在<#-
和->之间
配置xwork.xml
<!DOCTYPE xwork PUBLIC "-//OpenSymphony Group//XWork 1.0//EN"
"http://www.opensymphony.com/xwork/xwork-1.0.dtd">
<xwork>
<include file="webwork-default.xml"/>
<package name="default" extends="webwork-default">
<action name="demo"
class="cn.martin.freemarker.quickstart.action.HelloAction">
<result name="success" type="freemarker">/templates/demo.ftl</result>
</action>
</package>
</xwork>
"http://www.opensymphony.com/xwork/xwork-1.0.dtd">
<xwork>
<include file="webwork-default.xml"/>
<package name="default" extends="webwork-default">
<action name="demo"
class="cn.martin.freemarker.quickstart.action.HelloAction">
<result name="success" type="freemarker">/templates/demo.ftl</result>
</action>
</package>
</xwork>
webwork.properties
# extension for actions
webwork.action.extension=
# spring integration
#webwork.objectFactory=spring
#webwork.objectFactory.spring.autoWire=type
### Configuration reloading
# This will cause the configuration to reload xwork.xml when it is changed
webwork.configuration.xml.reload=true
### Load custom default resource bundles
webwork.custom.i18n.resources=default
### character encoding
webwork.i18n.encoding=UTF-8
webwork.action.extension=
# spring integration
#webwork.objectFactory=spring
#webwork.objectFactory.spring.autoWire=type
### Configuration reloading
# This will cause the configuration to reload xwork.xml when it is changed
webwork.configuration.xml.reload=true
### Load custom default resource bundles
webwork.custom.i18n.resources=default
### character encoding
webwork.i18n.encoding=UTF-8
- 暂时我们用不到spring,没有必要引人
- 至于后缀,个人爱好,我不喜欢那么多的东西,没有任何后缀.
工程整体结构如下:
web.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd">
<web-app>
<filter>
<filter-name>webwork</filter-name>
<filter-class>com.opensymphony.webwork.dispatcher.FilterDispatcher</filter-class>
</filter>
<filter-mapping>
<filter-name>webwork</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>demo.action</welcome-file>
</welcome-file-list>
<taglib>
<taglib-uri>webwork</taglib-uri>
<taglib-location>/WEB-INF/lib/webwork.jar</taglib-location>
</taglib>
</web-app>
<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd">
<web-app>
<filter>
<filter-name>webwork</filter-name>
<filter-class>com.opensymphony.webwork.dispatcher.FilterDispatcher</filter-class>
</filter>
<filter-mapping>
<filter-name>webwork</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>demo.action</welcome-file>
</welcome-file-list>
<taglib>
<taglib-uri>webwork</taglib-uri>
<taglib-location>/WEB-INF/lib/webwork.jar</taglib-location>
</taglib>
</web-app>
OK!deploy到server看一下结果:
Next:继续前进
我们来将页面做的更友好一些,用户输入姓名,显示Hello + 用户名
<html>
<head>
<title>FreeMarker Quick Start</title>
</head>
<body>
<#if userName?exists&&userName?has_content>
Hello ${userName}!
</#if>
<form action="demo" method="post">
Input your name:<input type="text" size="8" name="userName"/>
<input type="submit" value="Get Words"/>
</form>
</body>
</html>
<head>
<title>FreeMarker Quick Start</title>
</head>
<body>
<#if userName?exists&&userName?has_content>
Hello ${userName}!
</#if>
<form action="demo" method="post">
Input your name:<input type="text" size="8" name="userName"/>
<input type="submit" value="Get Words"/>
</form>
</body>
</html>
在该页面中,我们见到一些奇怪的表达式
<#if userName?exists&&userName?has_content>
Hello ${userName}!
</#if>
Hello ${userName}!
</#if>
这是FreeMarker的表达式,暂时不管它,先了解一下即可,以后会有专门的介绍.
- userName?exists 判断该变量是否存在
- userName?has_content 判断该变量是否不为null并且不为empty
修改Action
package cn.martin.freemarker.quickstart.action;
import com.opensymphony.xwork.ActionSupport;
/**
* @author martin
*/
public class HelloAction extends ActionSupport {
private String userName;
public void setUserName(String userName) {
this.userName = userName;
}
public String getUserName() {
return userName;
}
public String execute() throws Exception {
System.out.println("HelloAction.execute() begin");
return SUCCESS;
}
}
import com.opensymphony.xwork.ActionSupport;
/**
* @author martin
*/
public class HelloAction extends ActionSupport {
private String userName;
public void setUserName(String userName) {
this.userName = userName;
}
public String getUserName() {
return userName;
}
public String execute() throws Exception {
System.out.println("HelloAction.execute() begin");
return SUCCESS;
}
}
结果如下:
代码:freemarker.rar 去掉了webwork/xwork/freemarker lib,请自行添上。
参考:
xwork:http://www.opensymphony.com/xwork
webwork:http://www.opensymphony.com/
freemarker:http://freemarker.org/
相关推荐
本篇将深入探讨如何自定义FreeMarker标签,以扩展其功能并适应特定项目需求。 首先,理解FreeMarker的默认标签语法至关重要。FreeMarker使用${...}表达式来插入变量,#{...}用于输出注释,以及、等控制结构进行条件...
Freemarker是一个强大的模板引擎,常用于JavaEE应用中的视图层处理,尤其与Struts2等MVC框架配合使用,能实现灵活的动态页面渲染。这个"freemarker Demo"是一个适合初学者的示例项目,旨在帮助新接触Freemarker的...
`freemarker-2.3.23.jar`是Freemarker库的一个版本,发布于2.3.23,这个版本可能包含了对早期版本的一些改进、新功能或bug修复。 Freemarker的核心概念是模板语言,它是一种声明式的编程方式,允许开发者编写不包含...
camel-freemarker-1.6.4.jar, camel-freemarker-2.8.1.jar, com.springsource.freemarker-2.3.15.jar, com.springsource.freemarker-sources-2.3.15.jar, freemarker-1.4.1.jar, freemarker-2-3-18.jar, freemarker-...
这个"freemarker-2.3.28.jar"是Freemarker库的一个具体版本,版本号为2.3.28,它是Java的一个可执行的JAR(Java Archive)文件,用于在Eclipse集成开发环境中作为插件使用。 在Freemarker的2.3.28版本中,我们可以...
标题:Freemarker 描述:孔浩的Freemarker视频笔记,值得一看! 根据给定的文件信息,我们可以深入探讨Freemarker的相关知识点,包括其基本概念、工作流程以及具体的代码实现。 ### Freemarker基本概念 ...
而Freemarker则是一种轻量级的、基于模板的Java模板引擎,常用于Web应用中的动态内容生成,比如JSP替代技术。它允许开发者将业务逻辑与页面展示分离,提高代码的可维护性和可读性。 "eclipse的freemarker插件"是指...
赠送jar包:freemarker-2.3.31.jar; 赠送原API文档:freemarker-2.3.31-javadoc.jar; 赠送源代码:freemarker-2.3.31-sources.jar; 赠送Maven依赖信息文件:freemarker-2.3.31.pom; 包含翻译后的API文档:...
FreeMarker 2.3.18是该引擎的一个版本,它提供了一系列的更新和改进,以提高性能和易用性。 1. **模板语言基础** FreeMarker的模板语言是一种声明式的编程方式,它允许开发者通过简单的标记语法来控制输出。这些...
2.3.23是FreeMarker的一个稳定版本,这个版本的官方中文文档提供了全面的指导和说明,帮助开发者更好地理解和使用这个模板语言。 在FreeMarker的核心概念中,它是一个基于数据驱动的模板语言。这意味着,开发者不...
赠送jar包:freemarker-2.3.30.jar; 赠送原API文档:freemarker-2.3.30-javadoc.jar; 赠送源代码:freemarker-2.3.30-sources.jar; 赠送Maven依赖信息文件:freemarker-2.3.30.pom; 包含翻译后的API文档:...
FreeMarker的设计理念是将表现层(视图)和业务逻辑层(控制器)分离,从而实现MVC(Model-View-Controller)架构中的“View”部分。 FreeMarker的核心概念是模板文件,这是一种特殊的文本文件,其中包含可替换的...
Freemarker是一款强大的模板语言,常用于Web开发中的视图层渲染,特别是在Java环境中与Spring框架结合使用。它允许开发者将逻辑与展示分离,提高代码的可读性和维护性。在开发过程中,为了提高效率,我们可以使用...
安装freemarker插件(freemarker的eclipse插件) a) 首先下载 freemarker-ide-0.9.14.zip(在这里不用下载了,附件中已经有了) b) 解压后:把hudson.freemarker_ide_0.9.14这个文件放到:eclipse\plugins下面 c) 发现...
Freemarker是一个强大的模板引擎,常用于Web应用中的视图层渲染,比如Java Web开发。它的核心设计理念是将数据模型与展示逻辑分离,使得开发者可以专注于业务数据的处理,而视图的呈现则由模板来完成。这个压缩包...
Freemarker是一款强大的模板引擎,用于将数据模型与表示层分离,从而实现在Web开发中的动态页面生成。根据所提供的文件信息,我们可以详细探讨以下几个关键的知识点: ### 1. 创建配置实例 在Freemarker中,`...
在这个"freemarker-2.3.22"的压缩包中,包含了Freemarker 2.3.22版本的相关资源,有助于我们深入了解和使用这个库。 首先,`README.txt`通常包含项目的基本信息、安装指南和快速入门等内容。在这个版本中,它可能...
FreeMarker提供了一种灵活且强大的方式来处理动态内容,尤其适用于Web开发中的视图层。在FreeMarker中实现通用的分页功能是提高Web应用程序性能和用户体验的重要一环。 ### FreeMarker通用分页知识点解析 #### 1. ...
在处理Freemarker模板引擎时,中文乱码问题是一个常见的挑战,尤其是在国际化应用中。Freemarker是一款功能强大的模板引擎,被广泛应用于Web开发中,用于动态生成HTML、XML等文本格式的页面。然而,当涉及到非英文...