java文件操作-简单网页计数器遇到的问题

原创 2018年04月17日 20:20:18

1.service方法重写后,不会执行doget/dopost方法

2.this.getServletContext().getRealPath("/WEB-INF/count.txt");会有平台差异,不建议使用

3.BufferedReader的mark,reset方法结合使用,可重新回到mark下一行重新读文件(好像要在执行reader)

4.OutputStreamWriter osw = new OutputStreamWriter(fos,"UTF-8");设置编码防止乱码

5.代码76行out.write(c.getCount()+"");getCount()返回int型,没加""转为String时一直写入读出错误,这个真的是巨坑,但也是自己基础不扎实罗。

6.文件writer要正确close才能关闭,close有flush的作用。

7. 实际项目部署在workspace\.metadata\.plugins\org.eclipse.wst.server.core\tmp1\wtpwebapps\WebTest目录下,所以destory方法修改文件后,eclipse里的count.txt未改变

参见:https://blog.csdn.net/u010089444/article/details/53281513 等博客



import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;


import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;


import bean.Counter;


/**
 * Servlet implementation class CounterServlet
 */
@WebServlet("/CounterServlet")
public class CounterServlet extends HttpServlet {
private static final long serialVersionUID = 1L;


/**
* @see HttpServlet#HttpServlet()
*/
public CounterServlet() {
super();
}


/**
* @see Servlet#init(ServletConfig)
*/
public void init(ServletConfig config) throws ServletException {
super.init(config);
String path = this.getServletContext().getRealPath("/WEB-INF/count.txt");
try {
File file=new File(path);
FileInputStream fis=new FileInputStream(file);
InputStreamReader isr=new InputStreamReader(fis,"UTF-8");
BufferedReader in = new BufferedReader(isr);
in.mark(100000000);
String count=in.readLine();
in.reset();
in.close();
isr.close();
fis.close();
//System.out.println(count);
if(count!=null&&!count.equals("")){
Counter c=new Counter(Integer.parseInt(count));
System.out.println("容器初始化CounterServlet时从count.txt中读入的值:" + c.getCount());
this.getServletContext().setAttribute("count",c.getCount()+"");
}

catch (Exception e) {
e.printStackTrace();
}
}


/**
* @see Servlet#destroy()
*/
public void destroy() {
String path = this.getServletContext().getRealPath("/WEB-INF/count.txt");
try {
File file=new File(path);
FileOutputStream fos=new FileOutputStream(file,false);
OutputStreamWriter osw = new OutputStreamWriter(fos,"UTF-8");
BufferedWriter out = new BufferedWriter(osw);
String count = (String) this.getServletContext().getAttribute("count");
if(count!=null&&!count.equals("")){
Counter c=new Counter(Integer.parseInt(count));
out.write(c.getCount()+"");
System.out.println("执行destroy方法,将count写入count.txt,值为:" + c.getCount());
}
fos.flush();
osw.flush();
out.flush();
out.close();
osw.close();
fos.close();
} catch (IOException e) {
e.printStackTrace();
}
}
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse
*      response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String count=(String) this.getServletContext().getAttribute("count");
if(count!=null&&!count.equals("")){
Counter c=new Counter(Integer.parseInt(count)+1);
this.getServletContext().setAttribute("count",c.getCount()+"");
System.out.println("访问一次页面后count值:" + c.getCount());
}
}


/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse
*      response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request, response);
}


}

一个简单的网页计数器

今天写了一个最简单的计数器,实现的功能很简单,可以记录总访问数及今日访问数。代码如下: 复制  保存// ***********************************************...
  • lingfeng0626
  • lingfeng0626
  • 2008-04-03 23:03:00
  • 1095

最简单的ASP网页计数器源代码

说明:1、在网站目录下新建一个文本:txtcounter.txt 在文本填写1或其他识字2、新建一asp文件:count.asp,加入以下代码:...
  • yxwmzouzou
  • yxwmzouzou
  • 2011-03-15 20:58:00
  • 3374

application实现一个简单的网页计数器

application(应用对象):存活范围最大的对象,只要服务器没有关闭,application对象中的数据就会一直存在。在整个服务器运行过程中,application对象只有一个request、s...
  • sunshine940326
  • sunshine940326
  • 2015-07-09 23:15:45
  • 4055

初学JSP,写了一个简单页面访问计数器

只是初步了解了JSP的九大对象,像ASP那样简单的页面程序找找资料写出来应该没问题了,但有一个问题一直困惑着我,那就是怎么部署javabean?下午又要见导师,今天晚上找找资料研究个明白,下面的简单程...
  • CiTiHunTerX
  • CiTiHunTerX
  • 2006-01-03 00:30:00
  • 4247

JSP简单练习-一个简单的计数器

在JSP中,在""之间书写的程序代码成为java程序片。 一个JSP页面中可以有多个java程序片。要注意的是,在Java程序片中声明的变量在它们所在JSP页面的所用程序片及表达式中都有效。基于此,...
  • u012804490
  • u012804490
  • 2014-07-14 19:19:07
  • 1479

三个使用计数器实现的问题

package com.oec.utils; /**主线程挂起,作为守护线程。线程池里,每当一个线程结束后,计数器减一。当线程池里所有线程都结束后,通知主线程,使得主线程可以继续。  * ...
  • qq_26562641
  • qq_26562641
  • 2017-02-15 17:51:17
  • 187

Web访问计数器

Web访问计数器 1.首先新建一个Counter类 public class Counter {     private int count;       public Counter...
  • tianmaxingkong_
  • tianmaxingkong_
  • 2015-05-23 23:21:49
  • 1426

jsp实现网站计数器

我的第一个JSP页面                int number=0;        synchronized(application)        {         ...
  • pangqiandou
  • pangqiandou
  • 2016-10-16 21:43:06
  • 2124

练习--JSP简易网页计数器

简易网页计数器 appli.jsp Insert title here 网页计数器
  • zc527
  • zc527
  • 2015-02-15 18:10:55
  • 284

使用application内置对象做一个简单的网页访问计数器

jsp的9大内置对象:out、request、response、session、application、exception、page、pageContext和config,今天就说说如何用applic...
  • luqiren
  • luqiren
  • 2017-08-21 11:26:19
  • 474
收藏助手
不良信息举报
您举报文章:java文件操作-简单网页计数器遇到的问题
举报原因:
原因补充:

(最多只允许输入30个字)