模板引擎:第三章:使用Freemark做企业级SEO推广

简介: 模板引擎:第三章:使用Freemark做企业级SEO推广

为什么做SEO?

当公司项目已接近尾声时,这个时候就需要推广了,这个时候就需要SEO了,那SEO是什么呢?seo中文翻译是搜索引擎优化。它利用搜索引擎的规则提高网站在有关搜索引擎内的自然排名。目的是让其在行业内占据领先地位,获得品牌收益。很大程度上是网站经营者的一种商业行为,将自己或自己公司的排名前移。


常见误区:


在速度方面,一般情况下,静态网页都要快于动态网页。但是很多时候,我们为了SEO将网站全部搞成静态化,有这个必要么?我们知道,现在网站做成纯静态的基本上不太可能,除了一些像维基百乎之类的网站,我们的网站都需要去修改,需要用户去参与互动,还有一大堆的原因让我们的网站都在动态的变化。结果我们就牺牲用户的友好体验来“博得搜索引擎的欢心”。但是你可知道搜索引擎并不是喜欢静态页。


搜索引擎并不是喜欢静态页的起源:


网页静态化这个东西,纯属以讹传讹的事。我们要说说这个事情的起源,在搜索引擎刚刚起步的时候,那个时间动态页面刚刚兴起,很多网页的地址后面都带有一大堆的参数,并且这些参数可能是动态变化的,他会根据用户的操作不同而有不同的参数。对于这样的地址,搜索引擎是不喜欢的,这是为什么呢?我们先看搜索引擎在做什么事,搜索引擎实际上是一个程序,学名叫Spider,放出去之后把某个网站下载进行分析,然后把摘要部分放到自己的数据库,下次用户搜索的时候,就直接搜索到它的数据库了。


搜索引擎的工作原理:


比如说Google要来索引我的网站,它首先会访问http://iove.net这个主域名,而实际上 http://iove.net是定位到http://iove.net/index.php这个页面的。这样spider首先下载index.php当前页的html内容,注意,spider只需要原生的html内容(当然包括文本),不包括iframe中的任何内容,也不包括js等脚本生成的任何内容,也不会包括图片、flash等多媒体的内容,仅仅是对html标签和标签中的内容进行索引。它当你的html是一段文本,然后进行分析,取得其中的文字内容和链接内容,再根据这个链接进行下一个索引。搜索引擎实际就是把文本进行分析,然后放到数据库。注意数据库!有些技术基础的人都知道,只要是数据库,就会有主键,而根据范式理论,数据库应该有一个唯一的主键,那么搜索引擎索引回去的数据,也应该有一个唯一的主键。这个主键是什么?就是我们的网址。


好了,理论说完,开搞

pom.xml引入freemark相关依赖:

        <dependency>
      <groupId>org.freemarker</groupId>
      <artifactId>freemarker</artifactId>
      <version>2.3.23</version>
    </dependency>

SpringMvc配置文件:

<!-- 注册freemarker配置类 -->
  <bean id="freeMarkerConfigurer" class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer">
    <!-- ftl模版文件路径  -->
    <property name="templateLoaderPath" value="classpath:freemarker/"></property>
    <!-- 页面编码 -->
    <property name="defaultEncoding" value="utf-8" />
    <property name="freemarkerSettings">
      <props>
        <!-- 模版缓存刷新时间,不写单位默认为秒 -->
        <prop key="template_update_delay">0</prop>
        <!-- 时区 和 时间格式化 -->
        <prop key="locale">zh_CN</prop>
        <prop key="datetime_format">yyyy-MM-dd</prop>
        <prop key="date_format">yyyy-MM-dd</prop>
        <!-- 数字使用.来分隔 -->
        <prop key="number_format">#.##</prop>
      </props>
    </property>
    <!--静态资源访问路径-->
    <property name="freemarkerVariables">
      <map>
        <entry key="resPath" value="${resources.server}"/>
      </map>
    </property>
  </bean>
  <!-- 注册freemarker视图解析器 -->
  <bean id="freeMarkerViewResolver"
      class="org.springframework.web.servlet.view.freemarker.FreeMarkerViewResolver">
    <!-- 视图解析顺序,排在其他视图解析器之后 数字越大优先级越低 -->
    <property name="order" value="0" />
    <!-- 开启模版缓存 -->
    <property name="cache" value="true" />
    <!-- 上面已经配了,这里就不用配啦 -->
    <property name="prefix" value="" />
    <!-- 配置文件后缀 -->
    <property name="suffix" value=".ftl" />
    <property name="contentType" value="text/html;charset=UTF-8" />
    <!-- 是否允许session属性覆盖模型数据,默认false -->
    <property name="allowSessionOverride" value="false" />
    <!-- 是否允许request属性覆盖模型数据,默认false -->
    <property name="allowRequestOverride" value="false" />
    <!-- 开启spring提供的宏帮助(macro) -->
    <property name="exposeSpringMacroHelpers" value="true" />
    <!-- 添加request attributes属性到ModelAndView中 -->
    <property name="exposeRequestAttributes" value="true" />
    <!-- 添加session attributes属性到ModelAndView中 -->
    <property name="exposeSessionAttributes" value="true" />
    <property name="viewClass"  value="org.springframework.web.servlet.view.freemarker.FreeMarkerView" />
    <property name="requestContextAttribute" value="request" />
  </bean>

application.properties配置文件:

#静态路径配置
resources.server=http://127.0.0.1:8081/tst_consumer_war_exploded/

一般而言,我们只需要将后端的数据响应给前端模板页面即可。

关于静态资源路径问题:在SpringMvc的配置中加上:

<mvc:resources mapping="/img/**" location="classpath:freemarker/img/"></mvc:resources>

而模板页面一般以.ftl结尾,页面内容类似:

至于生成静态模板页面,这里提供一个链接include 引用模板https://www.cnblogs.com/fangwu/p/8696443.html

提供一个生成静态html文件的方法:

    /**
     * 生成静态页面
     * @param data 模板数据  创建一个穆数据集,可以是pojo也可以是map,推荐使用map
     * @param ftlPath 模板路径 例如:E:\\Project\\CompanyProject\\standard\\tst-consumer\\src\\main\\resources\\freemarker\\aboutUs
     * @param ftlName 模板名称 例如:index.ftl
     * @param htmlPath 生成的静态文件路径 例如:E:\\Project\\CompanyProject\\standard\\tst-consumer\\src\\main\\resources\\freemarker\\staticHtml
     * @param htmlName 生成的静态名称 例如:aboutBaijian.html
     * @throws Exception
     */
    public static void toHtml(Map<String,Object> data,String ftlPath,String ftlName,String htmlPath,String htmlName) throws Exception{
        // 创建一个Configuration对象
        Configuration configuration = new Configuration(Configuration.getVersion());
        // 设置模板文件保存的目录
        configuration.setDirectoryForTemplateLoading(new File(ftlPath));
        // 设置文件的编码格式,一般是utf-8
        configuration.setDefaultEncoding("utf-8");
        configuration.setClassicCompatible(true);
        // 加载一个模板文件,创建一个模板对象
        Template template = configuration.getTemplate(ftlName);
        // 创建一个Writer对象,指定输出文件的路径以及文件名
        Writer out = new FileWriter(new File(htmlPath + "\\" + htmlName));
        // 生成静态页面
        template.process(data, out);
        // 关闭流
        out.close();
    }

注意:如果模板文件使用<#include "additional.ftl">包含另外的模板二个模板要在同一个目录中,如:


我在aboutUs目录下的index.ftl使用了include包含comment目录下的文件,生成的时候会报错,因为你所提供的模板目录只有一个,而你却引用了二个目录,模板找不到会报错。


freemark最常见的用法,这个提供链接:https://blog.csdn.net/qq_35376421/article/details/81095656


相关文章
|
存储 Java Linux
10分钟入门Flink--安装
本文介绍Flink的安装步骤,主要是Flink的独立部署模式,它不依赖其他平台。文中内容分为4块:前置准备、Flink本地模式搭建、Flink Standalone搭建、Flink Standalong HA搭建。
10分钟入门Flink--安装
|
缓存 前端开发 JavaScript
Spring Boot中如何处理静态资源
Spring Boot中如何处理静态资源
|
关系型数据库 MySQL 数据库
mysql的用户管理和权限控制
本文介绍了MySQL中用户管理的基本操作,包括创建用户、修改密码、删除用户、查询权限、授予权限和撤销权限的方法。
471 2
|
SQL 分布式计算 大数据
MaxCompute产品使用合集之如何解决数据集查询超时
MaxCompute作为一款全面的大数据处理平台,广泛应用于各类大数据分析、数据挖掘、BI及机器学习场景。掌握其核心功能、熟练操作流程、遵循最佳实践,可以帮助用户高效、安全地管理和利用海量数据。以下是一个关于MaxCompute产品使用的合集,涵盖了其核心功能、应用场景、操作流程以及最佳实践等内容。
|
Oracle 关系型数据库 Linux
如果oracle用户下的$ORACLE_HOME bin oracle文件的属主或权限出了问题,那么该如何修复呢?
如果oracle用户下的$ORACLE_HOME bin oracle文件的属主或权限出了问题,那么该如何修复呢?
640 1
|
测试技术
Jmeter配置HTTPS
小白笔记     1.在bin目录下找到jmeter.bat,双击开启jmeter图形化界面; 2.习惯性先修改字符集配置,鼠标右键点击测试计划-添加-后置处理器-Bean Shell PostProcessor单击打开,将prev.
5235 0
|
1天前
|
云安全 人工智能 自然语言处理
|
6天前
|
搜索推荐 编译器 Linux
一个可用于企业开发及通用跨平台的Makefile文件
一款适用于企业级开发的通用跨平台Makefile,支持C/C++混合编译、多目标输出(可执行文件、静态/动态库)、Release/Debug版本管理。配置简洁,仅需修改带`MF_CONFIGURE_`前缀的变量,支持脚本化配置与子Makefile管理,具备完善日志、错误提示和跨平台兼容性,附详细文档与示例,便于学习与集成。
316 116

热门文章

最新文章