当前位置: 首页 > 知识库问答 >
问题:

在Intellij Idea中使用Tomcat进行调试,可以创建两个Web应用程序部署

颜实
2023-03-14

我正在Intellij Idea中开发一个Java Web应用程序,目前我正在重写我们的一些服务器工作,以使它们更加可定制。

我遇到的问题是,当我使用Idea调试War文件时,我似乎让调度器Servlet的多个实例运行。这导致我得到一个“堆空间不足”错误。我需要在Intellij中运行,这样我就可以在服务器运行时调试和检查变量

当我直接从命令行运行Tomcat时不会出现此问题。

我在servlet的init方法中放置了一个除以零的行,以便获得堆栈跟踪,查看servlet是从哪里初始化的,下面是结果:

第一个例外:

java.lang.ArithmeticException: / by zero
at com.visibleequity.servlets.SchedulerContextServlet.init(SchedulerContextServlet.java:25)
at javax.servlet.GenericServlet.init(GenericServlet.java:160)
at org.apache.catalina.core.StandardWrapper.initServlet(StandardWrapper.java:1280)
at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1193)
at org.apache.catalina.core.StandardWrapper.load(StandardWrapper.java:1088)
at org.apache.catalina.core.StandardContext.loadOnStartup(StandardContext.java:5033)
at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5317)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:901)
at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:877)
at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:633)
at org.apache.catalina.startup.HostConfig.deployDirectory(HostConfig.java:1114)
at org.apache.catalina.startup.HostConfig$DeployDirectory.run(HostConfig.java:1673)
at java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source)
at java.util.concurrent.FutureTask.run(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)

第二个:

java.lang.ArithmeticException: / by zero
at com.visibleequity.servlets.SchedulerContextServlet.init(SchedulerContextServlet.java:25)
at javax.servlet.GenericServlet.init(GenericServlet.java:160)
at org.apache.catalina.core.StandardWrapper.initServlet(StandardWrapper.java:1280)
at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1193)
at org.apache.catalina.core.StandardWrapper.load(StandardWrapper.java:1088)
at org.apache.catalina.core.StandardContext.loadOnStartup(StandardContext.java:5033)
at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5317)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:901)
at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:877)
at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:633)
at org.apache.catalina.startup.HostConfig.manageApp(HostConfig.java:1553)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.apache.tomcat.util.modeler.BaseModelMBean.invoke(BaseModelMBean.java:301)
at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.invoke(Unknown Source)
at com.sun.jmx.mbeanserver.JmxMBeanServer.invoke(Unknown Source)
at org.apache.catalina.mbeans.MBeanFactory.createStandardContext(MBeanFactory.java:622)
at org.apache.catalina.mbeans.MBeanFactory.createStandardContext(MBeanFactory.java:569)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.apache.tomcat.util.modeler.BaseModelMBean.invoke(BaseModelMBean.java:301)
at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.invoke(Unknown Source)
at com.sun.jmx.mbeanserver.JmxMBeanServer.invoke(Unknown Source)
at javax.management.remote.rmi.RMIConnectionImpl.doOperation(Unknown Source)
at javax.management.remote.rmi.RMIConnectionImpl.access$300(Unknown Source)
at javax.management.remote.rmi.RMIConnectionImpl$PrivilegedOperation.run(Unknown Source)
at javax.management.remote.rmi.RMIConnectionImpl.doPrivilegedOperation(Unknown Source)
at javax.management.remote.rmi.RMIConnectionImpl.invoke(Unknown Source)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at sun.rmi.server.UnicastServerRef.dispatch(Unknown Source)
at sun.rmi.transport.Transport$1.run(Unknown Source)
at sun.rmi.transport.Transport$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at sun.rmi.transport.Transport.serviceCall(Unknown Source)
at sun.rmi.transport.tcp.TCPTransport.handleMessages(Unknown Source)
at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(Unknown Source)
at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)

我花了很多时间阅读Intellij支持论坛,但一直没有找到一个似乎有效的解决方案。我认为这与Tomcat从webapps和server.xml自动部署有关(根据Servlet Init调用两次)。

任何帮助或签名,我可以如何防止这个问题,将非常感谢。如果你需要我发布任何额外的文件或信息,请在评论中让我知道。

提前感谢您的帮助!

共有1个答案

易烨磊
2023-03-14

看起来问题出在默认的启动脚本上。默认情况下,intellij正在运行“catalina.bat”run。当我将命令更改为“catalina.bat start”时,问题就消失了。希望这能帮助其他遇到这个问题的人。

 类似资料:
  • 我需要你的帮助,请理解调试一个maven应用程序使用Wildfly和Intellij的想法。 谢谢,

  • 主要内容:1- 创建Gradle工程,2- 配置Gradle,3-编辑应用程序结构,项目代码,5- Gradle构建,6-配置以运行应用程序1- 创建Gradle工程 打开 Eclipse ,在菜单中找到 File -> New -> Other…,在打开界面中选择 ,如下图中所示 - 点击下一步(Next),如下图中所示,并继续点击下一步(Next) - 在新打开的界面中输入项目代码的名称,这里我们创建一个名称为 如下图所示- 在新打开界面中,选择 的安装目录,如下图中所示,并继续点击下一步(

  • 可能是Tomcat每次停止都要删除/conf/catalina/localhost文件夹下的website.xml文件。 localhost文件夹下的website.xml文件如下所示

  • 我试图用netbeans和Tomcat8部署java应用程序。单击debug时,在“Apache Tomcat或Tomee”选项卡中出现异常: 用netbeans和Tomcat进行部署还有另一种方法吗?我不想总是用Sudo从控制台运行netbeans。

  • 我正在尝试调试应用程序的流程。因此在这个过程中,我需要调试两个运行在两个不同tomcat服务器上的应用程序(其中一个应用程序中的方法调用不同应用程序的另一个方法)。我如何在eclipse中实现这一点(可能吗)? 注意:这两个应用程序都在同一个eclipse实例中,没有任何调试配置。

  • 问题内容: 问题出在这里:我们为客户构建Web应用程序。我们还有一个“管理员”网络应用程序,用于修改某些客户端数据结构。由于数据的性质,两个Web应用程序必须在同一JVM中运行。 这在生产中没有问题;您只需将两个webapp放在同一个应用服务器中。 不过,我们最近切换到了一种Mavenish布局Web应用程序的方式,Maven希望每个项目一个Web应用程序。在Eclipse中,这是一个问题,因为如