簡體   English   中英

使用GlassFish在netbeans中的文件結構

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM