使用Spring MVC提供sitemap.xml和robots.txt

使用Spring MVCsitemap.xmlrobots.txt提供服务的最佳方法是什么? 我希望通过Controller以最干净的方式将这些文件服务器。

我依靠JAXB为我生成sitemap.xml。

我的控制器看起来如下所示,我有一些数据库表来跟踪我想要在站点地图中显示的链接: –

SitemapController.java

 @Controller public class SitemapController { @RequestMapping(value = "/sitemap.xml", method = RequestMethod.GET) @ResponseBody public XmlUrlSet main() { XmlUrlSet xmlUrlSet = new XmlUrlSet(); create(xmlUrlSet, "", XmlUrl.Priority.HIGH); create(xmlUrlSet, "/link-1", XmlUrl.Priority.HIGH); create(xmlUrlSet, "/link-2", XmlUrl.Priority.MEDIUM); // for loop to generate all the links by querying against database ... return xmlUrlSet; } private void create(XmlUrlSet xmlUrlSet, String link, XmlUrl.Priority priority) { xmlUrlSet.addUrl(new XmlUrl("http://www.mysite.com" + link, priority)); } } 

XmlUrl.java

 @XmlAccessorType(value = XmlAccessType.NONE) @XmlRootElement(name = "url") public class XmlUrl { public enum Priority { HIGH("1.0"), MEDIUM("0.5"); private String value; Priority(String value) { this.value = value; } public String getValue() { return value; } } @XmlElement private String loc; @XmlElement private String lastmod = new DateTime().toString(DateTimeFormat.forPattern("yyyy-MM-dd")); @XmlElement private String changefreq = "daily"; @XmlElement private String priority; public XmlUrl() { } public XmlUrl(String loc, Priority priority) { this.loc = loc; this.priority = priority.getValue(); } public String getLoc() { return loc; } public String getPriority() { return priority; } public String getChangefreq() { return changefreq; } public String getLastmod() { return lastmod; } } 

XmlUrlSet.java

 @XmlAccessorType(value = XmlAccessType.NONE) @XmlRootElement(name = "urlset", namespace = "http://www.sitemaps.org/schemas/sitemap/0.9") public class XmlUrlSet { @XmlElements({@XmlElement(name = "url", type = XmlUrl.class)}) private Collection xmlUrls = new ArrayList(); public void addUrl(XmlUrl xmlUrl) { xmlUrls.add(xmlUrl); } public Collection getXmlUrls() { return xmlUrls; } } 

对于robots.txt,它看起来像下面的内容,显然,你需要根据你的喜好配置它: –

RobotsController.java

 @Controller public class RobotsController { @RequestMapping(value = "/robots.txt", method = RequestMethod.GET) public String getRobots(HttpServletRequest request) { return (Arrays.asList("mysite.com", "www.mysite.com").contains(request.getServerName())) ? "robotsAllowed" : "robotsDisallowed"; } }