2012-09-05 17 views

Trả lời

25

Tôi đang dựa vào JAXB để tạo sitemap.xml cho tôi.

điều khiển của tôi trông giống như dưới đây, và tôi có một số bảng cơ sở dữ liệu để theo dõi các liên kết mà tôi muốn xuất hiện trong sitemap: -

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

Đối với robots.txt, nó trông giống như dưới đây, và rõ ràng, bạn sẽ cần phải cấu hình nó dựa trên sở thích của bạn: -

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

Cảm ơn cho câu trả lời tốt đẹp tôi sẽ đợi chút với đóng cửa một câu hỏi để xem nếu có nhiều người sẽ góp phần ... –

+6

Bạn sẽ cần phải chắc chắn những phương pháp điều khiển đang lưu trữ rất nhiều. Thông thường, những yêu cầu này thậm chí không nên nhấn vào máy chủ ứng dụng, thay vào đó được dùng làm nội dung tĩnh bởi apache .. – Solubris

+0

@Lithium Bạn cũng có thể đặt nó làm câu trả lời thay vì trò chuyện. Dù sao tôi cần sitemap.xml của tôi được tạo động nhưng đối với những robot cần nhiều hơn mức cần thiết. –