使用 GlassFish 的 netbeans 中的文件结构
Files' structure in netbeans using GlassFish
我学习 jsp 使用 netbeans 8 和 GlassFish Server。我有 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();
}
}
我的 class 用法是
<%@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(带目录),但找不到该文件。
我尝试使用
new File (filename).exists () 正在调试我现有的文件,但它总是给出 false。
所以我的问题是,我应该将文件放在哪里以便 netbeans(或 glassfish)可以找到它?
查找始终在您的当前工作目录中完成,一旦您的应用程序部署在容器中取决于目标应用程序服务器。但是,即使找到了,您也不能完全依赖它,否则您的应用程序将不再具有便携性。
因此,您可以将 log
目录移动到 Web 应用程序的 WEB_INF
目录中,并在运行时通过 ServletContext
like
访问绝对目录位置
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()
你只是解决了 relativeness (如果这是一个词)对你的 web 应用程序的根目录。使用您的方法,相对路径也得到解决,但针对您的应用程序服务器的当前工作目录。只是你找不到它在哪里。它不是一个固定的位置,并且会随着不同的应用服务器甚至同一服务器的不同版本而变化。
我学习 jsp 使用 netbeans 8 和 GlassFish Server。我有 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();
}
}
我的 class 用法是
<%@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(带目录),但找不到该文件。
我尝试使用
new File (filename).exists () 正在调试我现有的文件,但它总是给出 false。
所以我的问题是,我应该将文件放在哪里以便 netbeans(或 glassfish)可以找到它?
查找始终在您的当前工作目录中完成,一旦您的应用程序部署在容器中取决于目标应用程序服务器。但是,即使找到了,您也不能完全依赖它,否则您的应用程序将不再具有便携性。
因此,您可以将 log
目录移动到 Web 应用程序的 WEB_INF
目录中,并在运行时通过 ServletContext
like
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()
你只是解决了 relativeness (如果这是一个词)对你的 web 应用程序的根目录。使用您的方法,相对路径也得到解决,但针对您的应用程序服务器的当前工作目录。只是你找不到它在哪里。它不是一个固定的位置,并且会随着不同的应用服务器甚至同一服务器的不同版本而变化。