源码是:
<html>
<head><title>一个useBean动作的例子</title>
</head>
<%@ page contentType="text/html;charset=GB2312" %>
<body>
<center>
<h2>这是一个使用useBean动作的例子</h2>
</center>
<jsp:useBean id="test" class="BeanExample.simpleBean" scope="page"/>
<% test.setString("This is a useBean Action example");%>
<p>
<h3>
<%=test.displayString()%></h3>
</body></html>
package BeanExample;
public class SimpleBean
{
String str=" ";
public SimpleBean()
{
str="This is the inital string";
}
public void setString(String str1)
{
str="hello!"+str1;
}
public String displayString()
{
return str;
}
}
我把编译后的class文件放在了tomcat4.1\webapps\ROOT\WEB-INF\classesBeanExample
jsp文件放在:tomcat4.1\webapps\ROOT
结果运行之后的错误为:HTTP Status 500 - --------------------------------------------------------------------------------type Exception reportmessage description The server encountered an internal error () that prevented it from fulfilling this request.exception org.apache.jasper.JasperException: Unable to compile class for JSPAn error occurred at line: 8 in the jsp file: /02_23.jspGenerated servlet error:
    [javac] Compiling 1 source fileD:\Tomcat 4.1\work\Standalone\localhost\_\_02_23_jsp.java:52: package BeanExample does not exist
      BeanExample.simpleBean test = null;
                 ^An error occurred at line: 8 in the jsp file: /02_23.jspGenerated servlet error:
D:\Tomcat 4.1\work\Standalone\localhost\_\_02_23_jsp.java:54: package BeanExample does not exist
        test = (BeanExample.simpleBean) pageContext.getAttribute("test", PageContext.PAGE_SCOPE);
                           ^An error occurred at line: 8 in the jsp file: /02_23.jspGenerated servlet error:
D:\Tomcat 4.1\work\Standalone\localhost\_\_02_23_jsp.java:57: package BeanExample does not exist
            test = (BeanExample.simpleBean) java.beans.Beans.instantiate(this.getClass().getClassLoader(), "BeanExample.simpleBean");
                               ^
3 errors
at org.apache.jasper.compiler.DefaultErrorHandler.javacError(DefaultErrorHandler.java:85)
at org.apache.jasper.compiler.ErrorDispatcher.javacError(ErrorDispatcher.java:248)
at org.apache.jasper.compiler.Compiler.generateClass(Compiler.java:315)
at org.apache.jasper.compiler.Compiler.compile(Compiler.java:328)
at org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:427)
at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:142)
at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:240)
at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:187)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:809)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:200)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:146)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:209)
at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:596)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:433)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:948)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:144)
at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:596)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:433)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:948)
at org.apache.catalina.core.StandardContext.invoke(StandardContext.java:2358)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:133)
at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:596)
at org.apache.catalina.valves.ErrorDispatcherValve.invoke(ErrorDispatcherValve.java:118)
at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:594)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:116)
at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:594)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:433)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:948)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:127)
at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:596)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:433)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:948)
at org.apache.coyote.tomcat4.CoyoteAdapter.service(CoyoteAdapter.java:152)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:799)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.processConnection(Http11Protocol.java:705)
at org.apache.tomcat.util.net.TcpWorkerThread.runIt(PoolTcpEndpoint.java:577)
at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:683)
at java.lang.Thread.run(Thread.java:534)--------------------------------------------------------------------------------

解决方案 »

  1.   

    这个问题,我已经解决了,程序本身没有错误,我重新启动了一下tomcat之后,就可以运行了,不过还想请教一下,是不像这样的程序都需要编译成class文件之后,再启动tomcat才能运行呢??
      

  2.   

    类名的大小写不对,在你的类的引用中的类名是小写,而包中的类名是大写,改后应该没有问题.BeanExample.simpleBean改为BeanExample.SimpleBean
      

  3.   

    是的,这一点我发现了,谢谢!
    那是不是像这样的程序都需要编译成class文件之后,再启动tomcat才能运行呢??
      

  4.   

    根据我的经验,servlet、class都要重启,好像他们在tomcat启动的时候就加载
      

  5.   

    TOMCAT打开,编译后刷新就可以阿
      

  6.   

    若把这个应用的reloadable改为true的话,那么编译后.class可以直接运行,无需重启动服务器,当若你修改了配置文件或加载了新的类,那你必须重新启动服务器!
      

  7.   

    类文件重新修改后,都要重新启动TOMCAT
    jsp就不用
      

  8.   

    类文件修改后,要重启动TOMCAT
      

  9.   

    真是悲哀,我可以肯定地告诉你们,是不需要重新启动的。
    这个说的是对的。
    回复人: liwenchao() ( ) 信誉:100  2005-11-17 21:45:00  得分: 0   
       若把这个应用的reloadable改为true的话,那么编译后.class可以直接运行,无需重启动服务器,当若你修改了配置文件或加载了新的类,那你必须重新启动服务器!(这个操作在admin程序中做,都是可视化的)难道各位在应用环境下,当更新的时候都要重起吗?用户的session不是都丢了吗?
    还有一个办法,在tomcat的manager中可以远程管理各个应用,点一下你那个应用的reload就可以了。不会影响其他的应用。(进入localhost:8080,点tomcat manager,在这里还可以监视tomcat性能)这也是我为什么讨厌这种一切都是配置文件的开发方式。因为它有很多的功能,可是很多人就是不知道。