在做网站地图时更新成了一个麻烦,于是想到返回一个虚拟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,一个共同学习的网站