在做网站地图时更新成了一个麻烦,于是想到返回一个虚拟xml,动态生成网站地图。
例如sitemap.xml ,如果每次增加新网页都要在静态文件中添加url工程量将非常大,所有想到每次请求都查询新的网站地图。
上代码:
Controller层代码:
/*** 获取sitemap.xml* 伪静态文件,每次返回的都是新的字符串*/@RequestMapping(value= "/sitemap.xml",produces= {"application/xml"})@ResponseBodypublic String getSitemap() {List<Subject> subjects = subjectService.findAllList(new Subject());//静态文件字符串return SiteMapUtils.getSiteMap(subjects);}
生成xml字符串方法:
/*** @ClassName SiteMapUtils* @Description TODO* @Author mwy* @Date /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;}
于是,每次请求网站地图后都是最新的,但此方法会增加服务器压力,适合网站更新较快但没有多余精力维护网站地图的网站使用。
友情链接:,一个共同学习的网站