为了账号安全,请及时绑定邮箱和手机立即绑定

启动Tomcat时加载Java类

启动Tomcat时加载Java类

MM们 2023-06-21 14:53:13
我试图在 tomcat 上运行项目后立即读取 java 类,但出现 java 类错误未找到异常<?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.CarregarBot 类;当我运行项目并启动服务器时,出现以下错误: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)
查看完整描述

2 回答

?
叮当猫咪

TA贡献1776条经验 获得超12个赞

通常在典型的 java web 应用程序(war)结构中——编译后的类文件应该在文件夹中结束WEB-INF/classes(除非它们可以作为 jar 归档,然后它们也可以在 WEB-INF/lib 中)。因此,请尝试将项目的构建路径更改为<your-project>/WebContent/WEB-INF/classes. 您可以参考下面所附的屏幕截图

//img1.sycdn.imooc.com//64929e8a0001dd5706520489.jpg

这是我尝试使用的类以及启动服务器时控制台上的输出


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


查看完整回答
反对 回复 2023-06-21
?
温温酱

TA贡献1752条经验 获得超4个赞

好的,所以你的代码看起来都很好(好,可操作),没有问题。我 99% 确定这不是代码问题,而是构建/部署问题。

我建议您执行以下操作:

0) 如果您使用 Maven 并具有 servlet-api 依赖项,请检查 servlet-api 依赖项范围(如果更改任何内容,请从 Maven 上下文菜单进行项目更新),否则请确保检查导出和部署程序集

1)清理项目(在 eclipse 项目 -> Clean 中)

2)清理tomcat工作目录并部署和/或重新部署(或启动一个全新的Tomcat实例)

3)如果它仍然不起作用,请尝试打开war文件(或者如果从eclipse部署,请转到Tomcat工作目录并导航到侦听器应位于的文件夹)并检查它是否确实存在。

4)如果没有,请查看是否可以在“问题”视图中找到任何问题,以了解为什么未构建它

5)如果问题仍然存在,还请检查类输出文件夹的设置,如 @Shailendra 所描述并重做步骤 1-4。


查看完整回答
反对 回复 2023-06-21
  • 2 回答
  • 0 关注
  • 119 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信