我有一个网站,提供每20分钟更新一次的新闻。我想动态制作sitemap.xml。
如果我有静态文件,我应该定期更新。这是创建jsp文件夹并将其映射为" sitemap_x.xml&#34 ;;的正确方法吗?从我的数据库中获取数据并将其打印为XML格式。
我的意思是:
search_engine_bot - > sitemap.xml - > sitemap_x.xml - > xmlgenerator.jsp - >
out.println("<url><loc>myurl.com/content--42924</loc></url>");
我很快就会有500k新闻,所以我不想将它们作为xml保存在DB和文件中。
有什么想法吗?
答案 0 :(得分:1)
我遇到了同样的问题。我通过servlet解决了它,它有注释 @WebServlet(“/ sitemap.xml”)。因此,在请求http://your-site.com/sitemap.xml时,servlet以XML格式生成响应。内部XML是数据库中的链接。 像这样:
的servlet:
RequestDispatcher dispatcher = request.getRequestDispatcher("/jsp/site_map.jsp");
links = getLinksFromDatabase();
request.setAttribute("baseUrl", baseUrl);
request.setAttribute("links", links);
dispatcher.forward(request, response);
site_map.jsp:
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<?xml version="1.0" encoding="UTF-8"?>
<urlset
xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.sitemaps.org/schemas/sitemap/0.9
http://www.sitemaps.org/schemas/sitemap/0.9/sitemap.xsd">
<c:forEach items="${links}" var="link">
<url>
<loc><c:out value="${baseUrl}" />/<c:out value="${link}" /></loc>
</url>
</c:forEach>
</urlset>