Was ist der beste Weg zum Server sitemap.xml
und robots.txt
mit Spring MVC
? Ich möchte Server diese Dateien durch Controller
in sauberster Weise.Serving sitemap.xml und robots.txt mit Spring MVC
15
A
Antwort
25
Ich verlasse mich auf JAXB, um die sitemap.xml für mich zu generieren.
Mein Controller sieht so etwas wie die unten, und ich habe einige Datenbanktabellen den Überblick über die Links zu halten, die ich in der Sitemap angezeigt werden soll: -
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;
}
}
Für die robots.txt, sieht es so etwas wie die unten, und natürlich, Sie müssen es so konfigurieren, basierend auf Ihren Vorlieben: -
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";
}
}
Dank für die nette Antwort werde ich wenig warten mit einer Frage zu schließen, wenn mehr Menschen beitragen zu sehen ... –
Sie werden diese Controller-Methoden sicher sind stark im Cache vornehmen müssen. Normalerweise sollten diese Anfragen nicht einmal den App-Server treffen, sondern als statischer Inhalt von Apache gedient werden. – Solubris
@Lithium Auch gute Idee, Sie können es als Antwort statt Chat platzieren. Anyway ich brauche meine sitemap.xml dynamisch erstellt aber für Roboter die mehr als nötig sein sollten. –