国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

慕課網_《Java模板引擎之Freemarker》學習總結

xumenger / 3126人閱讀

摘要:時間年月日星期日說明本文部分內容均來自慕課網。整體目錄結構如下項目文件用于數據持久化配置項目配置配置視圖解析器配置靜態資源映射配置配置配置自定義指令配置解析器配置,類似于項目啟動類新建,注冊配置類,并將其和當前關聯。

時間:2017年3月19日星期日
說明:本文部分內容均來自慕課網。@慕課網:http://www.imooc.com
教學示例源碼:無
個人學習源碼:https://github.com/zccodere/s...

第一章:快速入門 1-1 Java模版引擎freemarker簡介

本節要點

什么是Freemarker
數據模型+模版=輸出(HTML)
前端設計師和程序員的學習側重點

什么是Freemarker

Freemarker是一款模版引擎
Freemarker不是web框架
官網:http:// freemarker.org

Freemarker原理

前端設計師和程序員的學習側重點

MVC設計(Model、View、Controller)
前端設計師側重于View(模版設計)
程序員全面掌握MVC

如何開始?
一點心得

先劃一個范圍
再定一個目標
創建可行計劃
邊玩邊學
1-2 maven構建freemarker項目

本節要點

Maven構建Spring+Freemarker項目
配置文件介紹
運行小例:列表展示

Maven構建Spring+Freemarker項目

Eclipse+Maven使用簡介
Maven依賴Spring和Freemarker的jar包
Spring配置文件和Freemarker Servlet配置文件

配置文件介紹

Spring配置文件applicationContext.xml
Spring Freemarker Servlet配置文件spring-servlet.xml
1-3 maven構建freemarker項目代碼實戰

我學習時,使用springboot來進行項目搭建,同時,項目基于javaconfig進行配置。
整體目錄結構如下:

項目POM文件


  4.0.0
  com.zccoder
  myfreemarker
  0.0.1-SNAPSHOT
  
  
        org.springframework.boot
        spring-boot-starter-parent
        1.5.1.RELEASE
         
    

    
        UTF-8
        UTF-8
        1.8
    

    
        
            org.springframework.boot
            spring-boot-starter-web
        

        
            org.springframework.boot
            spring-boot-starter-test
            test
        

        
            org.springframework.boot
            spring-boot-starter-freemarker
        
        
        
        
        
            org.springframework.boot
            spring-boot-configuration-processor
            true
        
        
    com.alibaba
    fastjson
    1.2.28

    

    
        
            
                org.springframework.boot
                spring-boot-maven-plugin
            
        
    
  
  

配置Freemarker

package com.myimooc.myfreemarker.config;

import java.nio.charset.Charset;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Properties;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.MediaType;
import org.springframework.http.converter.HttpMessageConverter;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
import org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer;
import org.springframework.web.servlet.view.freemarker.FreeMarkerView;
import org.springframework.web.servlet.view.freemarker.FreeMarkerViewResolver;

import com.alibaba.fastjson.serializer.SerializerFeature;
import com.alibaba.fastjson.support.config.FastJsonConfig;
import com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter;
import com.myimooc.myfreemarker.web.controller.RoleDirectiveModel;

/**
 * Web項目SpringMvc配置
 * @author ZhangCheng
 * @date 2017-03-19
 * @version V1.0
 */
@Configuration
@EnableWebMvc
@ComponentScan("com.myimooc.myfreemarker")
public class SpringMvcConfig extends WebMvcConfigurerAdapter{
    
    /**
     * 配置視圖解析器
     * @return
     */
    @Bean
    public FreeMarkerViewResolver getFreeMarkerViewResolver(){
        FreeMarkerViewResolver freeMarkerViewResolver = new FreeMarkerViewResolver();
        
        freeMarkerViewResolver.setOrder(1);
        freeMarkerViewResolver.setSuffix(".html");
        freeMarkerViewResolver.setCache(false);
        freeMarkerViewResolver.setRequestContextAttribute("request");
        freeMarkerViewResolver.setContentType("text/html;charset=utf-8");
        freeMarkerViewResolver.setViewClass(FreeMarkerView.class);
        
        return freeMarkerViewResolver;
    }
    
    /**
     * 配置靜態資源映射
     */
    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry.addResourceHandler("/static/**").addResourceLocations("classpath:/static/");
    }
    /**
     * 配置FASTJSON
     * @return
     */
    @Bean
    public FastJsonHttpMessageConverter  fastJsonHttpMessageConverters() {
       FastJsonHttpMessageConverter fastConverter = new FastJsonHttpMessageConverter();
        
       FastJsonConfig fastJsonConfig = new FastJsonConfig();
       fastJsonConfig.setSerializerFeatures(SerializerFeature.QuoteFieldNames);
       fastJsonConfig.setCharset(Charset.forName("UTF-8"));
       fastJsonConfig.setDateFormat("yyyy-MM-dd HH:mm:ss");
       
       List supportedMediaTypes = new ArrayList();
       supportedMediaTypes.add(MediaType.APPLICATION_JSON_UTF8);
       
       fastConverter.setSupportedMediaTypes(supportedMediaTypes);
       fastConverter.setFastJsonConfig(fastJsonConfig);
       return fastConverter;
    }
    
    /**
     * 配置FreeMarker
     * @return
     */
    @Bean
    public FreeMarkerConfigurer getFreeMarkerConfigurer(){
        FreeMarkerConfigurer freeMarkerConfigurer = new FreeMarkerConfigurer();
        freeMarkerConfigurer.setDefaultEncoding("UTF-8");
        freeMarkerConfigurer.setTemplateLoaderPath("classpath:/templates/");
        
        Properties settings = new Properties();
        settings.setProperty("template_update_delay", "5");
        settings.setProperty("url_escaping_charset", "UTF-8");
        settings.setProperty("defaultEncoding", "UTF-8");
        settings.setProperty("whitespace_stripping", "true");
        settings.setProperty("boolean_format", "true,false");
        settings.setProperty("number_format", "0.##########");
        settings.setProperty("locale", "zh_CN");
        settings.setProperty("datetime_format", "yyyy-MM-dd HH:mm:ss");
        settings.setProperty("date_format", "yyyy-MM-dd");
        settings.setProperty("time_format", "HH:mm:ss");
        settings.setProperty("tag_syntax", "square_bracket");
        settings.setProperty("classic_compatible", "true");
        settings.setProperty("template_exception_handler", "ignore");
        settings.setProperty("auto_import", "/spring.ftl as spring, /common/spring.ftl as spring");
        freeMarkerConfigurer.setFreemarkerSettings(settings);
        
        // 配置自定義指令
        Map variables = new HashMap();
        variables.put("role", new RoleDirectiveModel());
        freeMarkerConfigurer.setFreemarkerVariables(variables);
        
        return freeMarkerConfigurer;
    }
    
    /**
     * 配置JSON解析器
     */
    @Override
    public void configureMessageConverters(List> converters) {
        super.configureMessageConverters(converters);
        converters.add(this.fastJsonHttpMessageConverters());
    }
}

配置Web,類似于web.xml

package com.myimooc.myfreemarker.config;

import java.util.EnumSet;

import javax.servlet.DispatcherType;
import javax.servlet.FilterRegistration;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.ServletRegistration;

import org.springframework.context.annotation.Configuration;
import org.springframework.web.WebApplicationInitializer;
import org.springframework.web.context.support.AnnotationConfigWebApplicationContext;
import org.springframework.web.filter.CharacterEncodingFilter;
import org.springframework.web.servlet.DispatcherServlet;

/**
 * Web項目啟動類
 * 
 * @author ZhangCheng
 * @date 2017-03-19
 * @version V1.0
 *
 */
@Configuration
public class WebConfig implements WebApplicationInitializer {

    @Override
    public void onStartup(ServletContext servletContext) throws ServletException {
        AnnotationConfigWebApplicationContext context = new AnnotationConfigWebApplicationContext();

        context.register(SpringMvcConfig.class);

        // 新建WebApplication,注冊配置類,并將其和當前servletContext關聯。
        context.setServletContext(servletContext);

        // 注冊SpringMVC的DispatcherServlet。
        ServletRegistration.Dynamic servlet = servletContext.addServlet("dispatcher", new DispatcherServlet(context));
        servlet.addMapping("/");
        servlet.setLoadOnStartup(1);

        // 注冊SpringMVC的字符過濾器
        FilterRegistration.Dynamic encodingFilter = servletContext.addFilter("encoding", new CharacterEncodingFilter());
        EnumSet dispatcherTypes = EnumSet.allOf(DispatcherType.class);
        dispatcherTypes.add(DispatcherType.REQUEST);
        dispatcherTypes.add(DispatcherType.FORWARD);
        encodingFilter.addMappingForUrlPatterns(dispatcherTypes, true, "*");
        encodingFilter.setInitParameter("encoding", "UTF-8");

    }

}

新建模版頁面

編寫控制器

啟動項目

1-4 小例子:列表demo展示

編寫控制器

編寫Freemarker





Insert title here


${username}

    [#list userList as item]
  • ${item.name}的生日是:${item.birthday?string("yyyy-MM-dd")}
  • [/#list]

效果如下:

1-5 補充:springboot集成freemarker

輸入網址:start.spring.io

第二章:基礎技能 2-1 freemarker取值章節簡介

本節要點

Java中常用的數據模型
取值(插值)指令
邏輯指令:if、switch
2-2 Java數據模型、freemarker取值

Java中常用的數據模型

基本類型數據(比如Integer)
封裝的對象類型(比如User對象)
集合類型:List、Map

取值指令

常用${var}語法進行取值
對null、不存在對象取值${var!}
取包裝對象的值,通過“點”語法:${User.name}
取值的時候進行計算、賦值
Date類型格式${date?string(‘yyyy-MM-dd’)}
如何轉義HTML內容:${var?html}
2-3 freemarker取java基本數據模型的值

控制器

頁面層

效果圖

2-4 boolean類型值的format

布爾值:${booleanVar?string("yes","no")}

2-5 date類型值的format

日期:${dateVar?string("yyyy-MM-dd")}

2-6 null或者不存在的變量取值

null:${nullVar!"我是默認值"}
missing:${ssssVar!"我是默認值"}

第三章:技能進階 3-1 變量的定義、賦值、運算

編寫代碼:

2. 賦值運算

  • 賦值&運算
  • [#assign a = 100 /] a = ${a}
    a+100=${a+100}

效果如下:

3-2 自定義對象User變量的取值

3-3 集合List的遍歷

語法:

[#list listName as item]
    ${item!}
[/#list]
3-4 集合Map的遍歷

語法:

[#list map?keys as key]
    ${key}:${map[key]!}
[/#list]
3-5 if語法

語法:

    
  • if else
  • [#assign var = 100/] [#if var == 99] var = 99
    [#else] var != 99
    [/#if]

    判斷某個對象或值是否存在

    [#if myList?exists]
    [/#if]
    或
    [#if myList??]
    [/#if]
    
    3-6 switch語法

    語法:

        
  • switch case break default
  • [#assign var3 = 10 /] [#switch var3] [#case 10] 10
    [#break] [#case 100] 100
    [#break] [#default] other [/#switch]
    第四章:高級技巧 4-1 自定義函數章節介紹

    本節要點

    字符串、集合操作
    自定義函數
    自定義指令
    

    補充表達式指令

    + :字符串連接,集合連接
    [index]:下標取值
    

    自定義函數

    自定義排序函數
    實現TemplateMethodModelEx接口
    

    自定義指令

    實現TemplateDirectiveModel接口
    
    4-2 string基本操作指令

    代碼:

    6. 字符操作

    • 字符串常用內建函數-連接
    • [#assign stra = "hello" /] [#assign strb = "world" /] ${stra + strb}
    • 字符串常用內建函數-截取
    • ${(stra + strb)?substring(5,8)}
    • 字符串常用內建函數-長度
    • ${(stra + strb)?length}
    • 字符串常用內建函數-大寫
    • ${(stra + strb)?upper_case}
    • 字符串常用內建函數-小寫
    • ${(stra + strb)?lower_case}
    • 字符串常用內建函數-index_of
    • ${(stra + strb)?index_of("w")}
    • 字符串常用內建函數-last_index_of
    • ${(stra + strb)?last_index_of("o")}
    • 字符串常用內建函數-replace
    • ${(stra + strb)?replace("o","xx")}

    效果圖:

    4-3 自定義函數

    步驟一:編寫自定義函數類

    步驟二:再返回的控制器里面,添加自定義函數類,并指定方法名

    步驟三:在頁面使用排序方法

    步驟四:驗證輸出

    4-4 list排序內建函數、常用指令

    使用內建函數進行排序,item_index為下標,默認為升序

        [#list mylistinfo?sort as item]
                ${item_index}:${item},
        [/#list]
    

    使用內建函數進行排序,降序

        [#list mylistinfo?sort?reverse as item]
            ${item_index}:${item},
        [/#list]
    

    其它常用內建函數

        
  • List長度
  • ${mylistinfo?size}
  • List下標取值
  • ${mylistinfo[3]}

    效果圖:

    4-5 自定義指令

    步驟一:編寫自定義指令類

    步驟二:注冊自定義指令類

    步驟三:頁面使用自定義指令

    步驟四:驗證輸出

    4-6 freemarker常用內建函數

    本節要點

    處理字符串內建函數
    處理數字的內建函數
    處理list的內建函數
    其他內建函數
    

    處理字符串內建函數

    substring、cap_first、ends_with、contains
    date、datetime、time
    starts_with、index_of、last_index_of、split、trim
    

    處理數字的內建函數

    string、x?string(“0.##”)
    round、floor、ceiling
    

    梳理List的內建函數

    first、last、seq_contains、seq_index_of
    size、reverse、sort、sort_by
    chunk
    

    其他內建函數

    is函數:is_string、is_number、is_method
    ()、has_content函數
    eval求值
    
    4-7 freemarker內建函數代碼講解

    代碼示例

    效果圖如下:

    4-8 macro、function指令

    本節要點

    宏macro、nested、return指令
    函數function、return指令
    課程總結
    

    macro、nested、return

    macro語法
    [@macro_name param /] 調用macro
    nested語法
    

    function、return

    function語法
    ${function_name(param)}調用
    

    macro、nested、return章節
    macro語法:

    [#macro macro_name param1 param2 param3 paramN]
    Trmplate_code ${param1}
        [#nested/]
    [/#macro]
    

    調用

    [@macro_name param1=”value1” param2=”value2”/]
    
    [@macro_name param1=”value1” param2=”value2”/]
        Nested_template
    [@macro_name/]
    

    Function語法:

    [#function function_name param1 param2]
        [#return param1 + param2]
    [/#function]
    

    調用

    ${doAdd(100,100)}
    

    代碼示例


    效果如下

    第五章:課程總結 5-1 課程總結

    文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

    轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/66856.html

    相關文章

    • 課網_《SpringBoot開發常用技術整合》學習總結

      摘要:時間年月日星期四說明本文部分內容均來自慕課網。哈希表實現命令,將哈希表中的域的值設為實現命令,返回哈希表中給定域的值實現命令,刪除哈希表中的一個或多個指定域,不存在的域將被忽略。實現命令,返回哈希表中,所有的域和值。 時間:2018年04月19日星期四說明:本文部分內容均來自慕課網。@慕課網:https://www.imooc.com教學源碼:https://github.com/zc...

      chengtao1633 評論0 收藏0
    • 課網_Java圖片驗證碼》學習總結

      時間:2017年07月09日星期日說明:本文部分內容均來自慕課網。@慕課網:http://www.imooc.com教學源碼:無學習源碼:https://github.com/zccodere/s... 第一章:概述 1-1 課程概述 主要內容 驗證碼歷史 課程內容 不同方案對比 設計與實現 總結 1-2 驗證碼歷史 驗證碼歷史 無驗證碼:垃圾騷擾 Luis von Ahn:Captcha 不斷...

      haitiancoder 評論0 收藏0
    • 課網_Java實現圖片等比例縮略圖》學習總結

      摘要:時間年月日星期六說明本文部分內容均來自慕課網。可以更加專注于業務邏輯開發,縮短項目開發周期,提高項目開發速度。 時間:2017年07月15日星期六說明:本文部分內容均來自慕課網。@慕課網:http://www.imooc.com教學源碼:無學習源碼:https://github.com/zccodere/s... 第一章:課程介紹 1-1 課程介紹 在用戶進行信息概略瀏覽的時候,提供縮...

      raledong 評論0 收藏0
    • 課網_Java實現圖片水印》學習總結

      摘要:時間年月日星期五說明本文部分內容均來自慕課網。慕課網教學源碼無學習源碼第一章課程簡介引言通過一個項目案例的講解,如何在應用中實現圖片水印的添加。 時間:2017年07月21日星期五說明:本文部分內容均來自慕課網。@慕課網:http://www.imooc.com教學源碼:無學習源碼:https://github.com/zccodere/s... 第一章:課程簡介 1-1 引言 通過一...

      levius 評論0 收藏0
    • 工具集核心教程 | 第六篇: Freemarker模板引擎入門到進階

      摘要:到目前為止,使用越來越廣泛,不光光只是它強大的生成技術,而且它能夠與進行很好的集成。注意使用數字范圍來定義集合時無需使用方括號數字范圍也支持反遞增的數字范圍如對象對象使用花括號包括中的對之間以英文冒號分隔,多組對之間以英文逗號分隔。 Freemarker的介紹 ??Freemarker 是一款模板引擎,是一種基于模版生成靜態文件的通用 工具,它是為程序員提供的一個開發包,或者說是一個類...

      趙連江 評論0 收藏0

    發表評論

    0條評論

    最新活動
    閱讀需要支付1元查看
    <