freemarker技术入门例子(结合struts2)

由于最近项目里面要求要使用freemarker技术来做展现层,所以在网上搜索了好多资料,基础知识是看了李刚原来写的那本《struts2权威指南》。一直想在网上找一个很基础的例子来入门,但是不知道是我的原因还是怎么的,找到的都不是很理想,而且网上基本上是一篇文章到处贴。所以郁闷之下,就自己慢慢摸索写出了一个入门的例子,可以作为自己的总结,也可以让更多的初学者快速入门。

闲话少述,看例子。

*****例子的整个目录结构如下图:

说明:1、struts-tags.tld文件是由struts2的jar中拷贝出来的。

2、工程全部使用utf-8编码。

关键的几个文件:

1、index.ftl:

Java代码  

  1. <#assign s=JspTaglibs["/WEB-INF/struts-tags.tld"]/>
  2. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  3. <html xmlns="http://www.w3.org/1999/xhtml">
  4. <head>
  5. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  6. <title>freemarkerDemo</title>
  7. </head>
  8. <body>
  9. <@s.form action="users/users_login.action">
  10. ${"用户名"}:<@s.textfield name="username"/><br/>
  11. ${"密码"}:<@s.password name="password"/><br/>
  12. <@s.submit value="sign on"/>
  13. </@s.form>
  14. </body>
  15. </html>

2、profile.ftl:

Java代码  

  1. <#assign s=JspTaglibs["/WEB-INF/struts-tags.tld"]/>
  2. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  3. <html xmlns="http://www.w3.org/1999/xhtml">
  4. <head>
  5. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  6. <title>freemarkerDemo</title>
  7. </head>
  8. <body>
  9. 姓名:${username}
  10. <br/>
  11. 密码:${password}
  12. <br/>
  13. 年龄:${userInfo.age}
  14. <br/>
  15. 登录时间:${userInfo.signinTime?string("yyyy-MM-dd HH:mm:ss")}
  16. <br/>
  17. QQ:${userInfo.qq}
  18. <br/>
  19. 地址:${userInfo.addr}
  20. <hr/>
  21. 我的书籍:
  22. <#list userInfo.books as book>
  23. ${book}&nbsp;
  24. </#list>
  25. </body>
  26. </html>

3、web.xml:

Xml代码  

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
  5. http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
  6. <filter>
  7. <filter-name>struts2</filter-name>
  8. <filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>
  9. </filter>
  10. <filter-mapping>
  11. <filter-name>struts2</filter-name>
  12. <url-pattern>/*</url-pattern>
  13. </filter-mapping>
  14. <servlet>
  15. <servlet-name>JspSupportServlet</servlet-name>
  16. <servlet-class>org.apache.struts2.views.JspSupportServlet</servlet-class>
  17. <load-on-startup>1</load-on-startup>
  18. </servlet>
  19. <welcome-file-list>
  20. <welcome-file>index.jsp</welcome-file>
  21. </welcome-file-list>
  22. </web-app>

4、sturts.xml:

Xml代码  

  1. <?xml version="1.0" encoding="UTF-8" ?>
  2. <!DOCTYPE struts PUBLIC
  3. "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN"
  4. "http://struts.apache.org/dtds/struts-2.1.dtd">
  5. <struts>
  6. <constant name="struts.ui.theme" value="simple" />
  7. <package name="users" extends="struts-default" namespace="/users">
  8. <action name="users_*" class="com.pop.project.myftl.test.action.UserAction" method="{1}">
  9. <result name="index" type="freemarker">/WEB-INF/ftl/index.ftl</result>
  10. <result name="profile" type="freemarker">/WEB-INF/ftl/profile.ftl</result>
  11. </action>
  12. </package>
  13. </struts>

5、UserAction:

Java代码  

  1. package com.pop.project.myftl.test.action;
  2. import java.util.ArrayList;
  3. import java.util.Date;
  4. import java.util.List;
  5. import com.opensymphony.xwork2.ActionSupport;
  6. import com.pop.project.myftl.test.bean.UserInfo;
  7. public class UserAction extends ActionSupport {
  8. private static final long serialVersionUID = 1L;
  9. private String username;
  10. private String password;
  11. private UserInfo userInfo;
  12. /**
  13. * 首页
  14. * @return
  15. */
  16. public String index() {
  17. return "index";
  18. }
  19. /**
  20. * 登录
  21. * @return
  22. */
  23. public String login()
  24. {
  25. userInfo = new UserInfo() ;
  26. userInfo.setAddr("shaanxi baoji") ;
  27. userInfo.setAge(25) ;
  28. userInfo.setSigninTime(new Date()) ;
  29. userInfo.setQq("77276575") ;
  30. List<String> books = new ArrayList<String>() ;
  31. books.add("Thinking in Java") ;
  32. books.add("禅意花园") ;
  33. books.add("敏捷编程") ;
  34. books.add("代码大全") ;
  35. userInfo.setBooks(books) ;
  36. return "profile" ;
  37. }
  38. // setters and getters
  39. public String getUsername() {
  40. return username;
  41. }
  42. public void setUsername(String username) {
  43. this.username = username;
  44. }
  45. public String getPassword() {
  46. return password;
  47. }
  48. public void setPassword(String password) {
  49. this.password = password;
  50. }
  51. public UserInfo getUserInfo() {
  52. return userInfo;
  53. }
  54. public void setUserInfo(UserInfo userInfo) {
  55. this.userInfo = userInfo;
  56. }
  57. }

UserInfo类是一个有几个属性的javabean,这里就不用列了。

自己跑一下例子慢慢来吧。

运行结果:

时间: 2024-11-03 12:56:37

freemarker技术入门例子(结合struts2)的相关文章

freemarker入门例子

freemarker入门例子,直接代码如下: FreeMarkerTest import java.io.BufferedWriter; import java.io.File; import java.io.FileWriter; import java.io.IOException; import java.io.Writer; import java.util.ArrayList; import java.util.HashMap; import java.util.List; impor

MINA经典入门例子----Time Server

原文地址 http://blog.sina.com.cn/s/blog_720bdf0501010b8r.html 貌似java的IO.NIO的入门例子都有相关的Time Server Demo.本例为MINA官方Demo翻译过来而已. MINA百科: Apache MINA(Multipurpose Infrastructure for Network Applications) 是 Apache 组织一个较新的项目,它为开发高性能和高可用性的网络应用程序提供了非常便利的框架.当前发行的 MI

对FreeMarker技术的思考

按照静态非静态来划分网页分为两种:静态网页和非静态网页,究其优缺点而言,静态网页在用户访问的时候响应快,但是由于里面的数据是写死的,所以致命的缺陷就是数据不能动态显示:非静态页面(如jsp)数据可以动态显示,可以这样理解,这样的页面就是显示数据的一个模板,但是由于在用户请求得到响应以前,服务器端需要将其解析为浏览器可识别的html语言,这个解析过程需要耗费时间(尤其页面数据量大的时候,耗费的时间会更多),所以致命的缺陷就是请求发出后响应的过程较慢.那么有没有一种方法或工具自动生成静态网页呢?答案

ETL技术入门之ETL初认识

ETL是什么 ETL是Extract Transform Load三个英文单词的缩写 中文意思就是抽取.转换.加载.说到ETL就必须提到数据仓库. 先说下背景知识: 信息是现代企业的重要资源,是企业运用科学管理.决策分析的基础.目前,大多数企业花费大量的资金和时间来构建联机事务处理OLTP的业务系统和办公自动化系统(例如电信行业的各种运营支撑系统.购物网站系统),用来记录事务处理的各种相关数据.据统计,数据量每2-3年时间就会成倍增长,这些数据蕴含着巨大的商业价值,而企业所关注的通常只占在总数据

cygwin+ndk+eclipse下JNI技术入门

1.JNI的编写步骤1)编写带有native 声明的java类.2)编译java文件成class类3)使用javah -jni com.ikags.project.XXXX 编译成.h文件4)使用C/C++编写代码5)编写makefile文件,将.h和.c(.cpp)文件编译成.dll(.so)文件6)将.dll(.so)文件提供给项目,用system.loadLibrary方法调用. 2.编写makefile文件make执行时,自动寻找Makefile(makefile)文件,然后执行编译工作

一个简单的iBatis入门例子

一个简单的iBatis入门例子,用ORACLE和Java测试 目录结构: 1.导入iBatis和oracle驱动. 2.创建类Person.java package com.ibeats;import java.util.Date; public class Person { private int id; private String firstName; private String lastName; private double weightInKilograms; private do

RAD 极速应用开发 Spring ROO 入门例子

官网                                      http://projects.spring.io/spring-roo/ Spring ROO in action        http://www.kuaipan.cn/file/id_65688015804336770.htm?source=1 Eclipse 集成 STS               http://spring.io/tools/sts/all 减少了大量的配置文件的繁琐工作,爽!但前提是对

FreeMarker技术总结(转载)

FreeMarker是一款模板引擎: 即一种基于模板和要改变的数据, 并用来生成输出文本(HTML网页.电子邮件.配置文件.源代码等)的通用工具. 它不是面向最终用户的,而是一个Java类库,是一款程序员可以嵌入他们所开发产品的组件. copy自http://demojava.iteye.com/blog/800204 以下内容全部是网上收集: FreeMarker的模板文件并不比HTML页面复杂多少,FreeMarker模板文件主要由如下4个部分组成: 1,文本:直接输出的部分 2,注释:<#

JPA入门例子(采用JPA的hibernate实现版本) 转

JPA入门例子(采用JPA的hibernate实现版本) jpahibernate数据库jdbcjava框架(1).JPA介绍: JPA全称为Java Persistence API ,Java持久化API是Sun公司在Java EE 5规范中提出的Java持久化接口.JPA吸取了目前Java持久化技术的优点,旨在规范.简化Java对象的持久化工作.使用JPA持久化对象,并不是依赖于某一个ORM框架. 为什么要使用JAP? 在说为什么要使用JPA之前,我们有必要了解为什么要使用ORM技术. OR