我尝试使用sitemapgen4j库来构建我的站点地图。我在尝试写入根目录时面临权限问题
https://code.google.com/p/sitemapgen4j/
根上下文文件夹(/ src / main / webapp)
异常
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);
有人知道怎么做吗?
答案 0 :(得分:1)
我创建了一个临时目录来存储站点地图文件,然后在第一次请求时生成它,并为所有后续请求提供相同的版本,因为我的应用程序中的数据一旦发生就不会改变#39 ; 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.xml
,除非您有> 50k条目,否则您需要阅读有关处理索引文件的sitemapgen4j doco并调整此示例。< / p>