我试图使用sitemapgen4j库来构建我的Sitemaps。 我现在面临一个权限问题,而试图写信给我的根目录
https://code.google.com/p/sitemapgen4j/
根上下文文件夹(/ SRC /主/ web应用)
例外
Problem writing sitemap file /sitemap.xml
java.io.FileNotFoundException
/sitemap.xml (Permission denied)
码
File directory = new File("/");
WebSitemapGenerator wsg = new WebSitemapGenerator("http://localhost:8080/app", directory);
有谁知道如何去这样做呢?
我创建一个临时目录来存放在站点地图文件(S),然后生成它的第一次请求和服务于同一版本的所有后续请求,因为在我的应用程序中的数据,一旦它开始不会改变。
使用临时目录的好处是,你一定能够写它(至少我是这么认为的)。
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.nio.charset.Charset;
import java.io.BufferedReader;
private Path sitemapDirectory;
@RequestMapping("/sitemap.xml")
public void sitemap(HttpServletResponse response) throws IOException {
PrintWriter w = response.getWriter();
boolean isSitemapAlreadyCreated = sitemapDirectory != null;
if (isSitemapAlreadyCreated) {
pipeSitemapToResponse(w);
return;
}
sitemapDirectory = Files.createTempDirectory("mySitemap");
WebSitemapGenerator wsg = new WebSitemapGenerator("http://localhost:8080/app", sitemapDirectory.toFile());
wsg.addUrl("http://localhost:8080/app/home");
wsg.write();
pipeSitemapToResponse(w);
}
private void pipeSitemapToResponse(PrintWriter w) {
Path sitemap = Paths.get(sitemapDir.toString(), "sitemap.xml");
Charset charset = Charset.forName("UTF-8");
try (BufferedReader reader = Files.newBufferedReader(sitemap, charset)) {
String line = null;
while ((line = reader.readLine()) != null) {
w.write(line);
}
} catch (IOException e) {
logger.error("Failed to read the sitemap file.", e);
}
}
该解决方案使用Spring请求映射。 它还预计,sitemap文件为写出来sitemap.xml
,它会除非你有> 5万项,然后你需要阅读sitemapgen4j DOCO有关处理索引文件和适应这个例子。