[英]Files' structure in netbeans using GlassFish
我使用netbeans 8和GlassFish Server學習了jsp。 我有MyLog.java
package MyClass;
import java.util.Date;
import java.text.SimpleDateFormat;
import java.io.FileWriter;
import java.io.PrintWriter;
import java.io.IOException;
public class MyLog {
private static final SimpleDateFormat TIME_FMT= new SimpleDateFormat("yyyy-MM-dd HH:mm:ss:SSS");
private static PrintWriter log=null;
public MyLog(String logpath) throws IOException{
log=new PrintWriter(new FileWriter(logpath,true));
}
public static synchronized void println(String s)
{
log.println(TIME_FMT.format(new java.util.Date())+" - "+s);
log.flush();
}
public static synchronized void close(){
log.close();
}
}
我的課堂用法是
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<%@page import="MyClass.*" %>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Switch the log ON</title>
</head>
<body>
<%
MyLog log =(MyLog) application.getAttribute("logfile");
if (log==null)
{
try{
log=new MyLog("log/mylog.log");
application.setAttribute("logfile", log);
log.println("Logging enabled");
out.println("Logging enabled");
}
catch (Exception e) {
out.println(e.getMessage());
}
}
else
{
log.println("Attempt to enable logging");
out.println("Logging was already enabled");
}
%>
</body>
</html>
所以我得到找不到文件“ log / mylog.log”的錯誤。
我在Web文件夾甚至應用程序文件夾中創建了log / mylog.log(帶有目錄),但是找不到該文件。
我嘗試使用
新文件(filename).exists()調試到我現有的文件中,但始終為false。
所以我的問題是,我應該在哪里放置文件以便Netbeans(或glassfish)可以找到它?
查找始終在當前工作目錄中完成 ,一旦將應用程序部署到容器中,該目錄就取決於目標應用程序服務器。 但是,即使找到了,您也確實不能依靠它,否則您的應用程序將不再具有可移植性。
因此,您可以將log
目錄移動到Web應用程序的WEB_INF
目錄中,並在運行時通過ServletContext
訪問絕對目錄位置,例如
log = new MyLog(application.getRealPath("/WEB-INF/log/mylog.log"));
警告: 您必須將log
目錄存儲在WEB-INF
否則可以通過瀏覽器訪問它們,以查看整個萬維網。
如果您不希望日志文件進入Web應用程序的目錄內,或者該服務器上所有日志的其他中央位置,則另一種替代方法是在web.xml
配置您要用作上下文參數的任何絕對目錄位置。
<web-app>
...
<context-param>
<param-name>LogPath</param-name>
<param-value>/absolute/log/dir/path/file.log</param-value>
</context-param>
然后可以再次通過ServletContext
訪問該值。
log = new MyLog(application.getInitParam("LogPath"));
對於臨時日志記錄,另一種選擇是僅使用容器已實現的Servlet規范隨附的日志記錄功能。 以下內容將錯誤消息和相關異常的堆棧跟蹤記錄到日志文件,其名稱和位置取決於您的servlet容器,但可在其文檔中找到。
application.log("Error message", throwable);
在Tomcat上,默認情況下,日志應轉到${TOMCAT_HOME}/logs/catalina.out
。
這樣就沒有虛擬路徑。 兩條路徑都是相對的。 使用getRealPath()
您只是在解決Web應用程序根目錄中的相對性 (如果是一個詞)。 通過您的方法,相對路徑也得到了解決,但是針對您的應用服務器的當前工作目錄 。 只是您無法找到它的位置。 它不是固定位置,並且會隨不同的應用服務器或同一服務器的不同版本而變化。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.