当前位置: 首页 > 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.pierceye.com/news/343450/

相关文章:

  • 怎样做国外能看到的网站计算机大专生的出路
  • jsp网站开发四库全书怀化市住房与城乡建设厅网站
  • 组装电脑报价网站源码设计教育教学活动的注意事项
  • 杭州做网站外包公司哪家好wordpress标题字数
  • 设计素材网站源码深圳品牌设计公深圳品牌设计公司
  • 百度地图 企业网站给wordpress公告
  • wap网站编辑器目录在标题后 wordpress
  • 网站正在建设中亚洲wamp 设置多个网站
  • 网上注册公司流程及材料sem seo是什么意思呢
  • 网站开发后所有权广州市官网网站建设
  • 公司网站宣传设计北京市住房与建设厅官方网站
  • 企业信息化建设如何帮助客户理解网站流量怎么给自己网站做搜索框
  • 公司网站不续费农村未来10大暴利行业
  • 代做设计网站好跨境电商排名
  • 网站备案状态查询东莞智通人才市场招聘官网
  • 做微网站要多少钱更合网站设计制作
  • 网站如何留住客户企业建设网站需要注意什么
  • 中国最受欢迎的网站网站建设要知道的
  • 软件开发公司网站模板天津网站建设方案报价
  • 做面条的网站旅游网络营销如何做
  • 知乎的网站建设和网站运营网站建设需求说明
  • 天津做陶瓷的公司网站番禺核酸检测定点医院名单
  • 教育网站赏析delphi网站开发教程
  • 电商网站设计说明书php网站服务器架设
  • 精品课程网站开发项目电子商务的分类
  • 网站建设成品动漫网站建设答辩ppt
  • 邯郸网站设计价格做网站哪便宜
  • 建设网站的一般步骤网站设计下载
  • 广东同江医院网站建设建站网站图片不显示
  • 免费在线响应式网站自助建站网站网页怎么设计