动态生成网站地图sitemap.xml

在做网站地图时更新成了一个麻烦,于是想到返回一个虚拟xml,动态生成网站地图。

例如sitemap.xml ,如果每次增加新网页都要在静态文件中添加url工程量将非常大,所有想到每次请求都查询新的网站地图。
上代码:
Controller层代码:

    /**
     * 获取sitemap.xml
     * 伪静态文件,每次返回的都是新的字符串
     */
    @RequestMapping(value= "/sitemap.xml",produces= {"application/xml"})
    @ResponseBody
    public String getSitemap() {
        List<Subject> subjects = subjectService.findAllList(new Subject());
        //静态文件字符串
        return SiteMapUtils.getSiteMap(subjects);
    }

生成xml字符串方法:

/**
 * @ClassName SiteMapUtils
 * @Description TODO
 * @Author mwy
 * @Date 2020/6/22
 */
public class SiteMapUtils {
    private final static String XML= "<?xml version=\"1.0\" encoding=\"utf-8\"?>";
    private final static String BEGIN_DOC= "<urlset>";
    private 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";


    public static String getSiteMap(List list) {
        StringBuffer sb= new StringBuffer();
        sb.append(XML);
        sb.append(BEGIN_DOC);
        for(Object obj:list){
            SiteMap siteMap = new SiteMap(obj);
            sb.append(siteMap.toString());
        }
        sb.append(END_DOC);
        return sb.toString();
    }

}

生成单条url方法,重新toString,可写其他名字:

    @Override
    /** 重写 toString 适应xml格式 */
    public String toString() {
        StringBuffer sb = new StringBuffer();
        sb.append("<url>");
        sb.append("<loc>" + loc + "</loc>");
        sb.append("<lastmod>" + DateUtils.formatDate(lastmod) + "</lastmod>");
        if (StringUtils.isNotBlank(changefreq)) {
            sb.append("<changefreq>" + changefreq + "</changefreq>");
        }
        if (StringUtils.isNotBlank(priority)) {
            sb.append("<priority>" + priority + "</priority>");
        }
        sb.append("</url>");
        return sb.toString();
    }

日期格式化方法:

    /**
     * 得到日期字符串 默认格式(yyyy-MM-dd) pattern可以为:"yyyy-MM-dd" "HH:mm:ss" "E"
     */
    public static String formatDate(Date date, Object... pattern) {
        String formatDate = null;
        if (pattern != null && pattern.length > 0) {
            formatDate = DateFormatUtils.format(date, pattern[0].toString());
        } else {
            formatDate = DateFormatUtils.format(date, "yyyy-MM-dd");
        }
        return formatDate;
    }

于是,每次请求网站地图后都是最新的,但此方法会增加服务器压力,适合网站更新较快但没有多余精力维护网站地图的网站使用。
友情链接:www.how2xue.com,一个共同学习的网站

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值