java spring spring-mvc sitemap robots.txt

java - Sirviendo sitemap.xml y robots.txt con Spring MVC



spring-mvc (1)

Estoy confiando en JAXB para generar el sitemap.xml para mí.

Mi controlador tiene un aspecto similar al siguiente, y tengo algunas tablas de base de datos para realizar un seguimiento de los enlaces que quiero que aparezcan en el mapa del sitio:

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<XmlUrl> xmlUrls = new ArrayList<XmlUrl>(); public void addUrl(XmlUrl xmlUrl) { xmlUrls.add(xmlUrl); } public Collection<XmlUrl> getXmlUrls() { return xmlUrls; } }

Para el archivo robots.txt, se parece a lo que se muestra a continuación, y obviamente, deberá configurarlo en función de sus gustos:

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"; } }

¿Cuál es la mejor forma de servidor sitemap.xml y robots.txt con Spring MVC ? Quiero servidor de estos archivos a través del Controller de forma más limpia.