在Web应用程序中写入WebContent / file.json而不使用绝对路径

时间:2016-04-06 23:32:16

标签: java json eclipse tomcat servlets

我使用java在eclipse中使用java进行动态Web项目(servlet,jsp,css,html和json文件)。为了运行它,我使用与eclipse链接的Tomcat。

浏览器可以使用以下代码获取file.json:

`$.get("file.json", function( data ){...}

file.json保留在WebContent中:

WebContent/file.json

动态Web项目必须将新信息保存在同一文件中(WebContent / file.json)。

对我来说,不可能使用绝对路径,因为我必须将它导出为.war并且我有必要将它(项目.war)提供给其他人和它(.war)必须在没有手动配置的另一个操作系统中工作。我不可能设置eclipse和/或Tomcat,因为我无法访问其他人'系统

我尝试使用相对路径,但新信息已保存在Tomcat的临时文件中。

我还尝试使用没有普通类的servlet来保存file.json但是没有用。新信息再次写入tomcat的临时文件中。

此外,有时Web应用程序会重新加载该文件。它无法重新加载临时文件,但必须重新加载WebContent / file.json。

我还注意到,当我关闭tomcat时,文件会保留在临时文件夹中,并且WebContent中的文件不会被保存。这会导致数据不一致。

我的问题是:我可以通过哪种方式将file.json写入此位置(WebContent / file.json)?

我正在使用的代码:

 protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // TODO Auto-generated method stub
        System.out.println("doPost() from SaverServlet with parameter: "+request.getParameter("stringParameter"));
        ServletContext sc = request.getSession().getServletContext();

        String relativePath = "testJson.txt";
        String absolutePath = "/Use

rs/Dog/DynamicProject/WebContent/Database/Events.jsonEvents.json";
            String filePath = sc.getRealPath(relativePath);

            System.out.println("The path is: "+absolutePath);

    File file = new File(absolutePath);
    String content = request.getParameter("stringParameter");

    try (FileOutputStream fop = new FileOutputStream(file)) {
        System.out.println("tentativo di accedere al file");
        // if file doesn't exists, then create it
        if (!file.exists()) {
            System.out.println("il file non esiste, creazione del file...");
            file.createNewFile();
            System.out.println("File created");
        }

        System.out.println("Write on the file");

        // get the content in bytes
        byte[] contentInBytes = content.getBytes();

        fop.write(contentInBytes);
        fop.flush();
        fop.close();

        System.out.println("Done");

    } catch (IOException e) {
        e.printStackTrace();
    }

}

}

但代码打印使用绝对路径:

Users/Dog/DynamicProject/WebContent/Database/Events.jsonEvents.json

此servlet已通过此JavaScript代码调用:

function  saveEvents(events){
    $.ajax(
            {
                cache: false,
                url: 'SaverServlet',
                type: 'POST',
                data: 'stringParameter='+events,
                processData: false,
                //dataType: "json",
                success: function () {
                   // alert("ajax success");
                },
                error: function () {
                    debugger;
                    //alert("ajax failure");
                }

            })

0 个答案:

没有答案