当前位置: 首页 > news >正文

青海公司网站建设哪家快音乐网站建设费用

青海公司网站建设哪家快,音乐网站建设费用,网站框架,互联网行业介绍全站静态化 在大型网站中#xff0c;比如主流电商商品页#xff0c;访问者看到的页面基本上是静态页面。为什么都要把页面静态化呢#xff1f;其实把页面静态化#xff0c;好处有很多。例如#xff1a;访问速度快#xff0c;更有利于搜索引擎收录等。 目前主流的静态化…全站静态化 在大型网站中比如主流电商商品页访问者看到的页面基本上是静态页面。为什么都要把页面静态化呢其实把页面静态化好处有很多。例如访问速度快更有利于搜索引擎收录等。 目前主流的静态化主要有两种 1、纯静态方式将动态页面抓取并保存为静态页面页面实际存在于服务器的硬盘中。2、伪静态方式通过WEB服务器的 URL Rewrite 把外部请求的静态地址转化为实际的动态页面地址页面本质上是动态页面静态页面是不存在的。 这两种方法都达到了实现URL静态化的效果但是也各有各自的特点。 优缺点对比 对比项动态伪静态纯静态网站打开速度中等中等快无DB查询、CPU计算消耗搜索引擎抓取和索引不利有利有利速度快权重高安全性低低高不适用程序、DB攻击目标少稳定性低低高不受程序、DB故障影响硬盘容量低低高静态化网页文件需要存储在硬盘中服务器压力高高低无DB查询、CPU计算消耗实时性高高低数据变更后需要手动触发静态化静态化难度随网站复杂度提升而提升 Freemarker实现Html全站静态化 1、引入maven依赖 dependency groupIdorg.freemarker/groupId artifactIdfreemarker/artifactId version{最新稳定版}/version /dependency 2、freemarker工具类 1、配置FreeMarkerConfigurer推荐托管在Spring容器和复用SpringMVC同一套配置 bean idfreemarkerConfig classorg.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer property namefreemarkerSettings bean classorg.springframework.beans.factory.config.PropertiesFactoryBean property namelocation valueclasspath:freemarker.properties / /bean /property property nametemplateLoaderPath value/WEB-INF/template/ / property namefreemarkerVariables bean classorg.springframework.beans.factory.config.PropertiesFactoryBean property namelocation valueclasspath:freemarker.variables.properties / /bean /property /bean 2、引入HtmlTemplateUtil.java文件 package com.xxl.util.core.util;import freemarker.ext.beans.BeansWrapper; import freemarker.template.Template; import freemarker.template.TemplateException; import freemarker.template.TemplateHashModel; import org.springframework.ui.freemarker.FreeMarkerTemplateUtils; import org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer;import java.io.*; import java.util.Map;/** * HTML模板.Util * * 功能简介 * 1、根据Ftl生成Html字符串 * 2、根据Ftl生成Html文件网站静态化 * 3、Ftl支持使用静态类方法 * * author xuxueli */ public class HtmlTemplateUtil {private static FreeMarkerConfigurer freemarkerConfig;public static FreeMarkerConfigurer loadConfig(){ if (freemarkerConfig null) { freemarkerConfig (FreeMarkerConfigurer) SpringContentAwareUtil.getBeanByName(freemarkerConfig); } return freemarkerConfig; }/** * generate static model * param packageName * return */ public static TemplateHashModel generateStaticModel(String packageName) { try { BeansWrapper wrapper BeansWrapper.getDefaultInstance(); TemplateHashModel staticModels wrapper.getStaticModels(); TemplateHashModel fileStatics (TemplateHashModel) staticModels.get(packageName); return fileStatics; } catch (Exception e) { e.printStackTrace(); } return null; }/** * 生成HTML字符串 * * param content : 页面传参 * param templateName : 模板名称路径,相对于模板目录 */ public static String generateString(Map?, ? content, String templateName) { String htmlText ; try { // 通过指定模板名获取FreeMarker模板实例 Template tpl loadConfig().getConfiguration().getTemplate(templateName); htmlText FreeMarkerTemplateUtils.processTemplateIntoString(tpl, content); } catch (Exception e) { e.printStackTrace(); } return htmlText; }/** * 生成HTML文件 * * param content : 页面传参 * param templatePathName : 模板名称路径,相对于模板目录 * param filePathName : 文件名称路径,相对于项目跟目录 * DEMO:HtmlTemplateUtil.generate(freemarkerConfig, new HashMapString, Object(), net/index.ftl, /index.html); */ public static void generateFile(Map?, ? content, String templatePathName, String filePathName) { Writer out null; try { // mkdirs File htmlFile new File(WebPathUtil.webPath() filePathName); if (!htmlFile.getParentFile().exists()) { htmlFile.getParentFile().mkdirs(); } // process Template template loadConfig().getConfiguration().getTemplate(templatePathName); out new OutputStreamWriter(new FileOutputStream(WebPathUtil.webPath() filePathName), UTF-8); template.process(content, out); out.flush(); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } catch (TemplateException e) { e.printStackTrace(); } finally { if (out ! null) { try { out.close(); out null; } catch (IOException e) { e.printStackTrace(); } } } }public static void main(String[] args) { String temp generateString(null, hello.ftl); System.out.println(temp);/*// generate String MapString, Object params new HashMapString, Object(); params.put(WebPathUtil, HtmlTemplateUtil.generateStaticModel(WebPathUtil.class.getName()));String result HtmlTemplateUtil.generateString(params, freemarker-test.ftl);// generate Html File HtmlTemplateUtil.generateFile(params, freemarker-test.ftl, freemarker-test.html);*/ }} 要点 1、“freemarkerConfig”中的配置“templateLoaderPath”为include新ftl文件时的根目录“/”位置省去了繁琐的相对路径配置相当方便 2、“freemarkerConfig”必须放在spring中springMVC和静态化UTIL公用因为web.xml加载顺序为web.xml加载顺序listenerspring - filter - servletspringMVC因此如果放在springMVC中Service中注入不了该config静态化UTIL注入时还未初始化bean会报错 3、freemarker静态化-单页面 public static void main(String[] args) { String temp generateString(null, hello.ftl); System.out.println(temp);/*// generate String MapString, Object params new HashMapString, Object(); params.put(WebPathUtil, HtmlTemplateUtil.generateStaticModel(WebPathUtil.class.getName())); // 可以在Ftl中使用静态工具类 ${WebPathUtil.webPath()}String result HtmlTemplateUtil.generateString(params, freemarker-test.ftl);// generate Html File HtmlTemplateUtil.generateFile(params, freemarker-test.ftl, freemarker-test.html);*/ } 4、freemarker静态化-分页 1、分页代码HtmlGenerateServiceImpl.java // 调用处一面墙,html分页 ListWallInfo wallInfoList wallInfoDao.getPageList(0, 10000); generateHtmlPagination(wallInfoList, null, 20, net/wall/index.ftl, wall/, index);/** * html分页工具 * param allList : html分页列表 * param pagesize : 每页显示记录数量 * param templatePathName : 模板页面,完整地址 (相相对于freeamrker配置根目录) * param filePath : html文件,路径目录 --/-/ * param index : html文件,默认前缀 index */ private void generateHtmlPagination(List? allList, MapString, Object paramMap,int pagesize, String templatePathName , String filePath , String index){ int allCount allList!null?allList.size():0;MapString, Object params new HashMapString, Object(); params.put(pageNumAll, 1); params.put(pageNum, 1); params.put(filePath, filePath); params.put(index, index);if (MapUtils.isNotEmpty(paramMap)) { params.putAll(paramMap); }if (allCount 0) { int pageNumAll allCount%pagesize0 ? allCount/pagesize : allCount/pagesize 1; for (int pageNum 1; pageNum pageNumAll; pageNum) { params.put(pageNumAll, pageNumAll); params.put(pageNum, pageNum);int from (pageNum-1)*pagesize; int to (from pagesize) allCount ? (from pagesize) : allCount; params.put(pageList, allList.subList(from, to));String fileName (pageNum1) ? index : (index _ pageNum); HtmlTemplateUtil.generate(params, templatePathName, filePath fileName .html); } } else { HtmlTemplateUtil.generate(params, templatePathName, filePath index .html); } } 2、分页模板index.ftl #list pageList as item div classwell text-justify${item.content}/div /#list!--html分页-- #import /net/common/common.html.pagination.ftl as pagination pagination.htmlPaging pageNumAllpageNumAll pageNumpageNum html_base_urlbase_urlfilePath indexindex / 3、分页模板公共分页标签common.html.pagination.ftl #-- html分页模板,文件名称 ------------------ pageNum : 当前页数、(1-max) html_base_url : html文件路径、 -- #macro htmlPagingName pageNum html_base_url index #if pageNum 1 ${html_base_url}${index}.html #else${html_base_url}${index}_${pageNum}.html/#if /#macro #-- html分页模板 ------------------ pageNumAll : 总页数、 pageNum : 当前页数、 html_base_url : html文件路径、 -- #macro htmlPaging pageNumAll pageNum html_base_url index ul classpagination !--pre-- #if pageNum-1 gte 1lia hrefhtmlPagingName pageNumpageNum-1 html_base_urlhtml_base_url indexindex / laquo;/a/li #elseli classdisabledalaquo;/a/li/#if !--every pre-- #if pageNum-1 gte 5 lia hrefhtmlPagingName pageNum1 html_base_urlhtml_base_url indexindex / 1/a/li lia hrefhtmlPagingName pageNum2 html_base_urlhtml_base_url indexindex / 2/a/li lia.../a/li lia hrefhtmlPagingName pageNumpageNum-2 html_base_urlhtml_base_url indexindex / ${pageNum-2}/a/li lia hrefhtmlPagingName pageNumpageNum-1 html_base_urlhtml_base_url indexindex / ${pageNum-1}/a/li #elseif 1 lte (pageNum-1) #list 1..(pageNum-1) as item lia hrefhtmlPagingName pageNumitem html_base_urlhtml_base_url indexindex / ${item}/a/li /#list /#if !--every now-- li classactive a hrefhtmlPagingName pageNumpageNum html_base_urlhtml_base_url indexindex / ${pageNum}/a/li !--every next-- #if pageNumAll-pageNum gte 5 lia hrefhtmlPagingName pageNumpageNum1 html_base_urlhtml_base_url indexindex / ${pageNum1}/a/li lia hrefhtmlPagingName pageNumpageNum2 html_base_urlhtml_base_url indexindex / ${pageNum2}/a/li lia.../a/li lia hrefhtmlPagingName pageNumpageNumAll-1 html_base_urlhtml_base_url indexindex / ${pageNumAll-1}/a/li lia hrefhtmlPagingName pageNumpageNumAll html_base_urlhtml_base_url indexindex / ${pageNumAll}/a/li #elseif (pageNum1) lte pageNumAll #list (pageNum1)..pageNumAll as item lia hrefhtmlPagingName pageNumitem html_base_urlhtml_base_url indexindex / ${item}/a/li /#list /#if !--next-- #if pageNum1 lte pageNumAlllia hrefhtmlPagingName pageNumpageNum1 html_base_urlhtml_base_url indexindex / raquo;/a/li #elseli classdisabledaraquo;/a/li/#if /ul /#macro 补充freemarker动态分页 1、动态分页对象Pager.java package com.xxl.core.model.vo;import java.io.Serializable; import java.util.List;SuppressWarnings(serial) public class PagerT implements Serializable{private int page; // 入参-第N页 private int pagesize; // 入参-每页长度 SuppressWarnings(unused) private int offset; // 起始行号【return this.page-10 ? 0 : (this.page-1)*this.rows;】 private ListT data; // 查询-分页数据 private int total; // 查询-总记录数 SuppressWarnings(unused) private int totalPage; // 查询-总页数【return (total pagesize - 1)/pagesize;】public Pager(int page, int pagesize){ this.page page; this.pagesize pagesize; }public int getPage() { return page; } public void setPage(int page) { this.page page; } public int getPagesize() { return pagesize; } public void setPagesize(int pagesize) { this.pagesize pagesize; } public int getOffset() { return this.page-10 ? 0 : (this.page-1)*this.pagesize; } public void setOffset(int offset) { this.offset offset; } public ListT getData() { return data; } public void setData(ListT data) { this.data data; } public int getTotal() { return total; } public void setTotal(int total) { this.total total; } public int getTotalPage() { return (total pagesize - 1)/pagesize; } public void setTotalPage(int totalPage) { this.totalPage totalPage; }} 2、后端分页代码 // Controller层代码 RequestMapping(/orderList) PermessionType public String orderList(HttpServletRequest request, Model model, RequestParam(requiredfalse, defaultValue1)int page, RequestParam(requiredfalse, defaultValue20)int pagesize){PagerOrderInfo pager new PagerOrderInfo(page, pagesize); orderService.selectPage(pager, identity);model.addAttribute(pager, pager); return net/order/orderList; } // Service层代码 Override public void selectPage(PagerOrderInfo pager, LoginIdentity identity) { ListOrderInfo data orderInfoDao.selectPage(pager.getOffset(), pager.getPagesize(), identity.getUserId()); int total orderInfoDao.selectPageCount(pager.getOffset(), pager.getPagesize(), identity.getUserId()); pager.setData(data); pager.setTotal(total); } 3、前端模板 !-- 分页数据 -- #if pager?exists pager.data?exists #list pager.data as item tr td${item.orderId}/td td${item.userId}/td td${item.prodId}/td td${item.orderTime?string(yyyy-MM-dd)}/td /tr /#list /#if !-- 分页标签 -- netCommon.pager pagerpager baseUrlbase_urlorder/orderList.do / 4、分页标签公共模板net.common.ftl #macro pager pager baseUrl !--pre-- #if pager.page gt 1a href${baseUrl}?page${pager.page - 1} 上页/a #else上页/#if!--every pre-- #if pager.page-1 gte 5 a href${baseUrl}?page1 1/a a href${baseUrl}?page2 2/a a.../a a href${baseUrl}?page${pager.page-2} ${pager.page-2}/a a href${baseUrl}?page${pager.page-1} ${pager.page-1}/a #elseif 1 lte (pager.page-1) #list 1..(pager.page-1) as item a href${baseUrl}?page${item} ${item}/a /#list /#if!--every now-- ${pager.page}!--every next-- #if pager.totalPage-pager.page gte 5 a href${baseUrl}?page${pager.page} ${pager.page1}/a a href${baseUrl}?page${pager.page} ${pager.page2}/a a.../a a href${baseUrl}?page${pager.page} ${pager.page-1}/a a href${baseUrl}?page${pager.page} ${pager.page}/a #elseif (pager.page1) lte pager.totalPage #list (pager.page1)..pager.totalPage as item a href${baseUrl}?page${pager.page} ${item}/a /#list /#if!--next-- #if pager.page lt pager.totalPagea href${baseUrl}?page${pager.page1} 下页/a #else下页/#if /#macro
http://www.zqtcl.cn/news/343450/

相关文章:

  • 东莞网站建设网络公司排名卓业网站建设
  • 建立自己的网站平台的好处高校英文网站建设
  • 大力推进网站集约化建设兰州优秀网站推广
  • 手机wap网站怎样从微信公众号打开辽宁省住房和城乡建设厅网站上不去
  • 网站建设备案 优帮云四川建设设计公司网站
  • dede网站搬家 空间转移的方法网站建设多少钱一个平台
  • 山东济南网站开发互联网创业项目哪家好平台
  • 公司网站建设文案济南网站定制策划
  • 怎么做网站例如京东小红书推广引流
  • 游戏网站建设策划书企业vi包含哪些内容
  • 教育视频网站开发网站响应时间长
  • 在哪些网站做收录比较快张家港江阴网站设计
  • 商业网站最佳域名贵州网站建设
  • 毕业设计做网站的步骤网络推广关键词优化公司
  • 悠悠我心的个人网站怎么做怎么开网站平台
  • 行业网站产品选择废旧材料手工制作大全
  • 企业内网网站建设徐州关键词优化公司
  • step7用法fc州网站建设discuz网站论坛间帖子转移
  • 网站的js效果代码大全wordpress主题修改颜色教程
  • 安徽省城乡和建设厅网站申请免费域名邮箱
  • 溧阳网站建设哪家好wordpress 迁移 空白
  • 网页设计个人网站设计建设营销型网站多少钱
  • 做网站时联系我们制作模板西部数据网站空间
  • 合肥网站建设服务公司wordpress安装字体
  • 建设阅读网站的意义长沙微推广平台
  • 所有搜索引擎蜘蛛不来网站了怎么开发手机页面
  • 网站没域名广告传媒公司取名
  • 代理浏览网站跨境电商平台
  • 触摸终端软件门户网站wordpress标签不解析
  • wordpress企业产品类目怎么设置seo推广是做什么