Java 从Servlet写入文件
下面是我写的一段代码:Java 从Servlet写入文件,java,xml,servlets,Java,Xml,Servlets,下面是我写的一段代码: public class ServletCounter extends HttpServlet { private final Object lock = new Object(); private int serviceCounter = 0; private FileOutputStream out; private boolean shuttingDown; @Override public void init(
public class ServletCounter extends HttpServlet {
private final Object lock = new Object();
private int serviceCounter = 0;
private FileOutputStream out;
private boolean shuttingDown;
@Override
public void init(ServletConfig servletConfig) throws ServletException {
super.init(servletConfig);
}
@Override
protected void service(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws ServletException, IOException {
enteringServiceMethod();
try {
super.service(httpServletRequest, httpServletResponse);
out = new FileOutputStream("C:\\xampp\\tomcat\\webapps\\myapp\\WEB-INF\\lib\\counter.txt");
} catch (FileNotFoundException e) {
e.printStackTrace();
}
}
@Override
protected void doGet(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws ServletException, IOException {
if (!shuttingDown) {
writeToFile("number of servlet access = " + serviceCounter );
}
}
@Override
public void destroy() {
...
}
private void enteringServiceMethod() {
synchronized (lock) {
serviceCounter++;
writeToFile("method enteringServiceMethod serviceCounter = " + serviceCounter);
}
}
private int getNumServices() {
synchronized (lock) {
return serviceCounter;
}
}
private void writeToFile(String text) {
System.out.println(text);
text += "\r\n";
try {
out.write(text.getBytes());
} catch (IOException e) {
e.printStackTrace();
}
}
}
我需要的是,每次有人打开我的Servlet时,它都应该打开“counter.txt”文件并存储Servlet被打开的次数。例如,如果文件保留数字8,那么在有人访问servlet之后,它应该存储数字9并删除数字8。这有意义吗?有人能帮我重写writeToFile方法吗。我写的代码不完整,但我被卡住了,尝试了几件事,但似乎都不起作用。如果你想计算页面命中率,那么
过滤器将是不错的方法
截取每个请求并在应用程序范围内获取一个同步的
变量并增加它hmmm,我想我不知道该怎么做。我尝试过使用过滤器,但我的writetoFile方法有问题。它确实可以编译,但在运行时,当我启动servlet时,它会抛出异常,我看不到它在工作。但是为什么要在每个请求中写入文件,您可以在内存中管理它,并且可能在某个时间间隔您可以将它写入文件/DBWell这就是我被要求做的:每次有权访问ServletConret,应该打开文件,记下条目数并关闭文件。如果您想这样做,请使用同步方法,它应该可以工作,如果不适合您,请告诉我们异常stacktrace hereexception`java.lang.NullPointerException ServletCounter.writeToFile(ServletCounter.java:80)ServletCounter.enteringServiceMethod(ServletCounter.java:67)ServletCounter.service(ServletCounter.java:25)javax.servlet.http.HttpServlet.service(HttpServlet.java:722)`。我认为直接编写不是一个好主意,因为您必须处理并发执行(在最好的情况下会延迟回答时间,在最坏的情况下会导致无效值)。发生这种情况时,请将消息放入队列,让单个实例处理消息并更新值。