2012-09-05 13 views
15

के साथ साइटमैप.एक्सएमएल और robots.txt की सेवा sitemap.xml और robots.txt सर्वर Spring MVC के साथ सबसे अच्छा तरीका क्या है? मैं इन फ़ाइलों को Controller के माध्यम से स्वच्छ तरीके से सर्वर चाहता हूं।स्प्रिंग एमवीसी

उत्तर

25

मैं अपने लिए 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<XmlUrl> xmlUrls = new ArrayList<XmlUrl>(); 

    public void addUrl(XmlUrl xmlUrl) { 
     xmlUrls.add(xmlUrl); 
    } 

    public Collection<XmlUrl> 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"; 
    } 
} 
+0

अच्छा जवाब के लिए धन्यवाद मैं एक सवाल को बंद देखने के लिए कि और अधिक लोगों को योगदान देगा ... –

+6

तुम्हें यकीन इन नियंत्रक तरीकों भारी कैश नहीं किया जाता करने की आवश्यकता होगी के साथ थोड़ा सा इंतजार करेंगे। आम तौर पर इन अनुरोधों को ऐप सर्वर को भी हिट नहीं करना चाहिए, इसके बजाय अपाचे द्वारा स्थिर सामग्री के रूप में कार्य किया जाता है .. – Solubris

+0

@ लिथियम भी अच्छा विचार है कि आप इसे चैट के बजाय उत्तर के रूप में रख सकते हैं। वैसे भी मुझे अपने sitemap.xml गतिशील रूप से बनाया गया है लेकिन रोबोट के लिए जो आवश्यक से अधिक होना चाहिए। –

संबंधित मुद्दे