我刚开始学习JSP,现在运行书上的一个防刷新计数器,包含Anti-refreshcount.jsp和counter.java,代码我基本上能看懂,只是其中提到的文件count.txt是应该自己新建吗?如果是这样的话,那应该放在什么位置在可以呢?谢谢哦
代码如下:
1、Anti-refreshcount.jsp的代码
<%@ page contentType="text/html; charset=GB2312" %>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html;charset=gb2312">
<meta name="GENERATOR" content="Oracle JDeveloper">
<title>
防刷新计数器
</title>
</head>
<body bgcolor="#ffffff">
<!--创建并调用bean(counter)-->
<jsp:useBean id="counter" class="counter" scope="request">
</jsp:useBean>
<%
//调用counter对象的ReadFile方法来读取文件count.txt中的计数
String cont=counter.ReadFile("/count.txt");
//调用counter对象的ReadFile方法来将计数器加一后写入到文件count.txt中
counter.WriteFile("/count.txt",cont);%>
防刷新计数器<br>
您是第<%=cont%>位访问者
</body>
</html>
2、counter.java的代码
import java.io.*;
public class counter extends Object{
private String currentRecord=null;//保存文本的变量
private BufferedReader file; //BufferedReader对象,用于读取文件数据
private String path;//文件完整路径名
public counter() {
try {
jbInit();
} catch (Exception ex) {
ex.printStackTrace();
}
}
//ReadFile方法用来读取文件filePath中的数据,并返回这个数据
public String ReadFile(String filePath) throws FileNotFoundException
{
path = filePath;
//创建新的BufferedReader对象
file=new BufferedReader(new FileReader(path));
String returnStr=null;
try{
//读取一行数据保存到currentRecord变量中
currentRecord=file.readLine();
}
catch(IOException e)
{//错误处理
System.out.println("读取数据错误.");
}
if(currentRecord==null)
//如果文件为空
returnStr="没有任何纪录";
else{
//文件不为空
returnStr=currentRecord;
}
//返回读取文件的数据
return returnStr;
}
//ReadFile方法涌来将数据counter+1后写入到文本文件filepath中
//以实现技术增长的功能
public void WriteFile(String filePath,String counter) throws FileNotFoundException{
path=filePath;
//将counter转换为int类型并加一
int Writestr=Integer.parseInt(counter)+1;
try{
//创建PrintWriter对象,用于写入数据到文件中
PrintWriter pw=new PrintWriter(new FileOutputStream(filePath));
//用文本格式打印整数Writestr
pw.println(Writestr);
//清除PrintWriter对象
pw.close();
}catch(IOException e){
//错误处理
System.out.println("写入文件错误"+e.getMessage());
}
}
private void jbInit() throws Exception {
}
}
----------------解决方案--------------------------------------------------------
counter.txt只是记录访问量,应该说放到那里都可以,只要路径设置的对,能够访问到就可以.不过最好放到jsp文件的同一目录下.
----------------解决方案--------------------------------------------------------
你的应用里的所有文件都可以随意放!但是你必须提供正确的路径给你的应用;
第一
<jsp:useBean id="counter" class="counter" scope="request">
</jsp:useBean>
中的type应该是包名加上这个类的类名;
第二
你的String cont=counter.ReadFile("/count.txt");
count.txt这个文件路径如果这样写的话,应用是找不它的,tomcat会报404的错误,你可以这样做
String cont=counter.ReadFile(request.getRealPath("/count.txt"));容器就可以找到这个文件了;
相应的都要改;
你所做的是防刷新计数器,但是好象这代码没起到这个作用;
----------------解决方案--------------------------------------------------------
没刷新一次就增加一次,这这么可以.
----------------解决方案--------------------------------------------------------
我把文件随便放,运行不成功,服务器提示说:Help viewer error URL: Unable to open location: Document not found on server
我按照yinhaofeng说的第二条,还是不行,系统提示说"Anti-refreshcount.jsp": [deprecation] getRealPath(java.lang.String) in javax.servlet.ServletRequest has been deprecated at line 0
There have been deprecation warnings. Please consult the documentation for a better alternative.
到底为什么呀?
谢谢!
----------------解决方案--------------------------------------------------------
当然不能文件随便放,你真搞笑,TOMCAT有那么聪明吗?你随便放它也能找到?
你应该放在你的工程的根目录下
----------------解决方案--------------------------------------------------------
我都试过了,把它放在WEB-INF下,还是不行呀,晕了
----------------解决方案--------------------------------------------------------