Freemarker模板引擎

模板引擎的实质就是将页面结构提前写好,然后将数据渲染到模板上生成一个静态页面,这样一来,下次就可以

直接访问静态文件,不用进行额外的获取数据的操作(例如:访问数据库),这样大大提升了网站的访问速度。

现在以一个demo为例来学习一下Freemarker,顺便提一下其中的一些细节。

1.新建maven支持的web项目

新建web项目,并为其添加Maven支持,个人建议选择MyEclipse Maven JEE Project,如果选择下面一条的话,

会多出4个名字较长的文件夹,而我们本身又不一定会用到。

2.pom.xml文件添加依赖包

        <dependency><groupId>org.springframework</groupId><artifactId>spring-context-support</artifactId><version>3.2.4.RELEASE</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-webmvc</artifactId><version>3.2.4.RELEASE</version></dependency><dependency><groupId>org.freemarker</groupId><artifactId>freemarker</artifactId><version>2.3.23</version></dependency>

这里添加了三个依赖包,spring-context-support、spring-webmvc、freemarker,记住缺一不可,缺一不可,而且,

所添加的两个spring-xxx依赖包的版本最好相同,否则运行的时候可能会出现servlet初始化错误,这是因为这两个包

相同版本之间存在依赖关系,切记!!!

3.web.xml配置

这个文件位于WebRoot--WEB-INF目录下

    <filter>   <filter-name>CharacterEncodingFilter</filter-name><filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class><init-param><param-name>encoding</param-name><param-value>utf-8</param-value></init-param></filter><filter-mapping><filter-name>CharacterEncodingFilter</filter-name><url-pattern>/</url-pattern></filter-mapping><servlet><servlet-name>TestFreemarker</servlet-name><servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class><init-param><param-name>contextConfigLocation</param-name><param-value>classpath:springmvc.xml</param-value></init-param><load-on-startup>1</load-on-startup></servlet><servlet-mapping><servlet-name>TestFreemarker</servlet-name><url-pattern>/</url-pattern></servlet-mapping>

第一个过滤器为了防止中文乱码而设置,第二个servlet是springmvc的。

红字表示名称自定义,不一定要和我写的一样。但是一定要和自己后面的文件名关联起来,不要在这里写A,在后面

写B,这个B自然不会指向A!!!

4.springmvc.xml配置

这里在项目的src目录下新建上面红字所指的springmvc.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.xsdhttp://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.1.xsdhttp://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.1.xsd"><!-- 配置包扫描器,扫描@Controller注解的类 --><context:component-scan base-package="eco" /><!-- 配置注解驱动 --><mvc:annotation-driven /><!-- 项目视图解析器 --><beanclass="org.springframework.web.servlet.view.InternalResourceViewResolver"><property name="prefix" value="/WEB-INF/jsp/" /><property name="suffix" value=".jsp" /></bean><!-- Freemarker配置 --><bean id="freemarkerConfig"class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer"><property name="templateLoaderPath" value="WEB-INF/template/" /><!-- 模板目录 --><property name="freemarkerSettings"><props><prop key="incompatible_improvements">2.3.23</prop><prop key="template_exception_handler">rethrow</prop><prop key="default_encoding">UTF-8</prop><prop key="locale">UTF-8</prop><!-- 本地化设置 --><prop key="url_escaping_charset">UTF-8</prop></props></property></bean>
</beans>

黄绿色字体和防止中文乱码有关,切勿缺失!

就像你所看到的红字那样,WEB-INF目录下有两个文件夹,一个template是用来放置模板的,后缀是.ftl;

还有一个文件夹是jsp,是模板生成的jsp文件放的地方。

网上很多都添加了一个freemarker视图解析器,说是用来访问html,经验证,可以无视这个视图解析器!!!

后面会讲到。

5.建立模板文件(xxx.ftl)

按照上面所示,在WEB-INF下的view目录下放一个模板文件(例如:01.ftl),内容如下:

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head><base href="<%=basePath%>"><title>My JSP 'index.jsp' starting page</title><meta http-equiv="pragma" content="no-cache"><meta http-equiv="cache-control" content="no-cache"><meta http-equiv="expires" content="0">    <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"><meta http-equiv="description" content="This is my page"><meta http-equiv="Content-Type" content="text/html; charset=utf-8"><!--<link rel="stylesheet" type="text/css" href="styles.css">--></head><body>This is my JSP page. <br>姓名: ${a.name}<br>年龄: ${a.age}<br>性别: ${a.sex}<br></body>
</html>

这就是一个freemarker模板(jsp页面)了,将在之后与数据相结合生成一个jsp文件,详情请往下看。

6.SpringMVC控制器

package eco;import java.io.FileOutputStream;
import java.io.OutputStreamWriter;
import java.util.HashMap;
import java.util.Map;import javax.annotation.Resource;import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer;import freemarker.template.Configuration;
import freemarker.template.Template;@Controller
public class Tcontrollor {@ResourceFreeMarkerConfigurer freeMarkerConfigurer;@RequestMapping("/{name}")public String Html(@PathVariable String name) {try {// 获取连接Configuration configuration = freeMarkerConfigurer.getConfiguration();// 获取数据Map<String, Student> stu = new HashMap<String, Student>();// 添加数据,这个就是自己创建的一个类stu.put("a", new Student("桔子桑", "18", ""));// 获取ftl,由于已经在配置文件中配置了路径所以在这里直接写模板名称就可以Template template = configuration.getTemplate("01.ftl");// 输出文件路径String dir = "D:/Tomcat 7.0/webapps/PRO/WEB-INF/jsp/" + name+ ".jsp";// Writer wr = new FileWriter(dir);OutputStreamWriter writer = new OutputStreamWriter(new FileOutputStream(dir), "UTF-8");// 写入
            template.process(stu, writer);// 关闭流
            writer.close();} catch (Exception e) {// TODO Auto-generated catch block
            e.printStackTrace();}return name;}
}

全是注释,相信不难看懂。

①红字dir是输出文件的路径名,后面根据此路径名创建输出流对象,注意的是地址要是部署到tomcat上的项目地址,

而不是你MyEclipse的workplace里面的项目地址,因为浏览器只会访问tomcat上的资源的;

②网上很多都是直接Writer wr = new FileWriter(dir),而FileWriter和FileReader是使用系统当前默认的编码方式,

并且都不支持通过参数指定编码方式,因此我们需要使用FileOutputStream来为这个输出流对象设定UTF-8编码,

以此来规避中文乱码的问题。

 

接下来就是检验最终成果的时候了:

浏览器输入:项目地址+66,SpringMVC的控制器结合模板和数据,到指定目录下生成jsp文件,并且最后根据视图

解析器访问刚刚生成的jsp文件。

7.访问html文件

接下来试试输出html文件,看看能不能访问,相关代码作以下更改:

String dir = "D:/Tomcat 7.0/webapps/PRO/WEB-INF/jsp/" + name+ ".html";<!-- 视图解析器 --><beanclass="org.springframework.web.servlet.view.InternalResourceViewResolver"><property name="prefix" value="/WEB-INF/jsp/" /><property name="suffix" value=".html" /><property name="contentType" value="text/html;charset=UTF-8" /></bean>

指定目录下生成html文件,并且视图解析器改为访问该目录下的对应html文件,来看看效果吧。

啊哦,出错了,原因就是,生成的WEB-INF目录下的html文件是静态文件,虽然控制器指示跳转到该页面,但是web.xml

文件中的DispatcherServlet对其进行了过滤,所以就会出现上面的情况404(not found),我们要做的的就是不让

DispatcherServlet对*.html格式的文件进行过滤,方法有三:https://www.cnblogs.com/shanheyongmu/p/5552034.html

个人建议第一种(方便),在DispatcherServlet前面加上如下代码:

    <servlet-mapping><servlet-name>default</servlet-name><url-pattern>*.html</url-pattern></servlet-mapping>

然后再来看看结果:

正如大家所愿,正常跳转到66.html,并在指定目录生成该文件。

 

至此,freemarker模板引擎的使用告一段落,至于模板的一些语法,日后再作探讨。睡觉~~~~·

 

转载于:https://www.cnblogs.com/eco-just/p/8542952.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/267472.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

postgresql主从备份_基于windows平台的postgresql主从数据库流备份配置

基于windows平台的postgresql主从数据库流备份配置因工作需要&#xff0c;需要搞pg数据库的主从备份&#xff0c;领导给了个方向使用流备份&#xff0c;于是开始朝着这个方向进发。鸣谢大佬A_ccelerator的博客一、配置主从库1.环境准备对于 pg 的主从库配置&#xff0c;建议是使…

msvcrt.lib和LIBCD.lib链接冲突

今天在移植一个开源代码到windows的VC6工程&#xff0c;编译时出现了这些奇怪的LINK错误。 msvcrt.lib(MSVCRT.dll) : error LNK2005: _toupper already defined in LIBCD.lib(toupper.obj)msvcrt.lib(MSVCRT.dll) : error LNK2005: _tolower already defined in LIBCD.lib(to…

10.static_extern

另一个文件声明 #include <iostream> using namespace std; int x 10;void show() {cout << "1234" << endl; } 本文件使用 1 #include <iostream>2 using namespace std;3 //引用外部全局变量4 extern int x;5 6 //只能在当前文件使用7 st…

jq获取最后一个子节点_如何选择jQuery中的最后一个子元素?

牧羊人nacy如果要选择最后一个子元素&#xff0c;并且需要具体说明元素类型&#xff0c;则可以使用选择器last-of-type这是一个例子&#xff1a;$("div p:last-of-type").css("border", "3px solid red");$("div span:last-of-type").…

基于智能的网络空间安全防御

在RSA2011中国大会上&#xff0c;赵粮博士发表了一个题为“Intelligence Based Cyber Defense”的演讲。 赵博士指出&#xff1a;传统的、围绕边界的城堡防御模式&#xff0c;已经越来越难以适应业务发展的需求&#xff0c;安全运维团队往往陷入到日常安全运营中&#xff0c;难…

面向对象 - 继承/组合 - 总结

面向对象 - 继承:1.继承: 类与类之间的关系 什么是什么的关系 eg:人是动物 狗是动物 功能: 解决代码重用问题, 创建新类的方式, 类: 可继承一个或多个父类: 父类 基类/超类 类 派生类/子类 类: 对象之间相似的特征 父类:…

mysql循环load data_TP5框架下MySQL通过LOAD DATA INFILE批量导入数据详细操作

LOAD DATA INFILE 语句用法 参考手册 本文语句参数使用默认值PHP: TP框架环境// 定义文件路径 $file_path LOAD_DATA_LOCAL_INFILE.txt; set_time_limit(1000); $fhandler fopen($file_path,w); if($fhandler false){ // 文件打开失败 } $id 7; $add_time time(); // 向文…

巧妙的有css合并图片解决tab切换的背景图片

巧妙的有css合并图片解决tab切换的背景图片 有时候做tab切换的时候 会碰到下面的这种情况 我截个图过来看看 tab切换 打开页面时候 茶庄介绍 及鼠标移上去时候 是上面这样的效果 当鼠标移下来的时候 是下面这样的 茶庄介绍 就变成这样的背景 一刚开始做这样的 我就想到用j…

XUPT_STA2018(部分题解)

A - 一方通行和最大公约数I CodeForces - 664A 作为学园都市最强的lv5&#xff0c;一方通行必须解决一道数学题才能接触last order身上植入的病毒&#xff0c;请你帮他解决这个问题。给出两个整数a,b 求出[a,b]区间中所有整数的最大公约数。输入输入包括一行&#xff0c;一…

java mongodb drivers 2升级到3_JAVA从头开始一基础梳理(3-2)

本章为大家介绍类的特性。首先&#xff0c;第一个特性----封装。在这个类别中&#xff0c;属性id 与属性 color 是可以被外部直接访问和修改的&#xff0c;比如可以看到&#xff0c;事实上这样的内容是错误的&#xff0c;我们需要在定义属性值时需要加入验证等等操作&#xff0…

C 语言第6节课

我上课C语言的第6节的笔记 &#xff1a;C语言真的需要多做多练多理解&#xff0c;不然真的学不懂.记不住呀。第一题&#xff1a;睇图片解题。main(){int x,y;scanf("%d",&x);if(x<0)printf("y%d",0);if(x>0&&x<5)printf("y%d&qu…

java ee 学习目标

通过上学期软件工程的项目设计开发&#xff0c;我决定将来走java这条路&#xff0c;所以&#xff0c;java ee是我必须要学好的。需要学会使用JSP/Servlet(结合Tomcat、MySQL)技术&#xff1b;学习数据库开发技术&#xff1b;学习EJB。争取将自己的java技术深入&#xff0c;加强…

activiti idea 请假流程_IDEA开发流程Activiti需要注意的一些坑

1、慎用IDEA2020最新版本IDEA2020最新版本迎来了重大升级&#xff0c;对java和spring有了更好更强大的开发支持&#xff0c;但是对于Activiti流程开发却不再支持&#xff0c;可能是因为actiBPM插件太老&#xff0c;或者IDEA2020对插件支持做了规范要求等等&#xff0c;请各位喜…

VIPCA无法运行

本文转自ITPUB上一兄弟总结&#xff0c;以备查询。 今天一早来&#xff0c;同事说他周末在安装 rac 出问题了&#xff0c;始终无法使用vipca 创建 vip资源 &#xff0c; 叫我帮忙看看。 他用的是 vmware server 2.0 搭建 虚拟 rac 。 一. 环境如下  OS: Red Hat Enterprise …

python加权最小二乘_【Python】统计科学之加权最小二乘法

首页专栏python文章详情0统计科学之加权最小二乘法张俊红发布于 今天 10:03今天这篇来讲讲加权最小二乘法(WLS)&#xff0c;加权最小二乘是在普通的最小二乘回归(OLS)的基础上进行改造的&#xff0c;主要是用来解决异方差问题的。OLS的常规形式如下&#xff1a;我们在前面讲过O…

关于Linux下的umask

我们创建文件的默认权限是怎么来的&#xff1f;如何改变这个默认权限呢&#xff1f; umask是什么&#xff1f; 当我们登录系统之后创建一个文件总是有一个默认权限的&#xff0c;那么这个权限是怎么来的呢&#xff1f;这就是umask干的事情。umask设置了用户创建文件的默认权限&…

TOJ5398: 签到大富翁(简单模拟) and TOJ 5395: 大于中值的边界元素(数组的应用)...

Python代码&#xff01;&#xff01;&#xff01; 5395 传送门&#xff1a;http://acm.tzc.edu.cn/acmhome/problemdetail.do?&methodshowdetail&id5395 5398传送门&#xff1a;http://acm.tzc.edu.cn/acmhome/problemdetail.do?&methodshowdetail&id5398 53…

删除电脑中的mysql数据库吗_【数据库】怎么彻底删除mysql服务?

彻底删除mysql服务的步骤&#xff1a;1、关闭mysql服务在cmd命令行输入以下命令net stop mysql或者 我的电脑右键->管理->服务&#xff0c;进入后手动关闭。2、删除MySQL服务在cmd中&#xff0c;输入sc delete mysql&#xff0c;删除服务。但是MYSQL服务只是显示禁用状态…

解决NGINX PHP No input file specified

解决NGINX PHP "No input file specified" 打开一个页面<?php phpinfo(); ?> 然后在游览器下运行&#xff1a;页面提示 No input file specified. FastCGI模式下访问php文件时&#xff0c;出现No input file specified.错误查看access.log 发现是 404 原因…

IE8开发人员工具资料

IE8相对以前的版本还是“改邪归正”了很多&#xff0c;居然提供一个很好用的开发人员工具&#xff0c;着实要夸一夸的&#xff0c;作为使用者我们还是要认真看看这东西怎么用&#xff0c;以便能为己用&#xff0c;网上资料很多再次整理一些。 IE8开发人员工具教程&#xff08;一…