启动Tomcat时加载Java类
我试图在tomcat上运行项目后立即读取java类,但我得到java类错误NotFound异常
<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE web-app
PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd">
<web-app>
<listener>
<listener-class>
Bot.CarregarBot
</listener-class>
</listener>
</web-app>
运行项目时要加载的类是Bot。卡雷加波特班
运行项目并启动服务器时,出现以下错误:
GRAVE: Error configuring application listener of class [Bot.CarregarBot]
java.lang.ClassNotFoundException: Bot.CarregarBot
at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1365)
at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1188)
at org.apache.catalina.core.DefaultInstanceManager.loadClass(DefaultInstanceManager.java:540)
at org.apache.catalina.core.DefaultInstanceManager.loadClassMaybePrivileged(DefaultInstanceManager.java:521)
at org.apache.catalina.core.DefaultInstanceManager.newInstance(DefaultInstanceManager.java:150)
at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4607)
at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5146)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1384)
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1374)
at java.util.concurrent.FutureTask.run(Unknown Source)
at org.apache.tomcat.util.threads.InlineExecutorService.execute(InlineExecutorService.java:75)
at java.util.concurrent.AbstractExecutorService.submit(Unknown Source)
at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:909)
at org.apache.catalina.core.StandardHost.startInternal(StandardHost.java:841)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1384)
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1374)
at java.util.concurrent.FutureTask.run(Unknown Source)
at org.apache.tomcat.util.threads.InlineExecutorService.execute(InlineExecutorService.java:75)
at java.util.concurrent.AbstractExecutorService.submit(Unknown Source)
at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:909)
at org.apache.catalina.core.StandardEngine.startInternal(StandardEngine.java:262)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)
卡雷加波特班。爪哇
package Bot;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
public class CarregarBot implements ServletContextListener {
String action;
String requestA;
String responseA;
org.alicebot.ab.Bot bot;
@Override
public void contextInitialized(ServletContextEvent servletContextEvent) {
System.out.println("Starting up!");
org.alicebot.ab.MagicStrings.setRootPath();
org.alicebot.ab.AIMLProcessor.extension = new org.alicebot.ab.PCAIMLProcessorExtension();
String botName = "alice2";
action = "chat";
bot = new org.alicebot.ab.Bot(botName, org.alicebot.ab.MagicStrings.root_path, action);
System.out.println("--- Carregou Classe ---");
}
@Override
public void contextDestroyed(ServletContextEvent servletContextEvent) {
System.out.println("Shutting down!");
}
}
# 1 楼答案
通常在一个典型的java web应用程序(war)结构中——编译的类文件应该最终保存在
WEB-INF/classes
文件夹中(除非它们可以作为jar存档,否则它们也可以保存在web-INF/lib中)。因此,尝试将项目的构建路径更改为<your-project>/WebContent/WEB-INF/classes
。您可以参考下面附带的屏幕截图 下面是我尝试使用的类,以及启动服务器时控制台上的输出控制台输出
# 2 楼答案
好的,所以你的代码看起来都很好(很好,运行良好),没有问题。 我99%确信这不是代码问题,而是构建/部署问题
我建议你做以下事情:
0)如果您使用Maven并具有servlet api依赖关系,请检查servlet api依赖范围(如果您更改了任何内容,请从Maven上下文菜单执行项目更新),否则请确保检查导出和部署程序集
1)清理项目(在eclipse项目中->;清理)
2)清理tomcat工作目录并部署和/或重新部署(或启动一个全新的tomcat实例)
3)如果仍然不起作用,请尝试打开war文件(或者如果从eclipse部署,请转到Tomcat work dir并导航到侦听器应该位于的文件夹),并检查它是否确实在那里
4)如果没有,请查看是否可以在问题视图中找到任何问题,以了解它为什么没有被构建
5)如果问题仍然存在,请按照@Shailendra和重做步骤1-4所述检查类输出文件夹的设置