FreeMark2.3支持 XML;在程序中可直接把xml文件作为数据模型,按用户模板文件的要求,输出相应的文件(或流)给用户。
与前面相比,关键有:
引用
1 freemarker.ext.dom.NodeModel.parse这个方法将把xml文件处理成map树状结构的模型;该方法支持以File对象,读xml;也提供了一个流适配器,从面能用InsputStream流对象读xml文件。
2 Map root = new HashMap();
root.put("doc", freemarker.ext.dom.NodeModel.parse( ins));
这里要注意:经处理后:”doc”,在数据模型中是根;而xml文件的根是它的子节点;
在读数据时,要从doc开始,否则出错。当然,”doc”也可改成其他名字。
3 增加了一个recurse指令。
FreeMarker这样处理的xml结构的数据模型的:
(1) 按层定义宏;宏名---就是节点名。(这是强行约定的)
(2) recurse----将循环调用处理子节点的宏
下面是在java应用程序中,应用freemarker的示例:
(1) ddd.xml
注意:ddd.xml位于classpath下的jap1文件夹下,与下面的 FMtest.java的位置相同。在netbean开发环境中,位于 src\java\jsp1下。[size=medium]
<?xml version="1.0" encoding="UTF-8"?>
<root>
<user>
<name>张三1111</name>
</user>
<user>
<name>李四hhhh</name>
</user>
</root>
(2) FMTest.java -------应用freemarker的类
package jap1;
import freemarker.template.Configuration;
import freemarker.template.Template;
import freemarker.template.TemplateException;
import java.io.IOException;
import java.io.InputStream;
import java.io.StringWriter;
import java.util.HashMap;
import java.util.Locale;
import java.util.Map;
import javax.xml.parsers.ParserConfigurationException;
import org.xml.sax.InputSource;
import org.xml.sax.SAXException;
public class FMTest {
public static void main(String[] args) throws Exception {
FMTest test=new FMTest();
test.getFile();
}
@SuppressWarnings("empty-statement")
public void getFile() throws IOException, TemplateException,
SAXException, ParserConfigurationException{
//得FreeMarker配置对象
Configuration cfg = new Configuration();
cfg.setEncoding(Locale.getDefault(), "UTF-8");
cfg.setClassForTemplateLoading(this.getClass(),"/jap1");
//得FreeMarker的关键对象---------模板
Template temp = cfg.getTemplate("test.ftl");
//得FMTest类运行时/jap1/ddd.xml的输入流文件,以便FreeMarker读出来
//注意:FMTest运行时,ddd.xml在工程打包的包中。Java强烈要求只能读包内
//文件。如果要得到运行的绝对路径,再用可写的流打包,java会严重抗议!
InputStream in =FMTest.class.getResourceAsStream("/jap1/ddd.xml");
//下面是FreeMarker的输入接口,这里与上面的in流建立关系,
//以便读取ddd.xml文件
InputSource ins=new org.xml.sax.InputSource(in);
Map root = new HashMap();
//特别注意此时的doc,这个符号将是,FreeMarker模板中取数的根!!!!!
//这里读取xml文件,并处理成root对象
root.put("doc", freemarker.ext.dom.NodeModel.parse( ins));
//建立内存字符串流
java.io.StringWriter w =new StringWriter();
//模板开始按模板中的要求把用户输入的数据进行转换,并输出到字符串流中
temp.process(root, w);
//字符串流输出到屏幕
System.out.println(w.toString());
}
}
(3) test.ftl --------模板文件
测试单个读数操作-----${doc.root.user[0].name}
列表测试:
<#list doc.root.user as dd>
${dd.name}
</#list>
<#--recurse指令,按层读取整个xml节点,并循环调用处理这些节点的宏-->
<#recurse doc><#--root是doc的子节点,这里将循环调用<#marco root>宏 -->
读doc
<#macro root>
读root <#recurse><#--user是root的子节点,这里将循环调用<#marco user>宏 -->
</#macro>
<#macro user>
姓名:${.node.name};测试recurse指令,user
</#macro>
(4) 运行结果
测试单个读数操作-----张三1111
列表测试:
张三1111
李四hhhh
读root
姓名:张三1111;测试recurse指令,user
姓名:李四hhhh;测试recurse指令,user
读doc
[/size]
分享到:
相关推荐
-- 数据源配置 --> <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource"> <property name="driverClassName" value="com.mysql.jdbc.Driver"/> <property name="url" value="jdbc:mysql://...
<param-value>/WEB-INF/springmvc-servlet.xml</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>springmvc</servlet-name> <url-pattern>/</...
为了确保应用程序能够正确地连接到数据库,需要在`applicationContext.xml`中配置数据源: ```xml <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"> <property name=...
<artifactId>spring-boot-starter-freemarker</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> </dependency> ...
- **XML 遍历指令**:2.3 版本新增了 `<#recurse>` 和 `<#visit>` 指令,用于递归遍历 XML 树。 - **直观的 XML 访问**:提供直观的方式在模板中访问 XML 对象模型。 #### 三、Freemarker 与 Struts 结合的应用 ...
总结来说,这个源码示例主要展示了如何使用XML作为数据源,结合Java的XML解析技术和FreeMarker模板引擎,实现一个新闻显示系统。这涵盖了XML解析、数据模型构建、模板引擎使用等多个关键知识点,对于理解和开发类似...
这个配置文件可以定义数据源、事务管理器等信息。例如: ```xml <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" ...
在`applicationContext.xml`中配置数据源(DataSource),例如使用Druid作为数据源。 3. **配置SqlSessionFactory**: - 创建`SqlSessionFactoryBean`实例。 - 设置数据源、Mapper XML文件的位置等属性。 - ...
- **spring-mybatis.xml**:Spring和MyBatis的相关配置,包括数据源、事务管理器等。 - **spring-mvc.xml**:SpringMVC的相关配置,包括视图解析器、拦截器等。 - **jdbc.properties**:数据库连接相关的配置信息。 ...
同时,还需创建MyBatis的`mybatis-config.xml`配置文件,以及`sqlMapConfig.xml`,用来配置数据源和Mapper扫描路径。 接着,设计数据库模型。创建一个实体类,比如`Paper`,它将映射到数据库中的表。同时,编写对应...
FreeMarker是一个开放源代码的模板引擎,它能够将数据模型与表现层分离,使开发人员能够更加专注于业务逻辑的实现,而让前端工程师或设计师专注于界面的设计。这种模式有助于提高开发效率,并且使得维护变得更加容易...
FreeMarker 是一个强大的模板引擎,主要用于将数据模型与模板结合,生成各种文本输出,包括但不限于HTML、XML、RTF和Java源代码等。它的核心理念是分离表现层(视图)和业务逻辑层(模型),使得开发者能够专注于...
2. **遍历列表**:使用Freemarker的`<#list>`标签遍历数据列表。 3. **插入行**:根据当前元素的位置(索引),决定是否需要添加新的`<tr>`标签。 4. **插入单元格**:为每个列表元素添加`<td>`标签。 5. **处理最后...
Freemarker 是一个用 Java 编写的模板引擎,它基于模板来生成文本输出。这些模板可以是任何格式的纯文本文件,例如:HTML、XML、Java 源代码等。Freemarker 通过指令、内置方法等提供了一套强大的功能集合,使得...
<param-value>/WEB-INF/spring/appServlet/servlet-context.xml</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>dispatcher</servlet-name>...
在实际开发中,你可能还需要配置数据源、AOP、拦截器等,以及引入其他第三方库,如MyBatis、Hibernate等,以实现更复杂的功能。在不断地实践中,你将对SpringMVC有更深入的理解,并能构建出功能丰富的Web应用。
`pom.xml`是Maven项目的配置文件,它管理项目的依赖关系和其他构建元数据。以下是pom.xml文件的基本结构: ```xml <?xml version="1.0" encoding="UTF-8"?> <project xmlns=...
在`hibernate.cfg.xml`文件中定义数据源和映射文件路径等: ```xml <hibernate-configuration> <session-factory> <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property> ...
在现代的Web应用开发中,SpringBoot框架因其...以上内容详细介绍了SpringBoot整合多数据源的实践方法,以及解决Lombok报错问题和使用Freemarker、Undertow、JSP的相关配置。希望对你在SpringBoot开发过程中有所帮助。