日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Freemarker模板引擎

發布時間:2023/12/10 编程问答 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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

總結

以上是生活随笔為你收集整理的Freemarker模板引擎的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。