java-使用 freemarker 替换 jstl EL 开发 springmvc web项目
2017-03-31 11:08
686 查看
java-使用 freemarker 替换 jstl EL 开发 springmvc web项目
freemarker 是一款模板引擎,不限于 web 中,但与 springmvc 结合可以替换 jstl 的功能,且更加灵活。
资源:
freemarker 官网:http://freemarker.org/
官网提供了中文的手册可以下载到本地看:
https://sourceforge.net/projects/freemarker/files/chinese-manual/
目标:
借助springmvc 中 controller 向页面传值的模式,利用 freemarker 对页面进行填充
借助 org.springframework.ui.Model 对象或 Map 对象将信息传到 springmvc 的页面中
需要:
1.freemarker 组件
2.springmvc 组件
1.创建项目名称为 “mavers-web” 的maven web项目,添加 maven 添加依赖:
2.配置 spring 和 freemarker(需要配置三个xml)
2.1 web.xml 配置
2.2 demoServlet-servlet.xml 配置
2.3 applicationContext.xml 配置
3.创建演示用的 controller , HelloController.java
4.创建 freemarker 模板
三个模板:
freemarker.ftl 主模板
freemarker-header.ftl 页头模板
freemarker-footer.ftl 页脚模板
4.1 freemarker.ftl 主模板,内容
4.2 freemarker-header.ftl 页头模板,内容
4.3 freemarker-footer.ftl 页脚模板,内容
5.请求测试,部署到 tomcat 后
访问:http://localhost:8080/mavens-web/hello/freemarker 查看效果
freemarker 是一款模板引擎,不限于 web 中,但与 springmvc 结合可以替换 jstl 的功能,且更加灵活。
资源:
freemarker 官网:http://freemarker.org/
官网提供了中文的手册可以下载到本地看:
https://sourceforge.net/projects/freemarker/files/chinese-manual/
目标:
借助springmvc 中 controller 向页面传值的模式,利用 freemarker 对页面进行填充
借助 org.springframework.ui.Model 对象或 Map 对象将信息传到 springmvc 的页面中
需要:
1.freemarker 组件
2.springmvc 组件
1.创建项目名称为 “mavers-web” 的maven web项目,添加 maven 添加依赖:
<properties> <!-- 文件拷贝时的编码 --> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> <!-- 编译时的编码 --> <maven.compiler.encoding>UTF-8</maven.compiler.encoding> <org.springframework.version>4.3.7.RELEASE</org.springframework.version> </properties> <dependencies> <!-- spring --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-web</artifactId> <version>${org.springframework.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>${org.springframework.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-websocket</artifactId> <version>${org.springframework.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-test</artifactId> <version>${org.springframework.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context-support</artifactId> <version>${org.springframework.version}</version> </dependency> <!-- jstl(jsp 标准标签库) --> <dependency> <groupId>jstl</groupId> <artifactId>jstl</artifactId> <version>1.2</version> </dependency> <!-- freemarker 模板引擎 --> <dependency> <groupId>org.freemarker</groupId> <artifactId>freemarker</artifactId> <version>2.3.26-incubating</version> </dependency> </dependencies>
2.配置 spring 和 freemarker(需要配置三个xml)
2.1 web.xml 配置
<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd" > <web-app> <display-name>Archetype Created Web Application</display-name> <listener> <!-- applicationContext.xml spring 配置文件加载器 --> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener> <context-param> <!-- Spring 上下文参数 --> <param-name>contextConfigLocation</param-name> <param-value>/WEB-INF/applicationContext.xml</param-value> </context-param> <!-- 配置DispatchcerServlet --> <servlet> <servlet-name>demoServlet</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>demoServlet</servlet-name> <!-- / 表示对于所有的请求的拦截,包括静态资源如html, js, jpg等 --> <url-pattern>/</url-pattern> </servlet-mapping> <welcome-file-list> <welcome-file>/index.html</welcome-file> </welcome-file-list> </web-app>
2.2 demoServlet-servlet.xml 配置
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xmlns:mvc="http://www.springframework.org/schema/mvc" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd"> <mvc:annotation-driven /> <!-- 不拦截静态资源 --> <mvc:resources location="/content/" mapping="/content/**"/> <!-- 配置自动扫描的包 --> <context:component-scan base-package="demo.mvc"></context:component-scan> </beans>
2.3 applicationContext.xml 配置
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd"> <!-- springmvc 视图解析器 ,如何把handler 方法返回值解析为实际的物理视图 --> <bean id="springmvcViewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <!-- 拼接物理视图的地址前缀 --> <property name="prefix" value="/views/"></property> <!-- 拼接物理视图的地址后缀 --> <property name="suffix" value=".jsp"></property> <!-- 页面编码 --> <property name="contentType" value="text/html; charset=UTF-8"></property> <!-- 视图解析器调用顺序 order 小的先调用 --> <property name="order" value="1"/> </bean> <!-- freemarker 视图解析器 --> <bean id="freeMarkerViewResolver" class="org.springframework.web.servlet.view.freemarker.FreeMarkerViewResolver"> <property name="viewClass" value="org.springframework.web.servlet.view.freemarker.FreeMarkerView"/> <property name="cache" value="false" /> <!-- 拼接物理视图的地址前缀 --> <property name="prefix" value="" /> <!-- 拼接物理视图的地址后缀 --> <property name="suffix" value=".ftl" /> <!-- 页面编码 --> <property name="contentType" value="text/html; charset=UTF-8"></property> <!-- 视图解析器调用顺序 order 小的先调用 --> <property name="order" value="0"/> </bean> <!-- Freemarker配置 --> <bean id="freemarkerConfig" class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer"> <!-- 模板加载路径 --> <property name="templateLoaderPath" value="/views/"/> <property name="freemarkerVariables"> <map> <entry key="xml_escape" value-ref="fmXmlEscape" /> </map> </property> <property name="defaultEncoding"> <value>utf-8</value> </property> <!-- 参数设定 --> <property name="freemarkerSettings"> <props> <prop key="template_update_delay">0</prop> <prop key="default_encoding">UTF-8</prop> <prop key="number_format">0.##########</prop> <prop key="datetime_format">yyyy-MM-dd HH:mm:ss</prop> <prop key="classic_compatible">true</prop> <prop key="template_exception_handler">ignore</prop> <!-- 模板更新时间秒数 --> <prop key="template_update_delay">3600</prop> </props> </property> </bean> <bean id="fmXmlEscape" class="freemarker.template.utility.XmlEscape"/> </beans>
3.创建演示用的 controller , HelloController.java
package demo.mvc.controllers; import java.util.ArrayList; import java.util.Date; import java.util.List; import java.util.Map; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import demo.models.hello.UserInfoModel; /** * */ @Controller @RequestMapping("/hello") public class HelloController { /** * 请求地址:项目名/hello/userinfo * @return */ @RequestMapping("freemarker") public String freemarker(org.springframework.ui.Model model,Map<String, Object> map){ //传递一个值 model.addAttribute("val_name","张三"); model.addAttribute("cur_time",new Date()); //传递单个对象 UserInfoModel info = new UserInfoModel("张三",99,"男"); model.addAttribute("info",info); List<UserInfoModel> list = new ArrayList<UserInfoModel>(); list.add(new UserInfoModel("李四",20,"男")); list.add(new UserInfoModel("王五",21,"女")); list.add(new UserInfoModel("赵六",22,"男")); //传递多个对象 map.put("user_list", list); return "hello/freemarker"; //servlet.xml 中定义的 前缀(prefix)+返回值+后缀(suffix)拼接的物理地址 } }
4.创建 freemarker 模板
三个模板:
freemarker.ftl 主模板
freemarker-header.ftl 页头模板
freemarker-footer.ftl 页脚模板
4.1 freemarker.ftl 主模板,内容
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <title>Insert title here</title> <script scr="/content/index.js"></script> <link href="/content/index.css"/> </head> <body> <h3>freemarker演示</h3> <h4>一、传递一个值</h4> <div>姓名:${val_name}</div> <div>当前时间:${cur_time?string("yyyy-MM-dd HH:mm:ss zzzz")}</div> <h4>二、传递一个对象</h4> <div>name:${info.name}</div> <div>age:${info.age}</div> <div>sex:${info.sex}</div> <div>当前时间:${info.date?string("yyyy-MM-dd HH:mm:ss zzzz")}</div> <h4>三、传递一个 list 对象</h4> <table border="1"> <tr> <td>name</td> <td>age</td> <td>sex</td> <td>date</td> </tr> <#list user_list as p> <tr> <td>${p.name}</td> <td>${p.age}</td> <td>${p.sex}</td> <td>${info.date?string("yyyy-MM-dd HH:mm:ss zzzz")}</td> </tr> </#list> </table> <h4>四、引用其它 ftl 文件:引用路径是以配置文件中(xxx.xml) templateLoaderPath 配置为基础目录开始的!</h4> <div> <div><#include "/hello/freemarker-header.ftl"></div> <div>这里是内容</div> <div><#include "/hello/freemarker-footer.ftl"></div> </div> </body> </html>
4.2 freemarker-header.ftl 页头模板,内容
<h5>页头文件</h5>
4.3 freemarker-footer.ftl 页脚模板,内容
<h5>页脚文件</h5>
5.请求测试,部署到 tomcat 后
访问:http://localhost:8080/mavens-web/hello/freemarker 查看效果
相关文章推荐
- 使用SpringMVC开发RestFul风格接口的java-web项目,tomcat部署并客户端访问
- java后台开发例子--使用Maven建立springmvc的web项目
- 3. 尚硅谷_佟刚_JavaWEB_使用 Eclipse 开发 JavaWEB 项目.wmv
- windows下关于使用eclipse开发web服务器后台项目完整配置(jsp+javabean+servlet)
- JAVAWEB开发之JSTL标签库的使用、 自定义EL函数、自定义标签(带属性的、带标签体的)
- 关于在java web开发中的EL中使用函数
- 使用Java进行FreeMarker的web模板开发
- 使用Spring Boot来加速Java web项目的开发
- 使用Spring Boot来加速Java web项目的开发
- java使用maven创建springmvc web项目
- 使用Spring Boot来加速Java web项目的开发
- javaweb项目中使用百度地图进行项目开发
- 实战突击:Java Web项目整合开发光盘使用
- Java Web开发——FreeMarker模板使用方法讲解
- JavaWeb开发之JSTL标签库的使用、 自定义EL函数、自定义标签(带属性的、带标签体的)
- IntelliJ IDEA使用Application Server开发普通Java Web项目
- 使用Java进行FreeMarker的web模板开发的基础教程
- 使用Spring Boot来加速Java web项目的开发
- 使用maven开发javaweb项目
- 使用Spring Boot来加速Java web项目的开发