写的sitemap.xml到Java Web应用程序根目录权限被拒绝(Write sitemap.x

2019-10-21 15:18发布

我试图使用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);

有谁知道如何去这样做呢?

Answer 1:

我创建一个临时目录来存放在站点地图文件(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有关处理索引文件和适应这个例子。



文章来源: Write sitemap.xml to java webapp root directory permission denied
标签: java tapestry