由于最近项目里面要求要使用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. cssdiv设置高宽百分比不起作用的问题

    div等元素设置宽高百分比都是基于包含他的块级对象的百分比高度,所以必须先设置包含它的块级对象高度与宽度,但是光设置body是不起作用的,必须同时设置html和body.   要使用百分比设置div宽 ...

  2. 吴裕雄 Bootstrap 前端框架开发——Bootstrap 网格系统实例:堆叠的水平

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

  3. IPSec的链路和设备备份

    链路备份的IPSec VPN和设备备份的IPSec VPN:首先实验的是链路备份的  IPSec VPN,下面是实验拓扑: IP地址配置:R1(Branch):Branch(config-if)#ip ...

  4. pip-9.0.1更新到pip-10.0.1遇到的问题

    使用 pip 安装第三方库时,报错: You are using pip version 9.0.3, however version 10.0.1 is available. You should ...

  5. Java 基础--移位运算符

    移位运算符就是在二进制的基础上对数字进行平移.按照平移的方向和填充数字的规则分为三种: <<(左移).>>(带符号右移)和>>>(无符号右移). 1.左移 按 ...

  6. 企业行业分类数据库JSON

    这篇文章主要介绍了 企业信息中选择行业类型,常用在企业注册,入驻填写企业信息等. JSON: [{"id":1001,"name":"IT服务&quo ...

  7. Tomcat认识

    Tomcat目录结构: bin:存放启动和关闭的一些脚本 common:共享(部署在该服务器上的一些)jar包 conf:存放服务器的一些配置文件 webapps:部署文件 work:服务器运行时,产 ...

  8. spring mvc注解之@RequestBody和@RequestParm

    @RequestBody http://localhost:8080/user/login { "username":"jack", "passwar ...

  9. ➡️➡️➡️leetcode 需要每天打卡,养成习惯

    目录 待完成的 完成的 0204 0203 以前 java 的 ! 的操作 不像 c 那样自由,!不要使用在int 变量上 c ^ 是异或操作 体会:c中,malloc 后的新建的数组,默认不是0(j ...

  10. 820算法复试 Eratasthene 质数筛选

    Eratasthene 学问之道无他,求其放心而巳矣 https://blog.csdn.net/qq_37653144/article/details/80470029 class Solution ...