我的jsp文件为:counter.jsp
<%@ page contentType="text/html;charset=gb2312"%>
<HTML>
<HEAD>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<TITLE>
计数器演示程序
</TITLE>
</HEAD>
<BODY>
<!--创建并调用Bean(counter)-->
<JSP:useBean id="counter" class="counter.counter" scope="request">
</JSP:useBean>
<%
String txtPath;
//获取绝对路径
txtPath=request.getRealPath("counter.txt");
//调用counter对象的ReadFile方法来读取文件counter.txt中的计数
String count=counter.ReadFile(txtPath);
//实现同步
synchronized(txtPath)
{
//调用counter对象的ReadFile方法来将计数器加一后写入到文件counter.txt中
counter.WriteFile(txtPath,count);
}
%>
您是第<font color="red"><b><%=count%></b></font>位访问者
</BODY>
</HTML>
javabean 文件为:counter.java
package counter;
import java.io.*;
public class counter
{
//保存文本的变量
private String currentRecord = null;
//BufferedReader对象,用于读取文件数据
private BufferedReader file;
//文件完整路径名
private String path;
public counter() {
}
//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());
}
}
}
counter.jsp 的路径为:D:\Apache Tomcat 4.0\webapps\examples\jsp\counter\counter.jsp
counter.class 的路径为:D:\Apache Tomcat 4.0\webapps\examples\WEB-INF\classes\counter\counter.class
但运行后出现这样的错误:
org.apache.jasper.JasperException: Unable to compile class for JSPNote: sun.tools.javac.Main has been deprecated.
An error occurred between lines: 14 and 26 in the jsp file: /jsp/counter/counter.jsp
Generated servlet error:
D:\Apache Tomcat 4.0\work\Standalone\localhost\_\jsp\counter\counter$jsp.java:63: Undefined variable or class name: counter
String count=counter.ReadFile(txtPath);
^
An error occurred between lines: 14 and 26 in the jsp file: /jsp/counter/counter.jsp
Generated servlet error:
D:\Apache Tomcat 4.0\work\Standalone\localhost\_\jsp\counter\counter$jsp.java:68: Undefined variable or class name: counter
counter.WriteFile(txtPath,count);
^
Note: D:\Apache Tomcat 4.0\work\Standalone\localhost\_\jsp\counter\counter$jsp.java uses or overrides a deprecated API. Recompile with "-deprecation" for details.
2 errors, 2 warnings
at org.apache.jasper.compiler.Compiler.compile(Compiler.java:285)
at org.apache.jasper.servlet.JspServlet.loadJSP(JspServlet.java:548)
at org.apache.jasper.servlet.JspServlet$JspServletWrapper.loadIfNecessary(JspServlet.java:176)
at org.apache.jasper.servlet.JspServlet$JspServletWrapper.service(JspServlet.java:188)
at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:381)
at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:473)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:247)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:193)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:243)
at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:566)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:472)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:943)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:190)
at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:566)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:475)
at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:564)
at org.apache.catalina.valves.CertificatesValve.invoke(CertificatesValve.java:246)
at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:564)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:472)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:943)
at org.apache.catalina.core.StandardContext.invoke(StandardContext.java:2347)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:180)
at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:566)
at org.apache.catalina.valves.ErrorDispatcherValve.invoke(ErrorDispatcherValve.java:170)
at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:564)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:170)
at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:564)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:468)
at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:564)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:472)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:943)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:174)
at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:566)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:472)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:943)
at org.apache.catalina.connector.http.HttpProcessor.process(HttpProcessor.java:1027)
at org.apache.catalina.connector.http.HttpProcessor.run(HttpProcessor.java:1125)
at java.lang.Thread.run(Thread.java:536)
这是为什么?
帮帮我吧!
<JSP:useBean id="counter" class="counter.counter" scope="request">
</JSP:useBean>
改成:
<jsp:useBean id="counter" class="counter.counter" scope="request">
</jsp:useBean>
<jsp:useBean id="counter" class="counter.counter" scope="page"/>
<%@ page contentType="text/html;charset=gb2312"%>
<jsp:useBean id="counter" class="counter.counter" scope="page"/>
<HTML>
<HEAD>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<TITLE>
计数器演示程序
</TITLE>
</HEAD>
<BODY>
<!--创建并调用Bean(counter)-->
<%
String txtPath;
//获取绝对路径
txtPath=request.getRealPath("counter.txt");
//调用counter对象的ReadFile方法来读取文件counter.txt中的计数
String count=counter.ReadFile(txtPath);
//实现同步
synchronized(txtPath)
{
//调用counter对象的ReadFile方法来将计数器加一后写入到文件counter.txt中
counter.WriteFile(txtPath,count);
}
%>
您是第<font color="red"><b><%=count%></b></font>位访问者
</BODY>
</HTML>