• 首页
  • 邻居
  • 关于
  • 归档
  • 搜索
  • 夜间模式
    ©2020-2026  我的学习笔记 Theme by OneBlog

    我的学习笔记博客

    搜索
    标签
    # 随笔 # Java # 教程 # openwrt # Mysql # SQL # 爬虫 # post # Js调优 # MAVEN
  • 首页>
  • Java>
  • 正文
  • Springboot动态生成网站地图sitemap教程

    2020年05月07日 3.4 k 阅读 1 评论 4993 字
    发现自从换了一套博客程序后,之前搜索引擎抓取的链接都失效了,所以才有此想法采用java生成动态的网站地图。

    步骤一 创建实体

    SiteMapVo
    package com.my.blog.website.modal.Vo;
    
    import com.my.blog.website.utils.SiteMapUtils;
    import org.thymeleaf.util.DateUtils;
    
    import java.util.Date;
    import java.util.Locale;
    
    /**
     * @author Jesse-liu
     * @description: 网站地图entity
     * @date 2020/5/7 9:09
     */
    public class SiteMapVo {
        /**
         * url https://www.xxx.com
         */
        private String loc;
        /**
         * 最后更新时间 yyyy-MM-dd
         */
        private Date lastmod;
        /**
         * 更新速度 always hourly daily weekly monthly yearly never
         */
        private String changefreq;
        /**
         * 权重 1.0 0.9 0.8
         */
        private String priority;
    
        public String getLoc() {
            return loc;
        }
    
        public void setLoc(String loc) {
            this.loc = loc;
        }
    
        public Date getLastmod() {
            return lastmod;
        }
    
        public void setLastmod(Date lastmod) {
            this.lastmod = lastmod;
        }
    
        public String getChangefreq() {
            return changefreq;
        }
    
        public void setChangefreq(String changefreq) {
            this.changefreq = changefreq;
        }
    
        public String getPriority() {
            return priority;
        }
    
        public void setPriority(String priority) {
            this.priority = priority;
        }
    
        public SiteMapVo() {
    
        }
    
        public SiteMapVo(String loc) {
            this.loc = loc;
            this.lastmod = new Date();
            this.changefreq = SiteMapUtils.CHANGEFREQ_ALWAYS;
            this.priority = "1.0";
        }
    
        public SiteMapVo(String loc, Date lastmod, String changefreq, String priority) {
            this.loc = loc;
            this.lastmod = lastmod;
            this.changefreq = changefreq;
            this.priority = priority;
        }
    
        @Override
        /** 重写 toString 适应xml格式 */
        public String toString() {
            StringBuffer sb = new StringBuffer();
            sb.append("<url>");
            sb.append("<loc>" + loc + "</loc>");
            sb.append("<lastmod>" + DateUtils.format(lastmod, "yyyy-MM-dd", Locale.SIMPLIFIED_CHINESE) + "</lastmod>");
            sb.append("<changefreq>" + changefreq + "</changefreq>");
            sb.append("<priority>" + priority + "</priority>");
            sb.append("</url>");
            return sb.toString();
        }
    }
    

    步骤二 创建工具类

    SiteMapUtils
    package com.my.blog.website.utils;
    
    import com.my.blog.website.constant.WebConst;
    import com.my.blog.website.modal.Vo.ContentVo;
    import com.my.blog.website.modal.Vo.SiteMapVo;
    import com.my.blog.website.service.IContentService;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.stereotype.Component;
    
    import java.util.List;
    
    /**
     * @author Jesse-liu
     * @description: java生成sitemap网站地图工具类
     * @date 2020/5/7 10:25
     */
    @Component
    public class SiteMapUtils {
    
        public final static String BEGIN_DOC = "<urlset xmlns=\"http://www.sitemaps.org/schemas/sitemap/0.9\">";
        public final static String END_DOC = "</urlset>";
        public final static String CHANGEFREQ_ALWAYS = "always";
        public final static String CHANGEFREQ_HOURLY = "hourly";
        public final static String CHANGEFREQ_DAILY = "daily";
        public final static String CHANGEFREQ_WEEKLY = "weekly";
        public final static String CHANGEFREQ_MONTHLY = "monthly";
        public final static String CHANGEFREQ_YEARLY = "yearly";
        public final static String CHANGEFREQ_NEVER = "never";
    
        @Autowired
        private IContentService contentsService;
    
    
        public String getBlogSiteMap() {
            StringBuffer sb = new StringBuffer();
            sb.append(BEGIN_DOC);
            sb.append(new SiteMapVo(WebConst.initConfig.get("site_url")));
            List<ContentVo> contentList = contentsService.findContentList();
            contentList.forEach(entity -> {
                sb.append(new SiteMapVo(Commons.permalink(entity), DateKit.dateFormat(Commons.fmtdate(entity.getModified(), "yyyy-MM-dd"), "yyyy-MM-dd"), CHANGEFREQ_MONTHLY, "0.9"));
            });
            sb.append(END_DOC);
            return sb.toString();
        }
    
        public String getBzSiteMap() {
            StringBuffer sb = new StringBuffer();
            sb.append(BEGIN_DOC);
            sb.append(new SiteMapVo(WebConst.initConfig.get("site_url")));
            sb.append(END_DOC);
            return sb.toString();
        }
    }
    

    步骤三

    Web层添加请求控制器
      /**
         * @return : java.lang.String
         * @author Jesse-liu
         * @date 2020/5/7
         * @description: 动态生成网站地图sitemap
         **/
        @GetMapping(value = {"sitemap.xml", "sitemap"})
        public void getSiteMap(HttpServletResponse response) throws IOException {
            response.setCharacterEncoding("UTF-8");
            response.setContentType(MediaType.APPLICATION_XML_VALUE);
            response.getWriter().append(siteMapUtils.getBlogSiteMap());
        }
       完美收工!!!
       
    

    效果展示页面

    https://ooolo.net/sitemap.xml

    本文著作权归作者 [ admin ] 享有,未经作者书面授权,禁止转载,封面图片来源于 [ 互联网 ] ,本文仅供个人学习、研究和欣赏使用。如有异议,请联系博主及时处理。
    教程网站地图
    取消回复

    发表留言
    回复

    读者留言1

    1. 周小笨 Lv.1
      2021-03-08 16:38 回复

      这。。。不是直接从数据库拿链接吗,问题是链接怎么生成。。。

    加载更多评论
    加载中...
    — 已加载全部评论 —
    首页邻居关于归档
    Copyright©2020-2026  All Rights Reserved.  Load:0.017 s
    京ICP备18019712号
    Theme by OneBlog V3.6.5
    夜间模式

    开源不易,请尊重作者版权,保留基本的版权信息。