Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/383.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
启动Tomcat时加载Java类_Java_Tomcat_Tomcat9 - Fatal编程技术网

启动Tomcat时加载Java类

启动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

我试图在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>
类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