我使用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");
}
})