JAVAEE——宜立方商城10:使用freemarker實現網頁靜態化、ActiveMq同步生成靜態網頁、Sso單點登錄系統分析

来源:https://www.cnblogs.com/xieyupeng/archive/2018/08/01/9399066.html
-Advertisement-
Play Games

1. 學習計劃 1、使用freemarker實現網頁靜態化 2、ActiveMq同步生成靜態網頁 2. 網頁靜態化 可以使用Freemarker實現網頁靜態化。 2.1. 什麼是freemarker FreeMarker是一個用Java語言編寫的模板引擎,它基於模板來生成文本輸出。FreeMarke ...


1. 學習計劃

1、使用freemarker實現網頁靜態化

2、ActiveMq同步生成靜態網頁

 

2. 網頁靜態化

可以使用Freemarker實現網頁靜態化。

 

2.1. 什麼是freemarker

FreeMarker是一個用Java語言編寫的模板引擎,它基於模板來生成文本輸出。FreeMarkerWeb容器無關,即在Web運行時,它並不知道ServletHTTP。它不僅可以用作表現層的實現技術,而且還可以用於生成XMLJSPJava 等。

 

目前企業中:主要用Freemarker做靜態頁面或是頁面展示

 

2.2. Freemarker的使用方法

freemarkerjar包添加到工程中。

Maven工程添加依賴

<dependency>

    <groupId>org.freemarker</groupId>

    <artifactId>freemarker</artifactId>

    <version>2.3.23</version>

</dependency>

 

原理:

 

 

使用步驟:

第一步:創建一個Configuration對象,直接new一個對象。構造方法的參數就是freemarker對於的版本號。

第二步:設置模板文件所在的路徑。

第三步:設置模板文件使用的字元集。一般就是utf-8.

第四步:載入一個模板,創建一個模板對象。

第五步:創建一個模板使用的數據集,可以是pojo也可以是map。一般是Map

第六步:創建一個Writer對象,一般創建一FileWriter對象,指定生成的文件名。

第七步:調用模板對象的process方法輸出文件。

第八步:關閉流。

 

模板:

${hello}

@Test
    public void genFile() throws Exception {
        // 第一步:創建一個Configuration對象,直接new一個對象。構造方法的參數就是freemarker對於的版本號。
        Configuration configuration = new Configuration(Configuration.getVersion());
        // 第二步:設置模板文件所在的路徑。
        configuration.setDirectoryForTemplateLoading(new File("D:/workspaces-itcast/term197/e3-item-web/src/main/webapp/WEB-INF/ftl"));
        // 第三步:設置模板文件使用的字元集。一般就是utf-8.
        configuration.setDefaultEncoding("utf-8");
        // 第四步:載入一個模板,創建一個模板對象。
        Template template = configuration.getTemplate("hello.ftl");
        // 第五步:創建一個模板使用的數據集,可以是pojo也可以是map。一般是Map。
        Map dataModel = new HashMap<>();
        //向數據集中添加數據
        dataModel.put("hello", "this is my first freemarker test.");
        // 第六步:創建一個Writer對象,一般創建一FileWriter對象,指定生成的文件名。
        Writer out = new FileWriter(new File("D:/temp/term197/out/hello.html"));
        // 第七步:調用模板對象的process方法輸出文件。
        template.process(dataModel, out);
        // 第八步:關閉流。
        out.close();
    }

 


2.3. 模板的語法
 

2.3.1. 訪問map中的key

${key}

 

2.3.2. 訪問pojo中的屬性

Student對象。學號、姓名、年齡

 

${key.property}

 

 

 

2.3.3. 取集合中的數據

<#list studentList as student>

${student.id}/${studnet.name}

</#list>

 

 

 

2.3.4. 取迴圈中的下標

<#list studentList as student>

${student_index}

</#list>

 

 

2.3.5. 判斷

<#if student_index % 2 == 0>

<#else>

</#if>

 

 

 

2.3.6. 日期類型格式化

 

 

2.3.7. Null值的處理

 

 

2.3.8. Include標簽

<#include “模板名稱”>

 

 

 

2.4. Freemarker整合spring

引入jar包:

Freemarkerjar

 

 

 

2.4.1. 創建整合spring的配置文件

 

<?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:p="http://www.springframework.org/schema/p"
    xmlns:context="http://www.springframework.org/schema/context"
    xmlns:dubbo="http://code.alibabatech.com/schema/dubbo" 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/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.2.xsd
        http://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd
        http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">

    <bean id="freemarkerConfig"
        class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer">
        <property name="templateLoaderPath" value="/WEB-INF/ftl/" />
        <property name="defaultEncoding" value="UTF-8" />
    </bean>


</beans>

 

 


需要編寫一
Controller進行測試 

 

2.4.2. Controller

請求的url/genhtml

參數:無

返回值:ok String, 需要使用@ResponseBody

業務邏輯:

1、spring容器中獲得FreeMarkerConfigurer對象。

2、FreeMarkerConfigurer對象中獲得Configuration對象。

3、使用Configuration對象獲得Template對象。

4、創建數據集

5、創建輸出文件的Writer對象。

6、調用模板對象的process方法,生成文件。

7、關閉流。

 

載入配置文件:

 

@Controller
public class HtmlGenController {
    
    @Autowired
    private FreeMarkerConfigurer freeMarkerConfigurer;

    @RequestMapping("/genhtml")
    @ResponseBody
    public String genHtml()throws Exception {
        // 1、從spring容器中獲得FreeMarkerConfigurer對象。
        // 2、從FreeMarkerConfigurer對象中獲得Configuration對象。
        Configuration configuration = freeMarkerConfigurer.getConfiguration();
        // 3、使用Configuration對象獲得Template對象。
        Template template = configuration.getTemplate("hello.ftl");
        // 4、創建數據集
        Map dataModel = new HashMap<>();
        dataModel.put("hello", "1000");
        // 5、創建輸出文件的Writer對象。
        Writer out = new FileWriter(new File("D:/temp/term197/out/spring-freemarker.html"));
        // 6、調用模板對象的process方法,生成文件。
        template.process(dataModel, out);
        // 7、關閉流。
        out.close();
        return "OK";
    }
}

 

2.5. 商品詳情頁面靜態化 

2.5.1. 網頁的靜態化方案

輸出文件的名稱:商品id+.html

輸出文件的路徑:工程外部的任意目錄。

網頁訪問:使用nginx訪問網頁。在此方案下tomcat只有一個作用就是生成靜態頁面。

工程部署:可以把e3-item-web部署到多個伺服器上。

生成靜態頁面的時機:商品添加後,生成靜態頁面。可以使用Activemq,訂閱topic(商品添加)

 

 

3. Sso系統分析

3.1. 什麼是sso系統

SSO英文全稱Single Sign On,單點登錄。SSO是在多個應用系統中,用戶只需要登錄一次就可以訪問所有相互信任的應用系統。它包括可以將這次主要的登錄映射到其他應用中用於同一個用戶的登錄的機制。它是目前比較流行的企業業務整合的解決方案之一。

 

3.2. 為什麼要有單點登錄系統

3.2.1. 傳統的登錄實現方式

 

 

 

此方式在只有一個web工程時是沒有問題。

3.2.2. 集群環境下

 

 

集群環境下會出現要求用戶多次登錄的情況。

解決方案:

1、配置tomcat集群。配置tomcatSession複製。節點數不要超過5個。

2、可以使用Session伺服器,保存Session信息,使每個節點是無狀態。需要模擬Session

 

單點登錄系統是使用redis模擬Session,實現Session的統一管理。

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 看鬥魚有些時間了,也寫了不少輔助的js,但是昨天不小心把硬碟分區表搞沒了,自己寫了好久的代碼不見了,DiskGenius 也沒恢覆成功,所以要重寫一次,大家要引以為鑒,常備份代碼,github是個不錯的選擇。 先通過一個簡單的程式, 來認識下 Chrome 擴展,通過最簡單的2個文件,就能組成一個C ...
  • 空杯心態,從零開始。 應用運維->實操最重要。 每個業務至少有一種解決方案;每個方案至少會一個軟體實現。 系統架構師實際是軟體架構師。 系統運維架構師。 架構師主要是架構思想,不是某一個軟體個體。 製造子彈->系統開發級別。 組裝坦克飛機->鳳毛麟角。 Linux系統架構師->一期 軟體架構師->二 ...
  • RockBrain USB Server- 雲計算虛擬化USB設備集中管理、遠程共用解決方案(涉及銀企直聯) 技術需求: 1.企業員工的大量USB Key,需要將key接入USB Server虛擬池,進行集中管理。 2.設置USB Key最高管理員,本管理員許可權:在Server端可以對Key的埠進 ...
  • Date類: 類 Date 表示特定的瞬間,精確到毫秒。 毫秒概念:1000毫秒=1秒 毫秒的0點: System.currentTimeMillis() 返回值long類型參數 用於獲取當前日期的毫秒值 時間的原點:公元1970年 一月一日,午夜0:00:00 對應的毫秒值就是0 註意:時間和日期 ...
  • 簡單工廠模式是一個工廠類根據工廠方法的參數創建不出不同的產品, 工廠方法模式是每一個產品都有一個一一對應的工廠負責創建該產品。那麼今天要講的抽象工廠模式是一個工廠能夠產生關聯的一系列產品。抽象工廠模式相對於簡單工廠和工廠方法模式來著更具抽象性。 一、抽象工廠模式演繹 我們先來看一個簡單的需求: 甲方 ...
  • 前言 最近懶成一坨屎,學不動系列一波接一波,大多還都是底層原理相關的。上周末抽時間重讀了周志明大濕的 JVM 高效併發部分,每讀一遍都有不同的感悟。路漫漫,藉此,把前段時間搞著玩的秒殺案例中的分散式鎖深入瞭解一下。 案例介紹 在嘗試瞭解分散式鎖之前,大家可以想象一下,什麼場景下會使用分散式鎖? 單機 ...
  • 因為網上對於IDApython的介紹太少,所以在這裡列舉了一些常用函數: ScreenEA() 獲取 IDA 調試視窗中,游標指向代碼的地址。通過這個函數,我們就能夠從一個已知 的點運行我們的腳本。 GetInputFileMD5() 返回 IDA 載入的二進位文件的 MD5 值,通過這個值能夠判斷 ...
  • ...
一周排行
    -Advertisement-
    Play Games
  • 示例項目結構 在 Visual Studio 中創建一個 WinForms 應用程式後,項目結構如下所示: MyWinFormsApp/ │ ├───Properties/ │ └───Settings.settings │ ├───bin/ │ ├───Debug/ │ └───Release/ ...
  • [STAThread] 特性用於需要與 COM 組件交互的應用程式,尤其是依賴單線程模型(如 Windows Forms 應用程式)的組件。在 STA 模式下,線程擁有自己的消息迴圈,這對於處理用戶界面和某些 COM 組件是必要的。 [STAThread] static void Main(stri ...
  • 在WinForm中使用全局異常捕獲處理 在WinForm應用程式中,全局異常捕獲是確保程式穩定性的關鍵。通過在Program類的Main方法中設置全局異常處理,可以有效地捕獲並處理未預見的異常,從而避免程式崩潰。 註冊全局異常事件 [STAThread] static void Main() { / ...
  • 前言 給大家推薦一款開源的 Winform 控制項庫,可以幫助我們開發更加美觀、漂亮的 WinForm 界面。 項目介紹 SunnyUI.NET 是一個基於 .NET Framework 4.0+、.NET 6、.NET 7 和 .NET 8 的 WinForm 開源控制項庫,同時也提供了工具類庫、擴展 ...
  • 說明 該文章是屬於OverallAuth2.0系列文章,每周更新一篇該系列文章(從0到1完成系統開發)。 該系統文章,我會儘量說的非常詳細,做到不管新手、老手都能看懂。 說明:OverallAuth2.0 是一個簡單、易懂、功能強大的許可權+可視化流程管理系統。 有興趣的朋友,請關註我吧(*^▽^*) ...
  • 一、下載安裝 1.下載git 必須先下載並安裝git,再TortoiseGit下載安裝 git安裝參考教程:https://blog.csdn.net/mukes/article/details/115693833 2.TortoiseGit下載與安裝 TortoiseGit,Git客戶端,32/6 ...
  • 前言 在項目開發過程中,理解數據結構和演算法如同掌握蓋房子的秘訣。演算法不僅能幫助我們編寫高效、優質的代碼,還能解決項目中遇到的各種難題。 給大家推薦一個支持C#的開源免費、新手友好的數據結構與演算法入門教程:Hello演算法。 項目介紹 《Hello Algo》是一本開源免費、新手友好的數據結構與演算法入門 ...
  • 1.生成單個Proto.bat內容 @rem Copyright 2016, Google Inc. @rem All rights reserved. @rem @rem Redistribution and use in source and binary forms, with or with ...
  • 一:背景 1. 講故事 前段時間有位朋友找到我,說他的窗體程式在客戶這邊出現了卡死,讓我幫忙看下怎麼回事?dump也生成了,既然有dump了那就上 windbg 分析吧。 二:WinDbg 分析 1. 為什麼會卡死 窗體程式的卡死,入口門檻很低,後續往下分析就不一定了,不管怎麼說先用 !clrsta ...
  • 前言 人工智慧時代,人臉識別技術已成為安全驗證、身份識別和用戶交互的關鍵工具。 給大家推薦一款.NET 開源提供了強大的人臉識別 API,工具不僅易於集成,還具備高效處理能力。 本文將介紹一款如何利用這些API,為我們的項目添加智能識別的亮點。 項目介紹 GitHub 上擁有 1.2k 星標的 C# ...