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

    2019-09-10 20:38:54
    网页静态化的好处:减轻数据库的访问压力 网页静态化解决方案在实际开发中运用比较多,例如新闻网站,门户网站中的新闻频道或者是文章类的频道。 网页静态化技术和缓存技术的共同点都是为了减轻数据库的访问压力,...

    网页静态化的好处:减轻数据库的访问压力

    网页静态化解决方案在实际开发中运用比较多,例如新闻网站,门户网站中的新闻频道或者是文章类的频道。
    网页静态化技术和缓存技术的共同点都是为了减轻数据库的访问压力,但是具体的应用场景不同,缓存比较适合小规模的数据,而网页静态化比较适合大规模且相对变化不太频繁的数据。另外网页静态化还有利于SEO。

    另外我们如果将网页以纯静态化的形式展现,就可以使用Nginx这样的高性能的web服务器来部署。Nginx可以承载5万的并发,而Tomcat只有几百。

    将网页静态化用于博客网站

    blogDetail.ftl

    <%@ page language="java" contentType="text/html; charset=UTF-8"
    	pageEncoding="UTF-8"%>
    <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
    <%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%>
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>Python Django 模板层(AJAX)-javaxl-晓码阁-博客专栏</title>
    <link rel="stylesheet" href="./freemarkerDemo_files/bootstrap.min.css">
    <link rel="stylesheet"
    	href="./freemarkerDemo_files/bootstrap-theme.min.css">
    <link rel="stylesheet" href="./freemarkerDemo_files/blog.css">
    <script src="./freemarkerDemo_files/jquery-1.11.2.min.js.下载"></script>
    <script src="./freemarkerDemo_files/bootstrap.min.js.下载"></script>
    <style type="text/css">
    body {
    	padding-top: 10px;
    	padding-bottom: 40px;
    }
    </style>
    </head>
    <body>
    	<div class="container">
    		<script type="text/javascript">
    			function checkData() {
    				var q = document.getElementById("q").value.trim();
    				if (q == null || q == "") {
    					alert("请输入您要查询的关键字!");
    					return false;
    				} else {
    					return true;
    				}
    			}
    		</script>
    
    
    		<div class="row">
    			<div class="col-md-12" style="padding-top: 10px">
    				<nav class="navbar navbar-default navbar-fixed-top">
    				<div class="container-fluid">
    					<!-- Brand and toggle get grouped for better mobile display -->
    					<div class="navbar-header">
    						<button type="button" class="navbar-toggle collapsed"
    							data-toggle="collapse"
    							data-target="#bs-example-navbar-collapse-1" aria-expanded="false">
    							<span class="sr-only">展开</span> <span class="icon-bar"></span> <span
    								class="icon-bar"></span> <span class="icon-bar"></span>
    						</button>
    						<a class="navbar-brand" href="http://www.javaxl.com/index"><b
    							style="color: black"><strong>首页</strong></b></a>
    
    					</div>
    
    					<!-- Collect the nav links, forms, and other content for toggling -->
    					<div class="collapse navbar-collapse"
    						id="bs-example-navbar-collapse-1">
    						<ul class="nav navbar-nav">
    
    							<li><a href="http://122.114.92.43/p4/index" target="_blank"><b
    									color="black"><strong>美食</strong></b></a></li>
    							<li><a href="http://59.110.212.17/p5/index" target="_blank"><b
    									color="black"><strong>知识库</strong></b></a></li>
    							<li><a href="http://www.javaxl.com/abortMe" target="_blank"><b
    									color="black"><strong>关于本站</strong></b></a></li>
    
    						</ul>
    						<form action="http://www.javaxl.com/admin/blog/q"
    							class="navbar-form navbar-right" role="search" method="post"
    							onsubmit="return checkData()">
    							<div class="form-group">
    								<input type="text" id="q" name="q" value="" class="form-control"
    									placeholder="请输入要查询的关键字...">
    							</div>
    							<button type="submit" class="btn btn-default">搜索</button>
    						</form>
    					</div>
    					<!-- /.navbar-collapse -->
    				</div>
    				<!-- /.container-fluid --> </nav>
    			</div>
    		</div>
    
    
    		<div class="row" style="margin-top: 50px;">
    			<!--
                真正展示博客内容的地方,
                所有博客链接的列表->list.jsp
                单条博客详情->view.jsp
                呼和条件的博客详情列表->result.jsp
            -->
    			<div class="col-md-9">
    
    				<script type="text/javascript"
    					src="./freemarkerDemo_files/shCore.js.下载"></script>
    				<link rel="stylesheet"
    					href="./freemarkerDemo_files/shCoreDefault.css">
    				<script type="text/javascript">
    					/*本页面用于查看博客链接中的详细内容*/
    					SyntaxHighlighter.all();
    
    					function showOtherComment() {
    						$(".otherComment").show();
    					}
    
    					function loadimage() {
    						document.getElementById("randImage").src = "/static/system/jsp/common/image.jsp?"
    								+ Math.random();
    					}
    
    					function submitData() {
    						var content = $("#content").val();
    						var imageCode = $("#imageCode").val();
    						if (content == null || content == "") {
    							alert("请输入评论内容!");
    						} else if (imageCode == null || imageCode == "") {
    							alert("请填写验证码!");
    						} else {
    							$.post("/comment/save.do", {
    								"content" : content,
    								'imageCode' : imageCode,
    								'blog.bid' : '323'
    							}, function(result) {
    								if (result.success) {
    									window.location.reload();
    									alert("评论已提成成功,审核通过后显示!");
    								} else {
    									alert(result.errorInfo);
    								}
    							}, "json");
    						}
    					}
    				</script>
    
    
    
    
    
    				<div class="data_list">
    					<div class="data_list_title">
    						<img
    							src="./freemarkerDemo_files/blog_show_icon.png" />
    						博客信息
    					</div>
    					<div>
    						<div class="blog_title">
    							<h3>
    								<strong>${blog.title }</strong>
    							</h3>
    						</div>
    						<div class="blog_share">
    							<!-- <div class="bshare-custom"><a title="分享到QQ空间" class="bshare-qzone"></a><a title="分享到新浪微博" class="bshare-sinaminiblog"></a><a title="分享到人人网" class="bshare-renren"></a><a title="分享到腾讯微博" class="bshare-qqmb"></a><a title="分享到网易微博" class="bshare-neteasemb"></a><a title="更多平台" class="bshare-more bshare-more-icon more-style-addthis"></a><span class="BSHARE_COUNT bshare-share-count">0</span></div><script type="text/javascript" charset="utf-8" src="http://static.bshare.cn/b/buttonLite.js#style=-1&amp;uuid=&amp;pophcol=2&amp;lang=zh"></script><script type="text/javascript" charset="utf-8" src="http://static.bshare.cn/b/bshareC0.js"></script> -->
    						</div>
    						<div class="blog_info">发布时间:『${blog.releaseDate?datetime }』&nbsp;&nbsp;博客类别:${blog.btid }&nbsp;&nbsp;阅读(${blog.clickHit })
    						</div>
    						<div class="blog_content">${blog.content }</div>
    					</div>
    				</div>
    
    			</div>
    			<!-- 右侧布局 -->
    			<div class="col-md-3">
    				<div class="data_list">
    					<div class="data_list_title">博主信息</div>
    					<div class="user_image">
    
    						<img src="./freemarkerDemo_files/index_1.jpg">
    					</div>
    					<div class="nickName">javaxl_小李飞刀</div>
    					<div class="userSign">(知识改变命运,教育改变生活)</div>
    				</div>
    
    				<div class="data_list">
    					<div class="data_list_title">
    						<img src="./freemarkerDemo_files/byType_icon.png"> 按日志类别
    					</div>
    					<div class="datas">
    						<ul>
    
    							<li><span><a
    									href="http://www.javaxl.com/index.html?btid=9">java基础(71)</a></span></li>
    
    							<li><span><a
    									href="http://www.javaxl.com/index.html?btid=1">自定义mvc(8)</a></span></li>
    
    							<li><span><a
    									href="http://www.javaxl.com/index.html?btid=2">前端框架(39)</a></span></li>
    
    							<li><span><a
    									href="http://www.javaxl.com/index.html?btid=4">索引框架(7)</a></span></li>
    
    							<li><span><a
    									href="http://www.javaxl.com/index.html?btid=5">SSH(14)</a></span></li>
    
    							<li><span><a
    									href="http://www.javaxl.com/index.html?btid=6">SSM(9)</a></span></li>
    
    							<li><span><a
    									href="http://www.javaxl.com/index.html?btid=7">服务器部署(5)</a></span></li>
    
    							<li><span><a
    									href="http://www.javaxl.com/index.html?btid=8">项目异常归总(5)</a></span></li>
    
    							<li><span><a
    									href="http://www.javaxl.com/index.html?btid=10">安全框架(4)</a></span></li>
    
    							<li><span><a
    									href="http://www.javaxl.com/index.html?btid=11">SpringBoot(15)</a></span></li>
    
    							<li><span><a
    									href="http://www.javaxl.com/index.html?btid=12">程序人生(3)</a></span></li>
    
    							<li><span><a
    									href="http://www.javaxl.com/index.html?btid=13">其他框架(5)</a></span></li>
    
    							<li><span><a
    									href="http://www.javaxl.com/index.html?btid=14">开发工具(6)</a></span></li>
    
    							<li><span><a
    									href="http://www.javaxl.com/index.html?btid=15">解决方案(7)</a></span></li>
    
    							<li><span><a
    									href="http://www.javaxl.com/index.html?btid=16">23种设计模式(25)</a></span></li>
    
    							<li><span><a
    									href="http://www.javaxl.com/index.html?btid=17">SpringCloud(14)</a></span></li>
    
    							<li><span><a
    									href="http://www.javaxl.com/index.html?btid=18">第三方(4)</a></span></li>
    
    							<li><span><a
    									href="http://www.javaxl.com/index.html?btid=19">Python(67)</a></span></li>
    
    							<li><span><a
    									href="http://www.javaxl.com/index.html?btid=20">底层探究(1)</a></span></li>
    
    
    						</ul>
    					</div>
    				</div>
    
    
    
    				<div class="data_list">
    					<div class="data_list_title">
    						<img src="./freemarkerDemo_files/byDate_icon.png"> 按日志日期
    					</div>
    					<div class="datas">
    						<ul>
    
    							<li><span><a
    									href="http://www.javaxl.com/index.html?releaseDateStr=2019%E5%B9%B408%E6%9C%88">2019年08月(36)</a></span></li>
    
    							<li><span><a
    									href="http://www.javaxl.com/index.html?releaseDateStr=2019%E5%B9%B407%E6%9C%88">2019年07月(27)</a></span></li>
    
    							<li><span><a
    									href="http://www.javaxl.com/index.html?releaseDateStr=2019%E5%B9%B406%E6%9C%88">2019年06月(47)</a></span></li>
    
    							<li><span><a
    									href="http://www.javaxl.com/index.html?releaseDateStr=2019%E5%B9%B405%E6%9C%88">2019年05月(61)</a></span></li>
    
    							<li><span><a
    									href="http://www.javaxl.com/index.html?releaseDateStr=2019%E5%B9%B404%E6%9C%88">2019年04月(18)</a></span></li>
    
    							<li><span><a
    									href="http://www.javaxl.com/index.html?releaseDateStr=2019%E5%B9%B403%E6%9C%88">2019年03月(50)</a></span></li>
    
    							<li><span><a
    									href="http://www.javaxl.com/index.html?releaseDateStr=2019%E5%B9%B402%E6%9C%88">2019年02月(57)</a></span></li>
    
    							<li><span><a
    									href="http://www.javaxl.com/index.html?releaseDateStr=2019%E5%B9%B401%E6%9C%88">2019年01月(13)</a></span></li>
    
    
    						</ul>
    					</div>
    				</div>
    
    				<div class="data_list">
    					<div class="data_list_title">
    						<img src="./freemarkerDemo_files/link_icon.png"> 友情链接
    					</div>
    					<div class="datas">
    						<ul>
    
    							<li><span><a href="http://www.baidu.com/"
    									target="_blank">百度</a></span></li>
    
    							<li><span><a href="http://122.114.92.43/p4/index"
    									target="_blank">晓码阁-美食网</a></span></li>
    
    							<li><span><a href="http://59.110.212.17/p5/index"
    									target="_blank">晓码阁-知识库</a></span></li>
    
    
    
    						</ul>
    					</div>
    				</div>
    
    			</div>
    		</div>
    
    
    
    		<div class="row">
    			<div class="col-md-12">
    				<div align="center" style="padding: 20px">
    					<span style="float: left;">Powered by <a
    						href="http://www.javaxl.com/" target="_blank">博客首页</a> V1.0
    					</span> Copyright © 2018-2019 javaxl晓码阁 版权所有
    				</div>
    			</div>
    		</div>
    
    
    	</div>
    
    </body>
    </html>
    

    后台代码

    package com.javaxl.freemarker;
    import java.io.File;
    import java.io.FileWriter;
    import java.io.IOException;
    import java.io.Writer;
    import java.sql.Connection;
    import java.sql.PreparedStatement;
    import java.sql.ResultSet;
    import java.sql.SQLException;
    import java.util.HashMap;
    import java.util.Map;
    
    import com.javaxl.blog.util.DBAccess;
    
    import freemarker.template.Configuration;
    import freemarker.template.Template;
    import freemarker.template.TemplateException;
    
    public class Demo002 {
    	@SuppressWarnings("rawtypes")
    	public static void main(String[] args) throws IOException, TemplateException, SQLException {
    		// 1.创建配置类
    		Configuration configuration = new Configuration(Configuration.getVersion());
    		// 2.设置模板所在的目录
    		configuration.setDirectoryForTemplateLoading(
    				new File("C:\\Users\\tt\\Desktop\\新建文件夹\\hh\\javaxl_lunece_freemarker\\src\\main\\webapp\\freemarker"));
    		// 3.设置字符集
    		configuration.setDefaultEncoding("utf-8");
    		// 4.加载模板
    		Template template = configuration.getTemplate("blogDetail.ftl");
    		
    		
    		// 5.创建数据模型
    //		Map map = new HashMap();
    //		map.put("name", "小李飞刀 ");
    //		// 6.创建Writer对象
    //		Writer out = new FileWriter(new File("E:\\temp\\staticPage\\test.html"));
    //		// 7.输出
    //		template.process(map, out);
    		// 8.关闭Writer对象
    //		out.close();
    		createPage(template);
    		
    	}
    	
    	private static void createPage(Template template) throws SQLException, IOException, TemplateException {
    		Connection con = DBAccess.getConnection();
    		String sql = "select * from t_lucene_freemarker_blog";
    		PreparedStatement pst = con.prepareStatement(sql);
    		ResultSet rs = pst.executeQuery();
    		Map map = new HashMap<>();
    		Map<String, Object> blog = new HashMap<>();
    		while(rs.next()) {
    			blog.put("bid", rs.getObject("bid"));
    			blog.put("title", rs.getObject("title"));
    			blog.put("releaseDate", rs.getObject("releaseDate"));
    			blog.put("btid", rs.getObject("btid"));
    			blog.put("clickHit", rs.getObject("clickHit"));
    			blog.put("content", rs.getObject("content"));
    			
    			map.put("blog", blog);
    //			// 6.创建Writer对象
    			Writer out = new FileWriter(new File("C:\\Users\\tt\\Desktop\\新建文件夹\\hh\\javaxl_lunece_freemarker\\src\\main\\webapp\\freemarker\\"+blog.get("bid")+".html"));
    			// 7.输出
    			template.process(map, out);
    			// 8.关闭Writer对象
    			out.close();
    		}
    		DBAccess.close(con, pst, rs);
    	}
    }
    

    jsp界面

    <%@ page language="java" contentType="text/html; charset=UTF-8"
    	pageEncoding="UTF-8"%>
    <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>Insert title here</title>
    </head>
    <body>
    	<form
    		action="${pageContext.request.contextPath}/sy/freemarkerBlog_list.action"
    		method="post">
    		博客标题:<input type="text" name="title"> <input type="submit"
    			value="确定">
    	</form>
    	<button id="add">添加</button>
    	<button id="refresh">刷新全局索引</button>
    	<table border="1" width="100%" cellspacing="0">
    		<tr>
    			<td>编号</td>
    			<td>标题</td>
    			<td>内容</td>
    			<td>操作</td>
    		</tr>
    		<c:forEach items="${blogList }" var="blog">
    			<tr>
    				<td>${blog.bid }</td>
    				<td>${blog.title }</td>
    				<!-- 不使用网页静态化 -->
    				<%-- <td><a target="_blank" href="${pageContext.request.contextPath}/sy/freemarkerBlog_show.action?bid=${blog.bid }">${blog.summary }</a></td>
    				<!-- 使用网页静态化 --> --%>
    		        <td><a target="_blank" href="${pageContext.request.contextPath}/freemarker/${blog.bid }.html">${blog.summary }</a></td>
    				<td><a href="">修改</a> <a href="">删除</a></td>
    			</tr>
    		</c:forEach>
    	</table>
    </body>
    </html>
    
    展开全文
  • Freemarker网页静态化

    2019-09-28 05:09:11
    什么是网页静态化?  动态页面静态化是通过动态网站静态化将动态网页以静态的形式进行展现。 为什么要用网页静态化 网页静态化技术和缓存技术的共同点都是为了减轻数据库的访问压力。 网页静态化...
    • 什么是网页静态化?

      动态页面静态化是通过动态网站静态化将动态网页以静态的形式进行展现。

    • 为什么要用网页静态化

    1. 网页静态化技术和缓存技术的共同点都是为了减轻数据库的访问压力。
    2. 网页静态化有利于搜索引擎收录。
    3. 网页静态化有利于网站的稳定性。
    4. 网页静态化有利于提高速度。
    •  Freemarker是什么?

      FreeMarker是一个用Java语言编写的模板引擎,它基于模板来生成文本输出。

      FreeMarker与Web容器无关,即在Web运行时,它并不知道Servlet或HTTP。

      它不仅可以用作表现层的实现技术,而且还可以用于生成XML,JSP或Java 等。

      

    案例实现

    Test.html

    <html>
    <head>
        <meta charset="utf-8">
        <title>Freemarker入门小DEMO </title>
    </head>
    <body>
    
    小李飞刀 欢迎来到神奇的博客网站:http://www.javaxl.com!
    
    <h3>assigne指令</h3>
    联系人:周先生
    
    电话:13301231212  地址:北京市昌平区王府街
    
    <h3>if指令</h3>
      你已通过实名认证
    
    <h3>list指令</h3>
    ----商品价格表----<br>
      1 商品名称: 苹果 价格:5.8<br>
      2 商品名称: 香蕉 价格:2.5<br>
      3 商品名称: 橘子 价格:3.2<br>
    
    <h3>内建函数</h3>
    <h4>获取集合大小</h4>
    共  3  条记录
    
    <h4>转换JSON字符串为对象</h4>
        开户行:工商银行  账号:10101920201920212
        
    <h4>日期格式化</h4>
    当前日期:2019-9-10 <br>
    当前时间:14:23:57 <br>   
    当前日期+时间:2019-9-10 14:23:57 <br>        
    日期格式化:  2019年09月
    
    <h4>数字转换为字符串</h4>
    累计积分:102,920,122
    累计积分:102920122
    
    
    <h3>空值处理运算符</h3>
    <h4>判断某变量是否存在:“??”</h4>
      aaa变量不存在
    
    <h4>缺失变量默认值:“!”</h4>
      -
    
    
    <h3>运算符</h3>
    <h4>算数运算符</h4>
    FreeMarker表达式中完全支持算术运算,FreeMarker支持的算术运算符包括:+, - , * , / , %
    
    <h4>逻辑运算符</h4>
    逻辑运算符有如下几个: 
    逻辑与:&& 
    逻辑或:|| 
    逻辑非:! 
    逻辑运算符只能作用于布尔值,否则将产生错误 
    
    <h4>比较运算符</h4>
    表达式中支持的比较运算符有如下几个: 
    1  =或者==:判断两个值是否相等. 
    2  !=:判断两个值是否不等. 
    3  >或者gt:判断左边值是否大于右边值 
    4  >=或者gte:判断左边值是否大于等于右边值 
    5  < 或者lt:判断左边值是否小于右边值  
    6  <=或者lte:判断左边值是否小于等于右边值 
    注意:  =和!=可以用于字符串,数值和日期来比较是否相等,但=和!=两边必须是相同类型的值,否则会产生错误,而且FreeMarker是精确比较,"x","x ","X"是不等的.其它的运行符可以作用于数字和日期,但不能作用于字符串,大部分的时候,使用gt等字母运算符代替>会有更好的效果,因为 FreeMarker会把>解释成FTL标签的结束字符,当然,也可以使用括号来避免这种情况,
    
    </body>
    </html>

    后台 Dome01

    package com.huangting.freemarker;
    import java.io.File;
    import java.io.FileWriter;
    import java.io.IOException;
    import java.io.Writer;
    import java.util.ArrayList;
    import java.util.Date;
    import java.util.HashMap;
    import java.util.List;
    import java.util.Map;
    
    import freemarker.template.Configuration;
    import freemarker.template.Template;
    import freemarker.template.TemplateException;
    
    public class Demo001 {
        public static void main(String[] args) throws IOException, TemplateException {
            // 1.创建配置类
            Configuration configuration = new Configuration(Configuration.getVersion());
            // 2.设置模板所在的目录
            configuration.setDirectoryForTemplateLoading(
                    new File("F:\\java2\\javaxl_lunece_freemarker\\src\\main\\resources"));
            // 3.设置字符集
            configuration.setDefaultEncoding("utf-8");
            // 4.加载模板
            Template template = configuration.getTemplate("test.ftl");
            // 5.创建数据模型
            Map map = new HashMap();
            map.put("name", "小李飞刀");
            map.put("message", "欢迎来到神奇的博客网站:http://www.javaxl.com!");
            map.put("success", true);
            
            List goodsList=new ArrayList();
            Map goods1=new HashMap();
            goods1.put("name", "苹果");
            goods1.put("price", 5.8);
            Map goods2=new HashMap();
            goods2.put("name", "香蕉");
            goods2.put("price", 2.5);
            Map goods3=new HashMap();
            goods3.put("name", "橘子");
            goods3.put("price", 3.2);
            goodsList.add(goods1);
            goodsList.add(goods2);
            goodsList.add(goods3);
            map.put("goodsList", goodsList);
            
            map.put("today", new Date());
            map.put("point", 102920122);
            
            // 6.创建Writer对象
            Writer out = new FileWriter(new File("F:\\java2\\javaxl_lunece_freemarker\\src\\main\\webapp\\freemarker\\test.html"));
            // 7.输出
            template.process(map, out);
            // 8.关闭Writer对象
            out.close();
        }
    }

     

     

    将网页静态化用于网站

    网页模板  blogDetail.ftl

    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
    <%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%>
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>Python Django 模板层(AJAX)-javaxl-晓码阁-博客专栏</title>
    <link rel="stylesheet" href="./freemarkerDemo_files/bootstrap.min.css">
    <link rel="stylesheet"
        href="./freemarkerDemo_files/bootstrap-theme.min.css">
    <link rel="stylesheet" href="./freemarkerDemo_files/blog.css">
    <script src="./freemarkerDemo_files/jquery-1.11.2.min.js.下载"></script>
    <script src="./freemarkerDemo_files/bootstrap.min.js.下载"></script>
    <style type="text/css">
    body {
        padding-top: 10px;
        padding-bottom: 40px;
    }
    </style>
    </head>
    <body>
        <div class="container">
            <script type="text/javascript">
                function checkData() {
                    var q = document.getElementById("q").value.trim();
                    if (q == null || q == "") {
                        alert("请输入您要查询的关键字!");
                        return false;
                    } else {
                        return true;
                    }
                }
            </script>
    
    
            <div class="row">
                <div class="col-md-12" style="padding-top: 10px">
                    <nav class="navbar navbar-default navbar-fixed-top">
                    <div class="container-fluid">
                        <!-- Brand and toggle get grouped for better mobile display -->
                        <div class="navbar-header">
                            <button type="button" class="navbar-toggle collapsed"
                                data-toggle="collapse"
                                data-target="#bs-example-navbar-collapse-1" aria-expanded="false">
                                <span class="sr-only">展开</span> <span class="icon-bar"></span> <span
                                    class="icon-bar"></span> <span class="icon-bar"></span>
                            </button>
                            <a class="navbar-brand" href="http://www.javaxl.com/index"><b
                                style="color: black"><strong>首页</strong></b></a>
    
                        </div>
    
                        <!-- Collect the nav links, forms, and other content for toggling -->
                        <div class="collapse navbar-collapse"
                            id="bs-example-navbar-collapse-1">
                            <ul class="nav navbar-nav">
    
                                <li><a href="http://122.114.92.43/p4/index" target="_blank"><b
                                        color="black"><strong>美食</strong></b></a></li>
                                <li><a href="http://59.110.212.17/p5/index" target="_blank"><b
                                        color="black"><strong>知识库</strong></b></a></li>
                                <li><a href="http://www.javaxl.com/abortMe" target="_blank"><b
                                        color="black"><strong>关于本站</strong></b></a></li>
    
                            </ul>
                            <form action="http://www.javaxl.com/admin/blog/q"
                                class="navbar-form navbar-right" role="search" method="post"
                                onsubmit="return checkData()">
                                <div class="form-group">
                                    <input type="text" id="q" name="q" value="" class="form-control"
                                        placeholder="请输入要查询的关键字...">
                                </div>
                                <button type="submit" class="btn btn-default">搜索</button>
                            </form>
                        </div>
                        <!-- /.navbar-collapse -->
                    </div>
                    <!-- /.container-fluid --> </nav>
                </div>
            </div>
    
    
            <div class="row" style="margin-top: 50px;">
                <!--
                真正展示博客内容的地方,
                所有博客链接的列表->list.jsp
                单条博客详情->view.jsp
                呼和条件的博客详情列表->result.jsp
            -->
                <div class="col-md-9">
    
                    <script type="text/javascript"
                        src="./freemarkerDemo_files/shCore.js.下载"></script>
                    <link rel="stylesheet"
                        href="./freemarkerDemo_files/shCoreDefault.css">
                    <script type="text/javascript">
                        /*本页面用于查看博客链接中的详细内容*/
                        SyntaxHighlighter.all();
    
                        function showOtherComment() {
                            $(".otherComment").show();
                        }
    
                        function loadimage() {
                            document.getElementById("randImage").src = "/static/system/jsp/common/image.jsp?"
                                    + Math.random();
                        }
    
                        function submitData() {
                            var content = $("#content").val();
                            var imageCode = $("#imageCode").val();
                            if (content == null || content == "") {
                                alert("请输入评论内容!");
                            } else if (imageCode == null || imageCode == "") {
                                alert("请填写验证码!");
                            } else {
                                $.post("/comment/save.do", {
                                    "content" : content,
                                    'imageCode' : imageCode,
                                    'blog.bid' : '323'
                                }, function(result) {
                                    if (result.success) {
                                        window.location.reload();
                                        alert("评论已提成成功,审核通过后显示!");
                                    } else {
                                        alert(result.errorInfo);
                                    }
                                }, "json");
                            }
                        }
                    </script>
    
                    <div class="data_list">
                        <div class="data_list_title">
                            <img
                                src="./freemarkerDemo_files/blog_show_icon.png" />
                            博客信息
                        </div>
                        <div>
                            <div class="blog_title">
                                <h3>
                                    <strong>${blog.title }</strong>
                                </h3>
                            </div>
                            <div class="blog_share">
                                <!-- <div class="bshare-custom"><a title="分享到QQ空间" class="bshare-qzone"></a><a title="分享到新浪微博" class="bshare-sinaminiblog"></a><a title="分享到人人网" class="bshare-renren"></a><a title="分享到腾讯微博" class="bshare-qqmb"></a><a title="分享到网易微博" class="bshare-neteasemb"></a><a title="更多平台" class="bshare-more bshare-more-icon more-style-addthis"></a><span class="BSHARE_COUNT bshare-share-count">0</span></div><script type="text/javascript" charset="utf-8" src="http://static.bshare.cn/b/buttonLite.js#style=-1&amp;uuid=&amp;pophcol=2&amp;lang=zh"></script><script type="text/javascript" charset="utf-8" src="http://static.bshare.cn/b/bshareC0.js"></script> -->
                            </div>
                            <div class="blog_info">发布时间:『${blog.releaseDate?datetime }』&nbsp;&nbsp;博客类别:${blog.btid }&nbsp;&nbsp;阅读(${blog.clickHit })
                            </div>
                            <div class="blog_content">${blog.content }</div>
                        </div>
                    </div>
    
                </div>
                <!-- 右侧布局 -->
                <div class="col-md-3">
                    <div class="data_list">
                        <div class="data_list_title">博主信息</div>
                        <div class="user_image">
    
                            <img src="./freemarkerDemo_files/index_1.jpg">
                        </div>
                        <div class="nickName">javaxl_小李飞刀</div>
                        <div class="userSign">(知识改变命运,教育改变生活)</div>
                    </div>
    
                    <div class="data_list">
                        <div class="data_list_title">
                            <img src="./freemarkerDemo_files/byType_icon.png"> 按日志类别
                        </div>
                        <div class="datas">
                            <ul>
    
                                <li><span><a
                                        href="http://www.javaxl.com/index.html?btid=9">java基础(71)</a></span></li>
    
                                <li><span><a
                                        href="http://www.javaxl.com/index.html?btid=1">自定义mvc(8)</a></span></li>
    
                                <li><span><a
                                        href="http://www.javaxl.com/index.html?btid=2">前端框架(39)</a></span></li>
    
                                <li><span><a
                                        href="http://www.javaxl.com/index.html?btid=4">索引框架(7)</a></span></li>
    
                                <li><span><a
                                        href="http://www.javaxl.com/index.html?btid=5">SSH(14)</a></span></li>
    
                                <li><span><a
                                        href="http://www.javaxl.com/index.html?btid=6">SSM(9)</a></span></li>
    
                                <li><span><a
                                        href="http://www.javaxl.com/index.html?btid=7">服务器部署(5)</a></span></li>
    
                                <li><span><a
                                        href="http://www.javaxl.com/index.html?btid=8">项目异常归总(5)</a></span></li>
    
                                <li><span><a
                                        href="http://www.javaxl.com/index.html?btid=10">安全框架(4)</a></span></li>
    
                                <li><span><a
                                        href="http://www.javaxl.com/index.html?btid=11">SpringBoot(15)</a></span></li>
    
                                <li><span><a
                                        href="http://www.javaxl.com/index.html?btid=12">程序人生(3)</a></span></li>
    
                                <li><span><a
                                        href="http://www.javaxl.com/index.html?btid=13">其他框架(5)</a></span></li>
    
                                <li><span><a
                                        href="http://www.javaxl.com/index.html?btid=14">开发工具(6)</a></span></li>
    
                                <li><span><a
                                        href="http://www.javaxl.com/index.html?btid=15">解决方案(7)</a></span></li>
    
                                <li><span><a
                                        href="http://www.javaxl.com/index.html?btid=16">23种设计模式(25)</a></span></li>
    
                                <li><span><a
                                        href="http://www.javaxl.com/index.html?btid=17">SpringCloud(14)</a></span></li>
    
                                <li><span><a
                                        href="http://www.javaxl.com/index.html?btid=18">第三方(4)</a></span></li>
    
                                <li><span><a
                                        href="http://www.javaxl.com/index.html?btid=19">Python(67)</a></span></li>
    
                                <li><span><a
                                        href="http://www.javaxl.com/index.html?btid=20">底层探究(1)</a></span></li>
    
                            </ul>
                        </div>
                    </div>
    
                    <div class="data_list">
                        <div class="data_list_title">
                            <img src="./freemarkerDemo_files/byDate_icon.png"> 按日志日期
                        </div>
                        <div class="datas">
                            <ul>
    
                                <li><span><a
                                        href="http://www.javaxl.com/index.html?releaseDateStr=2019%E5%B9%B408%E6%9C%88">2019年08月(36)</a></span></li>
    
                                <li><span><a
                                        href="http://www.javaxl.com/index.html?releaseDateStr=2019%E5%B9%B407%E6%9C%88">2019年07月(27)</a></span></li>
    
                                <li><span><a
                                        href="http://www.javaxl.com/index.html?releaseDateStr=2019%E5%B9%B406%E6%9C%88">2019年06月(47)</a></span></li>
    
                                <li><span><a
                                        href="http://www.javaxl.com/index.html?releaseDateStr=2019%E5%B9%B405%E6%9C%88">2019年05月(61)</a></span></li>
    
                                <li><span><a
                                        href="http://www.javaxl.com/index.html?releaseDateStr=2019%E5%B9%B404%E6%9C%88">2019年04月(18)</a></span></li>
    
                                <li><span><a
                                        href="http://www.javaxl.com/index.html?releaseDateStr=2019%E5%B9%B403%E6%9C%88">2019年03月(50)</a></span></li>
    
                                <li><span><a
                                        href="http://www.javaxl.com/index.html?releaseDateStr=2019%E5%B9%B402%E6%9C%88">2019年02月(57)</a></span></li>
    
                                <li><span><a
                                        href="http://www.javaxl.com/index.html?releaseDateStr=2019%E5%B9%B401%E6%9C%88">2019年01月(13)</a></span></li>
                            </ul>
                        </div>
                    </div>
    
                    <div class="data_list">
                        <div class="data_list_title">
                            <img src="./freemarkerDemo_files/link_icon.png"> 友情链接
                        </div>
                        <div class="datas">
                            <ul>
    
                                <li><span><a href="http://www.baidu.com/"
                                        target="_blank">百度</a></span></li>
    
                                <li><span><a href="http://122.114.92.43/p4/index"
                                        target="_blank">晓码阁-美食网</a></span></li>
    
                                <li><span><a href="http://59.110.212.17/p5/index"
                                        target="_blank">晓码阁-知识库</a></span></li>
                            </ul>
                        </div>
                    </div>
    
                </div>
            </div>
    
            <div class="row">
                <div class="col-md-12">
                    <div align="center" style="padding: 20px">
                        <span style="float: left;">Powered by <a
                            href="http://www.javaxl.com/" target="_blank">博客首页</a> V1.0
                        </span> Copyright © 2018-2019 javaxl晓码阁 版权所有
                    </div>
                </div>
            </div>
        </div>
    </body>
    </html>

    后台 Demo02

    package com.huangting.freemarker;
    import java.io.File;
    import java.io.FileWriter;
    import java.io.IOException;
    import java.io.Writer;
    import java.sql.Connection;
    import java.sql.PreparedStatement;
    import java.sql.ResultSet;
    import java.sql.SQLException;
    import java.util.HashMap;
    import java.util.Map;
    
    import com.huangting.blog.util.DBAccess;
    
    import freemarker.template.Configuration;
    import freemarker.template.Template;
    import freemarker.template.TemplateException;
    
    public class Demo002 {
        @SuppressWarnings("rawtypes")
        public static void main(String[] args) throws IOException, TemplateException, SQLException {
            // 1.创建配置类
            Configuration configuration = new Configuration(Configuration.getVersion());
            // 2.设置模板所在的目录
            configuration.setDirectoryForTemplateLoading(
                    new File("F:\\java2\\javaxl_lunece_freemarker\\src\\main\\webapp\\freemarker"));
            // 3.设置字符集
            configuration.setDefaultEncoding("utf-8");
            // 4.加载模板
            Template template = configuration.getTemplate("blogDetail.ftl");
            createPage(template);
            
        }
        
        private static void createPage(Template template) throws SQLException, IOException, TemplateException {
            Connection con = DBAccess.getConnection();
            String sql = "select * from t_lucene_freemarker_blog";
            PreparedStatement pst = con.prepareStatement(sql);
            ResultSet rs = pst.executeQuery();
            Map map = new HashMap<>();
            Map<String, Object> blog = new HashMap<>();
            while(rs.next()) {
                blog.put("bid", rs.getObject("bid"));
                blog.put("title", rs.getObject("title"));
                blog.put("releaseDate", rs.getObject("releaseDate"));
                blog.put("btid", rs.getObject("btid"));
                blog.put("clickHit", rs.getObject("clickHit"));
                blog.put("content", rs.getObject("content"));
                
                map.put("blog", blog);
    //            // 6.创建Writer对象
                Writer out = new FileWriter(new File("F:\\java2\\javaxl_lunece_freemarker\\src\\main\\webapp\\freemarker\\"+blog.get("bid")+".html"));
                // 7.输出
                template.process(map, out);
                // 8.关闭Writer对象
                out.close();
            }
            DBAccess.close(con, pst, rs);
        }
    }

     

    谢谢观看!

     

    转载于:https://www.cnblogs.com/huangting/p/11550179.html

    展开全文
  • 1.什么是网页静态化技术:随着用户访问量以及数据量的增大,网页静态化技术方案如今越来越流行。什么是网页静态化技术呢?简单来说就是将网页以纯静态方式的形式展现。2.网页静态化技术与缓存技术的比较:共同点:都...

    1.什么是网页静态化技术:
    随着用户访问量以及数据量的增大,网页静态化技术方案如今越来越流行。
    什么是网页静态化技术呢?简单来说就是将网页以纯静态方式的形式展现。

    2.网页静态化技术与缓存技术的比较:
    共同点:都可以减小数据库的访问压力。
    区别:
    (1)缓存技术适用于小规模的数据。以及一些经常变动的数据。
    (2)网页静态化技术适用于大规模但是变化不太频繁的数据。

    3.网页静态化技术的应用场景:
    (1)新闻门户网站的文章类型频道一般都用到了网页静态化技术。点击新闻直接会跳到静态化的页面。
    (2)电商网站的商品详情页也十分常用,我们在存储商品的时候会生成静态化页面,点击商品详情,会直接跳到生成的商品详情的静态化页面。
    (3)此外网页静态化技术可以结合Nginx这种高性能web服务器来提高并发访问量。

    4.什么是FreeMarker:
    FreeMarker是一款用Java语言编写的模板引擎,用它可以通过模板和要改变的数据来生成输出文本(例如HTML网页,配置文件,源代码等),作为用来实现网页静态化技术的一种手段。FreeMarker的使用率大大超过其他一些技术。对于系统中频繁使用数据库进行查询但是内容更新很小的应用,都可以用FreeMarker将网页静态化,这样就避免了大量的数据库访问请求,从而提高网站的性能。
    展开全文
  • 网页静态化技术

    2019-11-14 22:40:58
    1.为什么要使用网页静态化技术 网页静态化解决方案在实际开发中运用比较多,例如新闻网站,门户网站中的新闻频道或者是文章类的频道。 对于电商网站的商品详细页来说,至少几百万个商品,每个商品又有大量的信息...

    1.为什么要使用网页静态化技术

    网页静态化解决方案在实际开发中运用比较多,例如新闻网站,门户网站中的新闻频道或者是文章类的频道。
    在这里插入图片描述
    对于电商网站的商品详细页来说,至少几百万个商品,每个商品又有大量的信息,这样的情况同样也适用于使用网页静态化来解决。

    网页静态化技术和缓存技术的共同点都是为了减轻数据库的访问压力,但是具体的应用场景不同,缓存比较适合小规模的数据,而网页静态化比较适合大规模且相对变化不太频繁的数据。另外网页静态化还有利于SEO。

    另外我们如果将网页以纯静态化的形式展现,就可以使用Nginx这样的高性能的web服务器来部署。Nginx可以承载5万的并发,而Tomcat只有几百。关于Nginx我们在后续的课程中会详细讲解。

    2.页面静态化Demo

    2.1.搭建一个SpringBoot工程

    <?xml version="1.0" encoding="UTF-8"?>
    <project xmlns="http://maven.apache.org/POM/4.0.0"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
        <modelVersion>4.0.0</modelVersion>
    
        <parent>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-parent</artifactId>
            <version>2.1.4.RELEASE</version>
            <relativePath/> <!-- lookup parent from repository -->
        </parent>
    
        <groupId>com.bruceliu.nginx.demo</groupId>
        <artifactId>JD</artifactId>
        <version>1.0-SNAPSHOT</version>
    
        <dependencies>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-web</artifactId>
            </dependency>
    
            <!--导入模板引擎的相关启动器-->
            <!--thymeleaf模板引擎 自动配置  SpringMvc自动适配模板引擎-->
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-thymeleaf</artifactId>
            </dependency>
    
            <!--页面热部署-->
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-devtools</artifactId>
                <optional>true</optional>
            </dependency>
    
            <dependency>
                <groupId>net.sourceforge.nekohtml</groupId>
                <artifactId>nekohtml</artifactId>
                <version>1.9.22</version>
            </dependency>
    
            <dependency>
                <groupId>ognl</groupId>
                <artifactId>ognl</artifactId>
                <version>3.1.12</version>
            </dependency>
    
        </dependencies>
    
        <build>
            <plugins>
                <plugin>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-maven-plugin</artifactId>
                </plugin>
            </plugins>
        </build>
    
    
    </project>
    

    2.2.准备一个模板

    <!DOCTYPE html>
    <html lang="en" xmlns:th="http://www.w3.org/1999/xhtml">
    <head>
        <meta charset="UTF-8">
        <title>测试</title>
    </head>
    <body>
    <div>
        <h2 th:text="${hello}"></h2>
    
        <h1 th:each="user:${users}">
            <span th:text="${user.name}">XXX</span>
            <span th:text="${user.address}">XXX</span>
        </h1>
    </div>
    </body>
    </html>
    
    

    2.3.控制器

    package com.bruceliuy.condtroller;
    
    import com.bruceliuy.bean.User;
    import org.springframework.web.bind.annotation.GetMapping;
    import org.springframework.web.bind.annotation.PathVariable;
    import org.springframework.web.bind.annotation.RestController;
    import org.thymeleaf.TemplateEngine;
    import org.thymeleaf.context.Context;
    import org.thymeleaf.templateresolver.ClassLoaderTemplateResolver;
    
    import java.io.FileWriter;
    import java.io.IOException;
    import java.util.ArrayList;
    import java.util.List;
    
    @RestController
    public class LearnController {
    
        @GetMapping("/thymeleaf/{msg}")
        public void learn(@PathVariable String msg) throws IOException {
    
            User user1=new User("name1","address1");
            User user2=new User("name2","address2");
            User user3=new User("name3","address3");
            User user4=new User("name4","address4");
    
            List<User> users=new ArrayList<>();
            users.add(user1);
            users.add(user2);
            users.add(user3);
            users.add(user4);
    
            //创建模版加载器
            ClassLoaderTemplateResolver resolver = new ClassLoaderTemplateResolver();
            resolver.setPrefix("templates/");  //模板文件的所在目录
            resolver.setSuffix(".html");       //模板文件后缀
            //创建模板引擎
            TemplateEngine templateEngine = new TemplateEngine();
            //将加载器放入模板引擎
            templateEngine.setTemplateResolver(resolver);
            //创建字符输出流并且自定义输出文件的位置和文件名
            FileWriter writer = new FileWriter("D:/html/index.html");
            //创建Context对象(存放Model)
            Context context = new Context();
            //放入数据
            context.setVariable("hello",msg);
            context.setVariable("users",users);
            //创建静态文件,"text"是模板html名字
            templateEngine.process("test",context,writer);
        }
    }
    
    

    2.4.测试模板生成静态页面

    在这里插入图片描述

    3.商品详情页-数据显示

    3.1.需求分析

    运用thymeleaf技术来实现商品详细页的静态化。

    3.2.准备详情页面需要的数据

    System.out.println("商品上架静态页面生成中....");
    //SPU
    Goods goods = goodsApi.getGoodsById(id);
    GoodsDesc goodsDesc = goodsApi.getGoodsDescById(id);
    
    //3.商品分类 一级分类名  二级分类名  三级分类名
    String itemCat1 = goodsApi.itemCat_getById(Integer.parseInt(goods.getCategory1Id().toString())).getName();
    String itemCat2 = goodsApi.itemCat_getById(Integer.parseInt(goods.getCategory2Id().toString())).getName();
    String itemCat3 = goodsApi.itemCat_getById(Integer.parseInt(goods.getCategory3Id().toString())).getName();
    
    //创建模版加载器
    ClassLoaderTemplateResolver resolver = new ClassLoaderTemplateResolver();
    resolver.setPrefix("templates/");  //模板文件的所在目录
    resolver.setSuffix(".html");       //模板文件后缀
    //创建模板引擎
    TemplateEngine templateEngine = new TemplateEngine();
    //将加载器放入模板引擎
    templateEngine.setTemplateResolver(resolver);
    
    String filePath=pagedir + id + ".html";
    
    //创建字符输出流并且自定义输出文件的位置和文件名
    FileWriter writer = new FileWriter(filePath);
    //创建Context对象(存放Model)
    Context context = new Context();
    //放入数据
    context.setVariable("goods", goods);
    context.setVariable("goodsDesc", goodsDesc);
    context.setVariable("itemCat1", itemCat1);
    context.setVariable("itemCat2", itemCat2);
    context.setVariable("itemCat3", itemCat3);
    //创建静态文件,"text"是模板html名字
    templateEngine.process("item", context, writer);
    

    3.3.Item模板页面

    将item.html拷贝至templates下 ,修改扩展名为ftl ,将商品名称模板标签代替

    • 商品标题
     <div class="des_name">
         <p th:text="${goods.goodsName}">Dior/迪奥 真我香水EDP 克丽丝汀迪奥 全新 30ml</p>
          <span th:text="${goods.caption}"></span>
     </div>
    
    • 商品价格
    本店价格:<b><span th:text="${goods.price}"></span></b><br />
    
    • 详情
     <div class="des_border" id="p_details">
             <div class="des_t">商品详情</div>
             <div class="des_con" th:utext="${goodsDesc.introduction}">
                 XXXXXX
             </div>
     </div>
    
    • 包装列表
     <div class="des_border" id="p_attribute1">
                    <div class="des_t">商品包装</div>
                    <div class="des_con" th:text="${goodsDesc.packageList}">
                        XXXXXXX
                    </div>
    </div>
    
    • 商品售后
     <div class="des_border" id="p_comment">
      <div class="des_t">商品售后</div>
             <div class="des_con" th:text="${goodsDesc.saleService}">
                 XXXXX
             </div>
    
             <div class="pages">
                 <a href="#" class="p_pre">上一页</a><a href="#" class="cur">1</a><a href="#">2</a><a href="#">3</a>...<a href="#">20</a><a href="#" class="p_pre">下一页</a>
       </div>
    </div>
    

    3.3.生成图片列表

    编辑模板文件

      <div id="tsShopContainer">
                <#--图片列表 -->
                <div id="tsImgS"><a th:href="@{${goods.smallPic}}" href="images/p_big.jpg" title="Images" class="MagicZoom" id="MagicZoom"><img th:src="@{${goods.smallPic}}" src="images/p_big.jpg" width="390" height="390" /></a></div>
                <div id="tsPicContainer">
                    <div id="tsImgSArrL" onclick="tsScrollArrLeft()"></div>
                    <div id="tsImgSCon">
                        <ul>
                            <li th:each="orderItem:${imagesItems}" onclick="showPic(1)" rel="MagicZoom">
                                <img th:src="@{${orderItem.url}}" src="images/ps2.jpg" tsImgS="images/ps2.jpg" width="79" height="79" /></li>
                        </ul>
                    </div>
                    <div id="tsImgSArrR" onclick="tsScrollArrRight()"></div>
                </div>
                <img class="MagicZoomLoading" width="16" height="16" src="images/loading.gif" alt="Loading..." />
            </div>
    

    准备后台数据:

    String itemImages = goodsDesc.getItemImages();
    ObjectMapper mapper = new ObjectMapper();
    //JSON工具类型:
    List<OrderAndUrl> imagesItems = mapper.readValue(itemImages, new TypeReference<ArrayList<OrderAndUrl>>() {});
    System.out.println("图片集合是:"+imagesItems);
    context.setVariable("imagesItems", imagesItems);
    

    3.4.生成商品类型面包屑

      <div class="postion">
          <span class="fl">全部 > <span th:text="${itemCat1}"></span> > <span th:text="${itemCat2}"></span> > <span th:text="${itemCat3}"></span> </span>
      </div>
    
    展开全文
  • 网页静态化-freemarker模板改造 上节课我们一起学习了网页静态化的方案,这节课我们一起学习下freemarker模板改造。 我们需要把原来属于jsp下面的文件都改造成静态网页,把taotao-item-web工程下的jsp目录下的所有...
  • CMS高性能网页静态化技术视频CMS高性能网页静态化技术视频CMS高性能网页静态化技术视频
  • FreeMarker 网页静态化

    2018-08-27 00:00:53
    FreeMarker 网页静态化
  • 网页静态化技术和缓存技术的共同点都是为了减轻数据库的访问压力,但是具体的应用场景不同,缓存比较适合小规模的数据,而网页静态化比较适合大规模且相对变化不太频繁的数据。另外网页静态化还有利于SEO。 二....
  • 动态网页静态化

    2019-09-23 22:29:50
    为什么要让网页静态化,生成静态的程序来做网站的好处? 在三年前,有百分之八十的网站要求做成动态的。也就是从那个时候也就是ASP的发展高峰期。一些静态网页也要求做成动态网站。但是这二年来,网站要求做成静态...
  • Freemarker 网页静态化技术 网页静态化 ​ 应用场景:适用于需要显示大量数据和信息的网页。 网页静态化技术和缓存技术的共同点都是为了减轻数据库的访问压力,但是具体的应用场景不同。缓存比较适合小规模的数据,...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 3,867
精华内容 1,546
关键字:

网页静态化