本文主要分三步演示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就能建站,提供最便利、合理的使用方式 • 强大、灵活的标签,用户自定义显示内容和显示方式 • 在设计上自身预先做了搜索引擎优化,增强对...
总结起来,"spring+hibernate+struts2+freemarker SSH2 新闻发布系统"是一个基础的Java Web项目,展示了SSH2框架组合在实际开发中的应用。开发者可以通过学习这个小例子,理解如何整合这些技术来构建更复杂的Web应用...
在这个“struts1+spring+hibernate+freemarker一个小例子”中,我们将探讨这四个组件如何协同工作,以及它们各自的核心功能。 首先,Struts1是MVC(模型-视图-控制器)设计模式的一个实现,主要用于处理HTTP请求和...
Struts2还支持多种视图技术,如JSP、FreeMarker、Velocity等,让开发者有更多选择。 Spring框架则是一个全面的企业级应用开发框架,它的核心特性包括依赖注入(DI)和面向切面编程(AOP)。依赖注入帮助解耦组件,...
在Java Web开发中,SSHF(Struts2、Spring、Hibernate和FreeMarker)是一个常见的技术栈,用于构建高效、可维护的MVC应用程序。这些框架的整合能够提供强大的功能,如模型-视图-控制器架构、依赖注入、持久化管理和...
Struts2和FreeMarker是两种在Java Web开发中广泛应用的技术。Struts2是一个基于MVC(Model-View-Controller)架构模式的开源框架,用于构建动态、数据驱动的Web应用程序,而FreeMarker则是一个模板引擎,它允许...
Struts2+Tiles是一个常用的Java Web开发框架组合,主要用于构建结构清晰、可维护性强的Web应用。Struts2是基于MVC(Model-View-Controller)设计模式的开源框架,而Tiles则是Struts2的一个视图层扩展,它提供了一种...
同时,Struts 2支持多种视图技术,如JSP、FreeMarker等,使得开发者可以灵活地展示数据。 Hibernate则是一个对象关系映射(ORM)框架,它消除了Java应用程序与数据库之间的直接交互,使得开发者能够用面向对象的...
1. **Struts2基础**:了解Struts2的MVC架构,学习Action、Result、Interceptor等概念,以及如何配置Struts2的XML文件。 2. **Struts2与Spring整合**:学习如何将Struts2的Action类与Spring的Bean管理结合,实现...
### MyEclipse开发SSH2(Struts2+Spring+...综上所述,通过上述步骤,你不仅能够成功在MyEclipse环境中搭建SSH2框架,还能深刻理解每个组件的作用及相互间的协作机制,为进一步开发复杂的企业级应用奠定坚实基础。
【FreeMarker】 FreeMarker 是一个模板引擎,用于动态生成 ...这些步骤都是 FreeMarker+Struts2+iBatis 整合应用的基础,它们帮助开发者高效地构建动态网站,将视图、控制和数据访问分离,提高代码的可读性和可维护性。
在视图层,Struts2支持多种技术,如JSP、FreeMarker或Velocity。在这个例子中,test2.jsp可能是用来显示结果的页面,可以包含动态数据从Action传递过来。 标签库是Struts2的一个强大特性,它提供了丰富的标签来简化...
本项目"maven+struts2+spring+mybatis+springMVC"就是一个典型的Java Web应用开发组合,利用了这些框架的优势进行集成,实现了数据持久化、业务逻辑处理、视图展示以及依赖管理等多个层面的功能。 首先,我们来详细...
**Struts2** 是一个基于MVC(Model-View-Controller)设计模式的Java Web框架,它在Struts1的基础上进行了很多改进,提供了更丰富的功能和更好的性能。Struts2的核心是Action类,它处理用户请求,并与业务逻辑层进行...
STRUTS2是一个基于MVC设计模式的Java Web框架,它简化了模型与视图、控制器的交互,支持多种视图技术,如JSP、FreeMarker等。STRUTS2的核心是Action和Interceptor,Action处理用户的请求,Interceptor处理业务逻辑和...
此外,Struts2支持多种模板技术,如FreeMarker和JSP,用于生成动态视图。 Spring框架则是一个全面的后端解决方案,包括依赖注入(DI)、面向切面编程(AOP)、事务管理、数据访问集成等。它允许开发者通过XML配置...
Struts2还支持多种视图技术,如JSP、FreeMarker等,以及丰富的插件系统,如国际化、表单验证等。 Spring框架则是一个全面的企业级应用开发框架,它不仅提供了依赖注入(DI)和面向切面编程(AOP)的能力,还涵盖了...
2. **jQuery基础**: jQuery简化了JavaScript的API,使开发者能够快速地选取DOM元素、操作样式、处理事件和进行AJAX通信。其核心功能包括选择器(如$("#id"))、DOM操作(如$(element).html())和动画效果(如...
6. **xwork-core-2.3.24.1.jar**:XWork是Struts2的基础,它提供了一种Action管理和拦截器机制,Struts2在其基础上实现了更高级的MVC功能。 7. **javassist-3.15.0-GA.jar** 和 **javassist-3.11.0.GA.jar**:这两...