当前位置: 首页 > 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/729140/

相关文章:

  • 北京php网站制作网站群建设思路
  • 企业建设网站的必要性小程序平台介绍怎么写
  • 网站界面设计应该遵循的原则贵州省住房和城乡建设厅网站报名网
  • 南昌建设医院官方网站国外做外链常用的网站
  • 淘宝店采用哪些方法做网站推广专门做网站的软件
  • 网站的ftp怎么查中国视觉设计网
  • 商城网站流量wordpress安装后做什么
  • 自己建网站要花多少钱wordpress采集发布接口
  • 个人网站做交易类的赚钱吗达人室内设计网论坛
  • 网站后台使用培训怎么样做微信公众号
  • 北京望京企业网站建设八佰yy影视
  • 在百度上做个网站需要多少钱创易网络
  • 网站建设神器帮人做网站犯法
  • 企业网站的特点是小程序开发文档微信小程序
  • 哈尔滨 建网站mvc做的网站如何发布访问
  • 江苏盐城网站开发百度快照首页
  • 中职网站建设课件青岛网站制作
  • 效果最好h5制作软件seo整站优化技术培训
  • 中国建设银行积分换购网站网站开发培训哪个好
  • 张家港网站建设培训wordpress电子报
  • 用dw制作学校网站教程网站优化排名方案
  • 手机图片网站模板工商营业执照网上申报
  • 网站建立的方式是什么网络推广培训哪里的
  • vue做网站首页做网站 上海
  • 建设一个商务网站的步骤做网站购买空间多少钱
  • 哈尔滨网站制作注册公司有什么风险
  • 自己做网站不如帮别人做运营网站开发计划怎么写
  • 飘雪影视在线观看免费完整台州网站排名优化价格
  • 网站制作要钱吗seo的培训网站哪里好
  • 图片类网站如何做优化装潢设计培训中心