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

简介: 由于最近项目里面要求要使用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.   
  7.     <filter>  
  8.         <filter-name>struts2</filter-name>  
  9.         <filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>  
  10.     </filter>  
  11.     <filter-mapping>  
  12.         <filter-name>struts2</filter-name>  
  13.         <url-pattern>/*</url-pattern>  
  14.     </filter-mapping>  
  15.   
  16.     <servlet>  
  17.         <servlet-name>JspSupportServlet</servlet-name>  
  18.         <servlet-class>org.apache.struts2.views.JspSupportServlet</servlet-class>  
  19.         <load-on-startup>1</load-on-startup>  
  20.     </servlet>  
  21.   
  22.     <welcome-file-list>  
  23.         <welcome-file>index.jsp</welcome-file>  
  24.     </welcome-file-list>  
  25. </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.   
  3. import java.util.ArrayList;  
  4. import java.util.Date;  
  5. import java.util.List;  
  6.   
  7. import com.opensymphony.xwork2.ActionSupport;  
  8. import com.pop.project.myftl.test.bean.UserInfo;  
  9.   
  10. public class UserAction extends ActionSupport {  
  11.   
  12.     private static final long serialVersionUID = 1L;  
  13.     private String username;  
  14.     private String password;  
  15.     private UserInfo userInfo;  
  16.     /** 
  17.      * 首页 
  18.      * @return 
  19.      */  
  20.     public String index() {  
  21.         return "index";  
  22.     }  
  23.     /** 
  24.      * 登录 
  25.      * @return 
  26.      */  
  27.     public String login()  
  28.     {  
  29.         userInfo = new UserInfo() ;  
  30.         userInfo.setAddr("shaanxi baoji") ;  
  31.         userInfo.setAge(25) ;  
  32.         userInfo.setSigninTime(new Date()) ;  
  33.         userInfo.setQq("77276575") ;  
  34.         List<String> books = new ArrayList<String>() ;  
  35.         books.add("Thinking in Java") ;  
  36.         books.add("禅意花园") ;  
  37.         books.add("敏捷编程") ;  
  38.         books.add("代码大全") ;  
  39.         userInfo.setBooks(books) ;  
  40.         return "profile" ;  
  41.     }  
  42.     // setters and getters  
  43.     public String getUsername() {  
  44.         return username;  
  45.     }  
  46.     public void setUsername(String username) {  
  47.         this.username = username;  
  48.     }  
  49.     public String getPassword() {  
  50.         return password;  
  51.     }  
  52.     public void setPassword(String password) {  
  53.         this.password = password;  
  54.     }  
  55.     public UserInfo getUserInfo() {  
  56.         return userInfo;  
  57.     }  
  58.     public void setUserInfo(UserInfo userInfo) {  
  59.         this.userInfo = userInfo;  
  60.     }  
  61. }  

 

 

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

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

运行结果:

目录
相关文章
|
前端开发 Java
传统SpringMvc+JSP与SpringMvc+Freemarker的异同
也许都会有个这样的疑问,Freemarker确实可以做很多页面的事情,比如说一些页面逻辑,if else list,等等。可是实在是看不出他比jsp功能多出什么,或者说简化了什么。比如说页面显示逻辑,jsp的EL同样可以做到,而且感觉语法也差不多,也没有麻烦什么,再比如说$语法,el也有啊。真不明白它那里比jsp好了。还有如果用ftl模板文件,那么美工怎么去做?只有把生成的页面保存下来然后再设计css。分工是做到了,可是协调的问题有出现可以做很多页面的事情,比如说一些页面逻辑,if else list。
77 0
传统SpringMvc+JSP与SpringMvc+Freemarker的异同
|
前端开发
Freemarker - 基础篇(下)
Freemarker - 基础篇(下)
165 0
Freemarker - 基础篇(下)
|
前端开发 Java
Freemarker - 基础篇(上)
Freemarker - 基础篇(上)
311 0
Freemarker - 基础篇(上)
|
XML 设计模式 开发框架
两个入门案例带你入门SpringMVC 注解版&&XML版
概述 Spring MVC 是 Spring 提供的一个基于 MVC 设计模式的轻量级 Web 开发框架,本质上相当于 Servlet。 由于 Spring MVC 本身就是 Spring 框架的一部分,所有与 Spring 框架是无缝集成。是当今业界最主流的 Web 开发框架。
93 0
两个入门案例带你入门SpringMVC 注解版&&XML版
|
开发框架 前端开发 Java
FreeMarker简介
FreeMarker简介
137 0
|
XML 安全 Java
Struts2【入门】(四)
这是Strtus的开山篇,主要是引入struts框架…为什么要引入struts,引入struts的好处是什么,以及对Struts2一个简单的入门….
91 0
Struts2【入门】(四)
|
XML Java 数据格式
Struts2【入门】(三)
这是Strtus的开山篇,主要是引入struts框架…为什么要引入struts,引入struts的好处是什么,以及对Struts2一个简单的入门….
131 0
Struts2【入门】(三)
|
Java
Struts2【入门】(一)
这是Strtus的开山篇,主要是引入struts框架…为什么要引入struts,引入struts的好处是什么,以及对Struts2一个简单的入门….
111 0
|
XML Java 数据格式
Struts2【入门】(二)
这是Strtus的开山篇,主要是引入struts框架…为什么要引入struts,引入struts的好处是什么,以及对Struts2一个简单的入门….
165 0
Struts2【入门】(二)
|
XML Java 数据格式
struts2+spring+mybatis整合小案例
最近学习ssm框架,模仿别人做了一个小案例 当然途中也遇到了蛮多的问题.借此机会.记录一下自己的过程 struts2+spring+mybatis的整合过程 1.说明: 个人采用的是deepin操作系统(深度linux)+Intellij Idea(相对与myeclipse我还是更喜欢idea 可能因为更智能)+tomcat7. 当然在windows下没什么不同,具
4221 0