精华内容
下载资源
问答
  • HTML静态化

    2019-03-28 02:00:08
    NULL 博文链接:https://smesoft.iteye.com/blog/1233494
  • HTML静态化技术

    2019-09-27 22:28:25
    【优势:HTML静态化技术可以以增加访问速度,减轻服务器负担,更容易被搜索引擎找到。】 在五年前,有百分之八十的网站要求做成动态的。也就是从那个时候也就是ASP的发展高峰期。一些静态网页也要求做成动态网站。...

    【优势:HTML静态化技术可以以增加访问速度,减轻服务器负担,更容易被搜索引擎找到。】

    在五年前,有百分之八十的网站要求做成动态的。也就是从那个时候也就是ASP的发展高峰期。一些静态网页也要求做成动态网站。但是这两年来,网站要求做成静态的。也就是网页要求静态化。
    为什么会有这样的变化?到底意味着什么?
    目前网页HTML静态化是利用其它的动态技术生成HTML静态页面,还不是静态网站。因为的确是这样的,生成HTML静态网页好处多多。

    一、减轻服务器负担。

    二、有利于搜索引擎优化SEO,Baidu、Google都会优先收录静态页面,不仅被收录的快还收录的全;

    三、加快页面打开速度,静态页面无需连接数据库打开速度较动态页面有明显提高;

    四、HTML页面不会受程序相关漏洞的影响;

    观看一下大一点的网站基本全是静态页面,而且可以减少攻击,防sql注入。数据库出错时,不影响网站正常访问。

    最主要是可以增加访问速度,减轻服务器负担,当数据量有几万,几十万或是更多的时候你知道哪个更快了. 而且还容易被搜索引擎找到.
    生成html文章虽操作上麻烦些,程序上繁杂些,但为了更利于搜索,为了速度更快些,更安全,这些牺牲还是值得的。

    转载于:https://www.cnblogs.com/Jhon-xu/p/4300653.html

    展开全文
  • 对于将wordpress生成HTML静态化网站,很多人会使用cos-html-cache的插件实现。这个插件非常简洁小巧,直接在原网站上生成首页和文章页的html文件,不过,这个插件只支持文章静态化,不支持页面、标签和分类的静态化...

    对于将wordpress生成HTML静态化网站,很多人会使用cos-html-cache的插件实现。

    这个插件非常简洁小巧,直接在原网站上生成首页和文章页的html文件,不过,这个插件只支持文章静态化,不支持页面、标签和分类的静态化,之后也再没有过更新。

    但使用wordpress插件导出全静态化网站的方法,对于少量文章挺方便,文章数量太多的话,就会经常出错了。

    后来,有人在cos-html-cache插件的基础上又开发了一个插件,名叫Super Static Cache,发现其BUG较多,但Rewrite模式是可以正常使用的,在这个模式下,可以将首页、文章页、单页、分类页、Tag页都生成静态化文件,并保存在一个名为super-static-cache的目录下,直接复制这个目录即可得到一个静态化网站。

    因此,一个更简单的生成静态化网站的方法来了,先在网站安装Super Static Cache,之后运行一个抓取网站的工具,这类工具很多,例如wget、sitemaps生成器之类的,把整个网站抓一遍(wget还能多生成一份),即可在super-static-cache的目录获取到网站的静态化Html文件。

    wget在Windows、Linux、Mac都有,用wget下载网站的命令是:

    wget -m 网站地址

    640.webp_.jpg

    展开全文
  • 本文内容:介绍了freemarker 渲染HTML 页面的几种方式:通过模板生成Html字符串静态化数据渲染1引入依赖pom.xml<dependency> ...

    本文内容:介绍了freemarker 渲染HTML 页面的几种方式:

    • 通过模板生成Html

    • 字符串静态化

    • 数据渲染

    1

    引入依赖

    pom.xml

    <dependency>      <groupId>org.springframework.boot</groupId>      <artifactId>spring-boot-starter-freemarker</artifactId></dependency><dependency>      <groupId>org.springframework.boot</groupId>      <artifactId>spring-boot-starter-web</artifactId></dependency>
    

    2

    编写实体类

    user.java

    public class User {  private String userName;  private String userPassword;  private int age;  public static List<User> initList(){    List<User> users=new ArrayList<User>();    users.add(new User("张三", "890123", 18));    users.add(new User("李四", "901234", 23));    users.add(new User("王五", "012345", 14));    users.add(new User("赵六", "123456", 30));    users.add(new User("田七", "234567", 32));    return users;  }  public User() {    super();  }  public User(String userName, String userPassword, int age) {    super();    this.userName = userName;    this.userPassword = userPassword;    this.age = age;  }}
    

    3

    编写模板文件

    创建方式:新建Html页面,编写好后修改后缀为ftl 

    存放路径:src/main/resources/template/htmlList.ftl

    htmlList.ftl 

    <!DOCTYPE html><html><head><meta charset="UTF-8">
    <script type="text/javascript" src="static/js/jquery.min.js"></script>  <link href="static/bootstrap/css/bootstrap.min.css" rel="stylesheet">   <script src="static/bootstrap/js/bootstrap.min.js"></script>
    <title>Freemarker</title></head><body>简单遍历list:<#list userList as user>  用户名:${user.userName}  密  码:${user.userPassword}  年  龄: ${user.age}</#list> <#--Freemarker遍历list并应用list隐含变量item_index-->item_index使用:<#list userList as user>第${user_index+1}个用户  用户名:${user.userName}  密  码:${user.userPassword}  年  龄: ${user.age}</#list>
    <#--Freemarker遍历list并应用list隐含变量item_has_next-->item_has_next,size使用:<#list userList as user>  用户名:${user.userName}  密  码:${user.userPassword}  年  龄: ${user.age}  <#if !user_has_next>    共有${userList?size}最后一个用户是:${user.userName}</#if></#list>
    <#--Freemarker遍历list并按用户年龄升序排序-->按用户年龄升序排序:<#list userList?sort_by("age") as user>  用户名:${user.userName}  密  码:${user.userPassword}  年  龄: ${user.age}</#list>
    <#--Freemarker遍历list并按用户年龄降序排序-->按用户年龄降序排序:<#list userList?sort_by("age")?reverse as user>  用户名:${user.userName}  密  码:${user.userPassword}  年  龄: ${user.age} </#list>
    <#--Freemarker遍历list当用户年龄大于21岁时,停止输出-->list中应用break:<#list userList?sort_by("age")?reverse as user>  用户名:${user.userName}  密  码:${user.userPassword}  年  龄: ${user.age}  <#if (user.age>21) >    <#break>  </#if></#list>
    </body></html>
    

    4

    通过模板生成Html

    绝对路径获取模板

    @RequestMapping("absolutePath")  @ResponseBody  public String html() throws TemplateException, IOException {    // 第一步:创建一个Configuration对象,直接new一个对象。构造方法的参数就是freemarker对于的版本号。    Configuration configuration = new Configuration(Configuration.getVersion());    // 第二步:设置模板文件所在的路径。    configuration.setDirectoryForTemplateLoading(new File(        "D:\\E_softwareFiles\\Eclipse\\Springboot_newman\\freemarker\\src\\main\\resources\\template"));    // 第三步:设置模板文件使用的字符集。一般就是utf-8.    configuration.setDefaultEncoding("utf-8");    // 第四步:加载一个模板,创建一个模板对象。    Template template = configuration.getTemplate("htmlList.ftl");    // 第五步:创建一个模板使用的数据集,可以是pojo也可以是map。一般是Map。    Map dataModel = new HashMap<>();    // 向数据集中添加数据    List<User> users = User.initList();    dataModel.put("userList", users);    // 第六步:创建一个Writer对象,一般创建一FileWriter对象,指定生成的文件名。    Writer out = new FileWriter(new File(        "D:\\E_softwareFiles\\Eclipse\\Springboot_newman\\freemarker\\src\\main\\resources\\templates\\absolutePath.html"));    // 第七步:调用模板对象的process方法输出文件。    template.process(dataModel, out);    // 第八步:关闭流。    out.close();    return "Get";  }
    

    相对路径获取模板

    @RequestMapping("classPath")  @ResponseBody  public String testGenerateHtml() throws IOException, TemplateException, URISyntaxException {    // 创建配置类    Configuration configuration = new Configuration(Configuration.getVersion());    // 设置模板路径 toURI()防止路径出现空格    // /D:/E_softwareFiles/Eclipse/Springboot_newman/freemarker/target/classes/    String classpath = this.getClass().getResource("/").toURI().getPath();    System.out.println(classpath);    configuration.setDirectoryForTemplateLoading(new File(classpath + "/template/"));    // 设置字符集    configuration.setDefaultEncoding("utf-8");    // 加载模板    Template template = configuration.getTemplate("htmlList.ftl");    // 数据模型    Map dataModel = new HashMap<>();    List<User> users = User.initList();    dataModel.put("userList", users);    // 静态化    String content = FreeMarkerTemplateUtils.processTemplateIntoString(template, dataModel);    // 打印静态化内容    System.out.println(content);    InputStream inputStream = IOUtils.toInputStream(content);    // 定位到项目路径    // /D:/E_softwareFiles/Eclipse/Springboot_newman/freemarker    String path=System.getProperty("user.dir");    System.out.println(path);    // 输出文件    FileOutputStream fileOutputStream = new FileOutputStream(new File(path + "/src/main/resources/templates/classPath.html"));    int copy = IOUtils.copy(inputStream, fileOutputStream);    return "It's OK";  }
    

    这里两种方法的区别在于获取模板的方式:

    • 前者获取的是固定路径,一旦模板文件或项目位置发生变化就需要改动较多的地方;

    • 后者获取的是本项目下相应位置的模板文件,即使项目位置发生变化也无需改动代码。

    5

    字符串静态化

    HtmlStringStatic.java

    public class HtmlStringStatic {
      public static void main(String[] args) throws IOException, TemplateException {      // 创建配置类      Configuration configuration = new Configuration(Configuration.getVersion());      // 测试模板内容      String templateString="" +              "<html>\n" +              " <head></head>\n" +              " <body>\n" +              " 名称:${name}\n" +              " </body>\n" +              "</html>";      // 模板加载器      StringTemplateLoader stringTemplateLoader = new StringTemplateLoader();      stringTemplateLoader.putTemplate("template",templateString);      configuration.setTemplateLoader(stringTemplateLoader);      // 得到模板      Template template = configuration.getTemplate("template","utf-8");      // 数据模型      Map<String,Object> map = new HashMap<>();      map.put("name","使用模板字符串静态化");      // 静态化      String content = FreeMarkerTemplateUtils.processTemplateIntoString(template,map);      // 打印静态化内容      System.out.println(content);      InputStream inputStream = IOUtils.toInputStream(content);      // 定位到项目路径      String path=System.getProperty("user.dir");    System.out.println(path);    // 输出文件      FileOutputStream fileOutputStream = new FileOutputStream(new File(path + "/src/main/resources/templates/stringStatic.html"));      int copy = IOUtils.copy(inputStream, fileOutputStream);  }}
    

    6

    数据渲染

    HtmlRendering.java

    @Controllerpublic class HtmlRendering {  // localhost:8080/freemarker/htmlRendering  @RequestMapping("htmlRendering")  public String rendering(Model model) {    List<User> users = User.initList();    model.addAttribute("userList", users);    return "rendering";  }}
    

    在这里,rendering.ftl 是 htmlList.ftl 的复制,放在了

    src/main/resources/templates 目录下,也就是springboot存放Html 页面的位置。

    FreeMarkerProperties 中则配置了 Freemarker 的基本信息,例如模板位置在classpath:/templates/ ,模板后缀为 .ftl,这些配置我们都可以在 application.properties 中进行修改。

    @ConfigurationProperties(prefix = "spring.freemarker")public class FreeMarkerProperties extends AbstractTemplateViewResolverProperties {        public static final String DEFAULT_TEMPLATE_LOADER_PATH = "classpath:/templates/";        public static final String DEFAULT_PREFIX = "";        public static final String DEFAULT_SUFFIX = ".ftl";        /**         * Well-known FreeMarker keys which are passed to FreeMarker's Configuration.         */        private Map<String, String> settings = new HashMap<>();}
    

    7

    测试

    通过模板生成Html--绝对路径

    absolutePath.html

    通过模板生成Html--相对路径

    classPath.html

    字符串静态化

    stringStatic.html

    数据渲染

    浏览器访问 localhost:8080/freemarker/htmlRendering

    至此,本文结束。欢迎各位关注我的公众号:暗星涌动。

    展开全文
  • Z-Blog目前已经实现了首页和文章页的静态化,可以生成HTML文件,但是系统的分类页、标签Tags页、归档页和作者页都没有实现静态化,本文将讲述一个非常简单的方案,能够自动生成各个分类页、归档页和Tags的静态HTML...

    741d874bea1e903a8e6b71b6f455ff79.gif

    Z-Blog目前已经实现了首页和文章页的静态化,可以生成HTML文件,但是系统的分类页、标签Tags页、归档页和作者页都没有实现静态化,本文将讲述一个非常简单的方案,能够自动生成各个分类页、归档页和Tags的静态HTML页面,以便用户将网站迁移到Apache等不支持ASP的主机上。

    Z-Blog的分类页、标签Tags页、归档页和作者页都是调用catalog.asp这个文件,因此,修改这个文件,当用户调用该文件的时候,自动生成针对该页面的HTML文件。如果访客反复读取这个文件,那么在一定时间范围内,可以直接在文件开头使用静态文件,以达到节省系统资源的目的。

    具体的修改方法是,先在根下建立一个目录cat,然后使用编辑器打开Z-Blog根目录下的catalog.asp文件,在文件开头加入如下的代码:

    Dim objFSO

    Dim objFile

    Dim strFileName

    Dim strFileTime

    Dim isBuildFile

    if Request.QueryString("cate")<>"" then

    if Request.QueryString("page")<>""then

    strFileName = "cate" + "_" + Request.QueryString("cate") + "_" + Request.QueryString("page") +".html"

    else

    strFileName = "cate" + "_" + Request.QueryString("cate") + ".html"

    end if

    elseif Request.QueryString("tags")<>"" then

    if Request.QueryString("page")<>""then

    strFileName = "tags" + "_" + Request.QueryString("tags") + "_" + Request.QueryString("page") +".html"

    else

    strFileName = "tags" + "_" + Request.QueryString("tags") + ".html"

    end if

    elseif Request.QueryString("auth")<>"" then

    if Request.QueryString("page")<>""then

    strFileName = "auth" + "_" + Request.QueryString("auth") + "_" + Request.QueryString("page") +".html"

    else

    strFileName = "auth" + "_" + Request.QueryString("auth") + ".html"

    end if

    elseif Request.QueryString("date")<>"" then

    if Request.QueryString("page")<>""then

    strFileName = "date" + "_" + Request.QueryString("date") + "_" + Request.QueryString("page") +".html"

    else

    strFileName = "date" + "_" + Request.QueryString("date") + ".html"

    end if

    elseif Request.QueryString("page")<>"" then

    strFileName = "default" + "_" + Request.QueryString("page") +".html"

    else

    strFileName = "default_1" + ".html"

    end If

    isBuildFile = False

    Set objFSO = CreateObject("Scripting.FileSystemObject")

    If objFSO.FileExists(Server.MapPath(strFileName)) Then

    Set objFile = objFSO.GetFile(Server.MapPath(strFileName))

    strFileTime = objFile.DateLastModified

    Set objFile = Nothing

    If datediff("h",strFileTime,Now()) > 1 Then

    isBuildFile = True

    Else

    Server.Transfer strFileName

    Response.End

    End If

    Else

    isBuildFile = True

    End If

    Set objFSO = Nothing

    找到 Response.Write ArtList.html 一行,在其后面增加如下代码:

    If isBuildFile Then

    ArtList.FileName=strFileName

    ArtList.Directory="cat"

    ArtList.Save

    End if

    这样,系统就会自动生成全部动态页面的静态HTML文件,并且在1小时内不会重复生成,期间如果还有调用,则自动载入静态HTML文件,以节省系统资源。

    经过这番处理,Z-Blog的全部分类和Tags就都可以生成静态HTML页面了。

    经过静态化之后,就可以将Z-Blog全站都放在PHP+Apache的主机上了。具体方法是,配置Apache主机,使其用php的方法解析asp,然后编辑catalog.asp这个文件,将其代码修改为如下即可:

    if (isset($_GET['cate'])) {

    if (isset($_GET['page'])) {

    $strFileName = "cate_".strip_tags(stripslashes(trim($_GET['cate'])))."_".strip_tags(stripslashes(trim($_GET['page']))).".html";

    } else {

    $strFileName = "cate_".strip_tags(stripslashes(trim($_GET['cate']))).".html";

    }

    } else if (isset($_GET['tags'])) {

    if (isset($_GET['page'])) {

    $strFileName = "tags_".strip_tags(stripslashes(trim($_GET['tags'])))."_".strip_tags(stripslashes(trim($_GET['page']))).".html";

    } else {

    $strFileName = "tags_".strip_tags(stripslashes(trim($_GET['tags']))).".html";

    }

    } else if (isset($_GET['auth'])) {

    if (isset($_GET['page'])) {

    $strFileName = "auth_".strip_tags(stripslashes(trim($_GET['auth'])))."_".strip_tags(stripslashes(trim($_GET['page']))).".html";

    } else {

    $strFileName = "auth_".strip_tags(stripslashes(trim($_GET['auth']))).".html";

    }

    } else if (isset($_GET['date'])) {

    if (isset($_GET['page'])) {

    $strFileName = "date_".strip_tags(stripslashes(trim($_GET['date'])))."_".strip_tags(stripslashes(trim($_GET['page']))).".html";

    } else {

    $strFileName = "date_".strip_tags(stripslashes(trim($_GET['date']))).".html";

    }

    } else if (isset($_GET['page'])) {

    $strFileName = "default_".strip_tags(stripslashes(trim($_GET['page']))).".html";

    } else {

    $strFileName = "../default.html";

    }

    define("HTML_FILE",  dirname(__FILE__)."/".$strFileName);

    if (file_exists(HTML_FILE)) {

    echo(file_get_contents(HTML_FILE));

    exit(0);

    } else {

    exit(0);

    }

    如果不想用PHP来处理,也可以直接配置.htaccess文件来实现同样的功能,.htaccess文件的内容如下:

    RewriteRule ^(.*)/cat/\?cate=(.+)&page=(.+)$ $1/cat/cate_$2_$3\.html

    RewriteRule ^(.*)/cat/\?cate=(.+)$ $1/cat/cate_$2\.html

    RewriteRule ^(.*)/cat/\?tags=(.+)&page=(.+)$ $1/cat/tags_$2_$3\.html

    RewriteRule ^(.*)/cat/\?tags=(.+)$ $1/cat/tags_$2\.html

    RewriteRule ^(.*)/cat/\?auth=(.+)&page=(.+)$ $1/cat/auth_$2_$3\.html

    RewriteRule ^(.*)/cat/\?auth=(.+)$ $1/cat/auth_$2\.html

    RewriteRule ^(.*)/cat/\?date=(.+)&page=(.+)$ $1/cat/date_$2_$3\.html

    RewriteRule ^(.*)/cat/\?date=(.+)$ $1/cat/date_$2\.html

    RewriteRule ^(.*)/cat/\?page=(.+)$ $1/cat/default_$2\.html

    e1d0114400f0151b22587b52329c76c0.png

    展开全文
  • doku wiki html 静态化

    2017-01-12 01:25:46
    有什么生成静态html页面的办法吗?把doku wiki的内容全部生成一组静态页面,不是伪静态,是真实存在的html文件。
  • 网站静态化是网站优化的重要手段之一。主要效果是静态页面可以引起搜索引擎的重视,而搜索引擎对动态页面的重视远远比不了静态页面了
  • 网站系统大并发解决方案之HTML静态化(GO语言初级简单版包含源代码)
  • .NET C# CMS,可用于一般企业官网建设,可页面HTML静态化。仿织梦写的。MSSqlServer2008,VS2010,完整代码,可在此基础上增加其它功能,附数据库。配置web.config数据库连接字符串即可使用
  • 原理:将动态数据添加到静态页面,存储下来,如果动态数据无更新添加删除修改等操作的情况下,不触发生成静态页面。触发功能不再首页触发, 这样任何情况下首页调取的内容都是静态的,提高浏览速度 附件为单独程序...
  • php html 静态化 缓存

    2018-11-23 16:01:00
    <?... // // ob_start(); $cache_name = md5(__FILE__). '.html'; $cache_lifetime = 3600; // echo filectime(__FILE__)."<br>"; // echo filectime($cache_name)."<br>"; // echo file_ex...
  • HTML静态化与图片服务器分离的主要作用影响  其实大家都知道,效率最高、消耗最小的就是纯静态化的html页面,所以我们尽可能使我们的网站架构上的页面采用静态页面来实现,这个最简单的方法其实也是最有效的方法。...
  • 昨天咱们分享的【Java处理高并发高负载类网站关注点之 数据库】,已经收到很多同学的好评,今天我们继续分享Java处理高并发高负载网站的系统架构之HTML静态化 其实大家都知道,效率最高、消耗最小的就是纯静态化的...
  • 所以使用网站HTML静态化方案来优化访问速度当一个Servlet资源请求到达WEB服务器之后我们会填充指定的JSP页面来响应请求:HTTP请求---Web服务器---Servlet--业务逻辑处理--访问数据--填充JSP--响应请求HTML静态化之后:...
  • jsp转html静态化(二)继承HttpServletResponseWrapper 实现自己的response包装 HttpServletResponseWrapper为我们实现对response对象的后处理提供了帮助——你只需编写一个HttpServletRes...
  • 所以使用网站HTML静态化方案来优化访问速度当一个Servlet资源请求到达WEB服务器之后我们会填充指定的JSP页面来响应请求:HTTP请求---Web服务器---Servlet--业务逻辑处理--访问数据--填充JSP--响应请求HTML静态化之后:...
  • 生成HTML静态化无非就是模板标签替换,但有细节上有一个功能确需要高级一点的标签替换,也就是能接收设置的参数的标签替换。 日常的替换比如 {$siteTitle$} 也许在程序中就直接 替换成了 siteTitle 这个函数,然后...
  • 静态化有好有坏,最大的好处是收录迅速,坏处是纯静态的HTML页面难以维护,特别是对于大型的网站。本文将介绍如何将新云CMS网站管理系统静态化html本文以新云CMS 3.0为例。动画1.进入后台控制面板,找到“软件频道...
  • 很多时候我们不希望用户看到我们网站的真实地址,这时可以用rewrite包做url地址重写,让用户看到一些目录或者html地址,从而保护一些重要信息.具体使用方法请参考http://www.geelou.com/article/102.html
  • 静态化有好有坏,最大的好处是收录迅速,坏处是纯静态的HTML页面难以维护,特别是对于大型的网站。本文将介绍如何将新云CMS网站管理系统静态化。 本文以新云CMS 3.0为例。 1.进入后台控制面板,找到“软件频道...
  • 第一次做项目需要生成静态页面,静态网页的优势我就不多说了,生成方式很多模板等但是我们要讲的不是标签替换的方法。 不外乎有以下因素: 1、从页面加载时间来看:静态页面不需要与数据库建立连接,尤其是...
  • 1、freemaker模板静态化   /**  * 根据ftl模板生成html  *  * @param ftlPath  * 模板路径  * @param htmlPath  * 生成html路径  * @param freemarkerManager  */  public static void c
  • /**将根据url生成静态html * @author mojianpo * */ public class MakeHtml { private static long star = 0; private static long end = 0; private static long ttime = 0; private static final Logger ...
  •  * 功能:创建HTML静态页面   * 时间:2009年1011日   * 地点:home   * @author mavk   *   */  public class CreateStaticHTMLPage {   /**   * 生成静态HTML页面的方法   * @param request ...
  • 其实大家都知道,效率最高、消耗最小的就是纯静态化html页面,所以我们尽可能使我们的网站上的页面采用静态页面来实现,这个最简单的方法其实也是最有效的方法。看源代码其实也是最有用的,自己去下载吧。时间比较...
  • 网站架构:HTML静态化

    2009-09-21 10:26:00
    待研究。。。

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 8,240
精华内容 3,296
关键字:

html静态化