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

闲话少述,看例子。

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

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

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

关键的几个文件:

1、index.ftl:

  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:

  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:

  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:

  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:

  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,这里就不用列了。

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

运行结果:

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

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

    原文地址 http://blog.sina.com.cn/s/blog_720bdf0501010b8r.html 貌似java的IO.NIO的入门例子都有相关的Time Server Demo.本例 ...

  2. 一个简单的iBatis入门例子

    一个简单的iBatis入门例子,用ORACLE和Java测试 目录结构: 1.导入iBatis和oracle驱动. 2.创建类Person.java package com.ibeats;import ...

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

    JPA入门例子(采用JPA的hibernate实现版本) jpahibernate数据库jdbcjava框架(1).JPA介绍: JPA全称为Java Persistence API ,Java持久化 ...

  4. Docker技术入门与实战 第二版-学习笔记-10-Docker Machine 项目-2-driver

    1>使用的driver 1〉generic 使用带有SSH的现有VM/主机创建机器. 如果你使用的是机器不直接支持的provider,或者希望导入现有主机以允许Docker Machine进行管 ...

  5. Docker技术入门与实战 第二版-学习笔记-8-网络功能network-3-容器访问控制和自定义网桥

    1)容器访问控制 容器的访问控制,主要通过 Linux 上的 iptables防火墙来进行管理和实现. iptables是 Linux 上默认的防火墙软件,在大部分发行版中都自带. 容器访问外部网络 ...

  6. freemarker基本入门教程

    copy自http://demojava.iteye.com/blog/800204 以下内容全部是网上收集: FreeMarker的模板文件并不比HTML页面复杂多少,FreeMarker模板文件主 ...

  7. 《SaltStack技术入门与实践》—— Grains

    Grains 本章节参考<SaltStack技术入门与实践>,感谢该书作者: 刘继伟.沈灿.赵舜东 前几章我们已经了解SaltStack各个组件以及通过一个案例去熟悉它的各种应用,从这章开 ...

  8. 《SaltStack技术入门与实践》—— Peer

    Peer 本章节参考<SaltStack技术入门与实践>,感谢该书作者: 刘继伟.沈灿.赵舜东 Peer组件是SaltStack中Minion向Master发布任务的一个组件,使用Peer ...

  9. 《SaltStack技术入门与实践》—— Renderer组件

    Renderer组件 本章节参考<SaltStack技术入门与实践>,感谢该书作者: 刘继伟.沈灿.赵舜东 前面我们已经提过使用Python语言编写state.sls文件.在SaltSta ...

随机推荐

  1. mpvue路由传参报错Cannot read property 'query' of undefined

    在mpvue编写的小程序项目中,页面跳转间我希望通过编程式导航传递些参数 传参页面代码: this.$router.push({path:'/pages/login/changePassword/ma ...

  2. Codeforces Round #619 (Div. 2) Ayoub's function

    Ayoub thinks that he is a very smart person, so he created a function f(s)f(s) , where ss is a binar ...

  3. Python中利用for表达式创建列表

    1.for表达式语法格式及用法 for表达式利用可迭代对象创建新的列表,for表达式也称为列表推导式,具体语法格式如下: [表达式 for 循环计数器 in 可迭代对象] 例: a = [ i + i ...

  4. 如何使用charles对Android Https进行抓包

      Charles.png charles是一款在Mac下常用的截取网络封包工具,对Android Http进行抓包,只要对手机设置代理即可,但对Android Https进行抓包还是破费一些功夫,网 ...

  5. video兼容ie,ckplayer网页播放器

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  6. SpringBoot 集成JUnit

    项目太大,不好直接测整个项目,一般都是切割成多个单元,单独测试,即单元测试. 直接在原项目上测试,会把项目改得乱七八糟的,一般是单独写测试代码. 进行单元测试,这就需要集成JUnit. (1)在pom ...

  7. 操作系统OS - 重装Windows7卡在completing installation

    1. shift + f10 2. cd oobe 3. Msoobe

  8. sqllab less-1

    1.访问sqllab 的less-1 按提示加入http://10.9.2.81/Less-1/?id=1 2. 后面加入单引号,发生报错http://10.9.2.81/Less-1/?id=1‘ ...

  9. 【转】python创建和删除文件

    #!/usr/bin/python #-*-coding:utf-8-*- #指定编码格式,python默认unicode编码 import os directory = "./dir&qu ...

  10. 8个问题全面了解5G关键技术Massive MIMO

    1 什么是Massive MIMO Massive MIMO(大规模天线技术,亦称为Large Scale MIMO)是第五代移动通信(5G)中提高系统容量和频谱利用率的关键技术.它最早由美国贝尔实验 ...