启动Tomcat时加载Java类
我试图在tomcat上运行项目后立即读取java类,但我得到java类错误NotFound异常启动Tomcat时加载Java类,java,tomcat,tomcat9,Java,Tomcat,Tomcat9,我试图在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-a
<?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>
类CarregarBot.java
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!");
}
}
通常在一个典型的java web应用程序(war)结构中,编译的类文件应该在
web-INF/classes
文件夹中结束(除非它们可以作为jar存档,否则它们也可以在web-INF/lib中结束)。因此,请尝试将项目的构建路径更改为/WebContent/WEB-INF/classes
。您可以参考下面附带的屏幕截图
下面是我尝试使用的类和启动服务器时控制台上的输出
package Bot;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
/**
* Application Lifecycle Listener implementation class CarregarBot
*
*/
public class CarregarBot implements ServletContextListener {
@Override
public void contextInitialized(ServletContextEvent event) {
System.out.println("CarregarBot initialized");
}
@Override
public void contextDestroyed(ServletContextEvent event) {
}
}
控制台输出
Aug 27, 2019 1:22:47 AM org.apache.catalina.core.StandardContext reload
INFO: Reloading Context with name [/TestWebApp] has started
CarregarBot initialized
Aug 27, 2019 1:22:47 AM org.apache.catalina.core.StandardContext reload
INFO: Reloading Context with name [/TestWebApp] is completed
好的,所以您的代码看起来都很好(很好,可以运行),没有问题。 我99%确信这不是代码问题,而是构建/部署问题 我建议你做以下几点: 0)如果您使用Maven并具有servlet api依赖关系,请检查servlet api依赖范围(如果您更改了任何内容,请从Maven上下文菜单执行项目更新),否则请确保检查导出和部署程序集 1) 清理项目(在eclipse项目->清理中) 2) 清理tomcat工作目录并部署和/或重新部署(或启动一个全新的tomcat实例) 3) 如果仍然不起作用,请尝试打开war文件(或者如果是从eclipse部署的,请转到Tomcat work dir并导航到侦听器应该位于的文件夹),并检查它是否确实在那里 4) 如果没有,请查看您是否可以在问题视图中找到任何问题,以了解它未被构建的原因
5) 如果问题仍然存在,请按照@Shailendra和重做步骤1-4所述检查类输出文件夹的设置。A
.java
在编译之前不是.class
。你有编译代码的编译环境吗?你能不能也包括listener类(CarregarBot.java)另外,强烈建议的做法是以小写字母开始命名包(例如Bot应该是Bot),它不会以任何方式影响代码的执行,这只是时间问题methodology@IvanTomić在我的问题中添加了de CarregarBot.java
Aug 27, 2019 1:22:47 AM org.apache.catalina.core.StandardContext reload
INFO: Reloading Context with name [/TestWebApp] has started
CarregarBot initialized
Aug 27, 2019 1:22:47 AM org.apache.catalina.core.StandardContext reload
INFO: Reloading Context with name [/TestWebApp] is completed