本文主要分三步演示Freemarker这个模版视图的使用:普通Java程序--》Web应用--》与Struts2整合,代替JSP。
一、Freemarker简介
Freemarker是一个非常优秀的模版引擎,这个模版引擎可用于任何场景,FreeMarker负责将数据模型中的数据合并到模版中,从而生成标准输出。
FreeMarker特别适应与MVC模式的Web应用,通常有Java程序准备要显示的数据,由FreeMarker模版引擎来生成页面,而FreeMarker模版则提供页面布局支持,从而能更好地规范MVC架构,保证视图逻辑和业务逻辑分离。
除此之外,FreeMarker也是与Web容器无关的,也就是FreeMarker并不一定要运行在Web容器中;FreeMarker同样应用与非Web应用程序环境。而且,FreeMarker并不是只能生成HTML页面,它也可以生成各种文本,如XML/RTF/Java源代码等。
Struts2可以非常简单地使用FreeMarker模版作为视图技术,对于传统的JSP页面而言,FreeMarker是一个绝佳的替代方案。
除此之外,Struts2默认采用FreeMarker作为其模版文件,而Struts2所有主题模版文件都是采用FreeMarker编写的。因此,如果我们需要扩展Struts2的主题,也需要熟悉FreeMarker技术。
二、Java程序中使用FreeMarker
HelloFreeMarker.java
package com.s2freemarker.exer.test;
import java.io.File;
import java.io.OutputStreamWriter;
import java.util.HashMap;
import java.util.Map;
import freemarker.template.Configuration;
import freemarker.template.Template;
public class HelloFreeMarker {
private Configuration cfg ;
public void init() throws Exception {
cfg = new Configuration();
cfg.setDirectoryForTemplateLoading(new File("src\\com\\s2freemarker\\exer\\templates"));
}
public void process() throws Exception{
Map<Object,Object> root = new HashMap<Object,Object>();
root.put("name", "FreeMarker");
root.put("msg", "First example for freemarker .");
Template t = cfg.getTemplate("test.ftl");
t.process(root, new OutputStreamWriter(System.out));
}
/**
* @param args
*/
public static void main(String[] args) throws Exception{
HelloFreeMarker hfm = new HelloFreeMarker();
hfm.init();
hfm.process();
}
}
模版文件test.ftl:
${name},hello!${msg}
三、Web应用中使用FreeMarker
HTML模版test.ftl:
<html>
<head><title>FreeMarker</title></head>
<body>
${message}
</body>
</html>
Servlet——FreemarkerServlet:
package com.s2freemarker.exer.web.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;
public class FreemarkerServlet extends HttpServlet {
/**
*
*/
private static final long serialVersionUID = 5495454566664178949L;
private Configuration config;
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
this.doPost(request, response);
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
Map<Object , Object> root = new HashMap<Object,Object>();
root.put("message", "Hello FreeMarker");
Template t = config.getTemplate("test.ftl");
response.setContentType("text/html;charset="+t.getEncoding());
Writer out = response.getWriter();
try {
t.process(root, out);
} catch (TemplateException e) {
throw new ServletException("Handle template error !",e);
}
}
/**
* Initialization of the servlet. <br>
*
* @throws ServletException if an error occurs
*/
public void init() throws ServletException {
config = new Configuration();
//the method of loading template in the servlet Configuration.setServletContextForTemplateLoading()
config.setServletContextForTemplateLoading(getServletContext(), "WEB-INF\\templates");
}
}
四、整合Struts2
index.jsp:
<%@ page language="java" contentType="text/html;charset=UTF-8"%>
<%@ page session="false" %>
<%
response.sendRedirect(request.getContextPath()+"/freemarker_index.action");
%>
在FreeMarker模版中增加标签库定义后,就可以在FreeMarker模版中使用Struts2标签了。(<#assign s=JspTaglibs["/WEB-INF/struts-tags.tld"]>)
将Struts2核心jar包下的struts-tags.tld文件复制到WEB-INF路径下。
在web.xml中启动JspSupportServlet。
HTML模版test2.ftl:
<#assign s=JspTaglibs["/WEB-INF/struts-tags.tld"]>
<html>
<head><title>Struts2 FreeMarker</title></head>
<body>
<@s.form action="login.action">
<@s.textfield name="uid" label="USRNAME"/>
<@s.textfield name="password" label="PASSWORD"/>
<@s.submit value="login"/>
</@s.form>
</body>
</html>
welcome.ftl:
<html>
<head><title>welcome page</title></head>
<body>
Welcome , ${uid}, you have loged in .
</body>
</html>
Action——FreemarkerAction:
package com.s2freemarker.exer.web.actions;
import com.opensymphony.xwork2.ActionSupport;
public class FreemarkerAction extends ActionSupport {
/**
*
*/
private static final long serialVersionUID = 4684751322790860946L;
private String uid ;
private String password ;
public String getUid() {
return uid;
}
public void setUid(String uid) {
this.uid = uid;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String login() throws Exception{
return SUCCESS;
}
}
五、servlet和action所需配置文件web.xml/struts.xml
struts.xml:
将FreeMarkerz作为视图结果时要将resultType设置为freemarker。
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<constant name="struts.enable.DynamicMethodInvocation" value="true"/>
<package name="freemarker" extends="struts-default" >
<action name="FreemarkerServlet">
<result>/servlet/FreemarkerServlet</result>
</action>
<action name="freemarker_index">
<result type="freemarker">/WEB-INF/templates/test2.ftl</result>
</action>
<action name="login" class="com.s2freemarker.exer.web.actions.FreemarkerAction" method="login">
<result type="freemarker">/WEB-INF/templates/welcome.ftl</result>
</action>
</package>
</struts>
web.xml:
<?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">
<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<servlet>
<servlet-name>JspSupportServlet</servlet-name>
<servlet-class>org.apache.struts2.views.JspSupportServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet>
<servlet-name>FreemarkerServlet</servlet-name>
<servlet-class>com.s2freemarker.exer.web.servlet.FreemarkerServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>FreemarkerServlet</servlet-name>
<url-pattern>/servlet/FreemarkerServlet</url-pattern>
</servlet-mapping>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
</web-app>
分享到:
相关推荐
• 采用hibernate3+struts2+spring2+freemarker主流技术架构 • 懂html就能建站,提供最便利、合理的使用方式 • 强大、灵活的标签,用户自定义显示内容和显示方式 • 在设计上自身预先做了搜索引擎优化,增强对...
Struts2和FreeMarker结合,表现层使用FTL标签,并在FTL页面中使用Struts2标签,供入门的朋友用,属最最基础的东东. 方家批评!
struts2_freemarker_mysql applicaton 这对于已有struts2和webwork基础的来说是一个很不错的学习实例。 带了具体说明及jar包
第1章 Struts 2概述,第2章 Struts 2下的HelloWorld,第3章 Struts 2基础,第4章 深入Struts 2,第5章 Struts 2的类型转换,第6章 文件的上传和下载.,第7章 Struts 2的拦截器,第8章 Struts 2的输入校验,9.2 ...
freemarker-2.3.19.jar Struts2的UI标签的模板,javassist-3.11.0.GA.jar 开源的分析、编辑和创建Java字节码的类库,ognl-3.0.6.jar 对象图导航语言包,struts2-core-2.3.16.3.jar Struts框架的核心类库,xwork-core...
Struts2 实际上是在 Webwork 基础上构建起来的 MVC 框架。我们从 Struts2 的 源代码中可以看到,有很多都是直接使用的 xwork(Webwork 的核心技术 ) 的包。既然从技术 上来说 Struts2 是全新的框架,那么就让我们来...
struts2框架搭建基础jar包,具体包括: commons-fileupload-1.3.3.jar; commons-io-2.5.jar; commons-lang3-3.6.jar; commons-logging-1.1.3.jar; freemarker-2.3.26-incubating.jar; ognl-3.1.15.jar; struts...
org.apache.struts2.views.freemarker.FreemarkerResult 16 httpheader 16 控制特殊http行为的结果类型 16 org.apache.struts2.dispatcher.HttpHeaderResult 16 stream 16 向浏览器发送InputSream对象,通常用来处理...
struts2的最基础的五个驱动包, 1、commons-logging-1.0.4.jar 2、freemarker-2.3.8.jar 3、ognl-2.6.11.jar 4、struts2-core-2.0.11.jar 5、xwork-2.0.4.jar
1. 导入的包 <br>l struts2的五个基础包:commons-logging-1.1.jar; <br>freemarker-2.3.8.jar; <br>ognl-2.6.9.jar; <br>struts-core-2.0.6.jar; <br>xwork-2.0.0.jar. <br>l spring的核心包:...
struts2基础包,commons-logging.jar、freemarker-2.3.15.jar、ognl-2.7.3.jar、struts2-core-2.1.8.jar、xwork-core-2.1.6.jar
第1章 Struts 2:现代Web框架 2 1.1 Web应用程序:快速学习 2 1.1.1 构建Web应用程序 2 1.1.2 基础技术简介 3 1.1.3 深入研究 6 1.2 Web应用程序框架 7 1.2.1 什么是框架 7 1.2.2 为什么使用框架 8 1.3 Struts 2框架...
9.1 Struts2国际化基础应用 178 9.1.1 国际化基础使用方式 178 9.1.2 占位符国际化使用方式 182 9.2 Struts2国际化使用范围说明 185 9.2.1 Struts2包范围属性文件国际化应用。 186 9.2.2 Struts2Action范围属性文件...
│深入浅出STRUTS 2 Struts Ti却发现了二者在技术与开发人员这两个层面上的共同之处,不久之后,两个项目就在WebWork的技术基础上进行了合并2。 当我们说起WebWork的时候,我们实际上说的是两个项目——XWork和...
FreeMarker是专为实际的一代的 HTML 网页,特别是通过的servlet为基础的应用程序... 但是请注意,我们提供了型的解决方案中使用FreeMarker作为视图组成部分模型2框架(如Struts的) ,这也让你使用JSP的taglibs的模板。
jar文件清单: commons-fileupload-1.2.2.jar commons-io-2.0.1.jar commons-lang3-3.1.jar freemarker-2.3.19.jar javassist-3.11.0.GA.jar ognl-3.0.5.jar struts2-core-2.3.4.1.jar xwork-core-2.3.4.1.jar
• 架构技术: Struts2+Spring3+Hibernate4+EasyUI1.3+Spring JDBC+Highcharts报表+Jquery+Ehcache+Freemarker • 代码生成器:自动生成美观大方的前台页面及后台代码 • 查询条件生成器: 动态拼SQL,追加查询条件 •...
struts-2.3.4版本中所有的Jar包文件,配置最基础的structs2所需的6个必须的jar文件为: commons-fileupload-1.2.2.jar commons-logging-1.1.1.jar freemarker-2.3.19.jar ognl-3.0.5.jar struts2-core-2.3.4.jar ...
7.3.1freemarker基础 155 7.3.2struts2整合freemarker 166 7.3.3使用struts2标签设计模板 170 7.4freemarker与velocity的比较 171 本章小结 171 课后练习 172 第8章hibernate框架基础 173 8.1orm简介 173 ...
Struts2 Struts2核心控制流程、Ognl、Action、Interceptor、Result、FreeMarker、Struts2标记库、Struts2扩展、Struts2应用技巧(输入验证、消息国际化、文件上传和下载、防止重复提交等)。 熟练掌握Struts2核心...