我无法将Tomcat Web应用程序配置为能够在Eclipse上进行调试

时间:2018-08-20 08:27:26

标签: java eclipse debugging tomcat web-applications

我已经在互联网上阅读了很多文章和教程,但是我无法从Eclipse连接到Tomcat上的Webapp来调试代码。

在发布了一些帖子和教程之后,我修改了catalina.bat(我在Windows 7上)以使其处于调试模式:

set _EXECJAVA=%_RUNJAVA%
set MAINCLASS=org.apache.catalina.startup.Bootstrap
set ACTION=jpda start
set SECURITY_POLICY_FILE=
set DEBUG_OPTS=
set JPDA=jpda
set JPDA_TRANSPORT=dt_socket
set JPDA_ADDRESS=8000
set JPDA_SUSPEND=n
set JPDA_OPTS=-agentlib:jdwp=transport=%JPDA_TRANSPORT%,address=%JPDA_ADDRESS%,server=y,suspend=%JPDA_SUSPEND%

if not ""%1"" == ""jpda"" goto noJpda
set JPDA=jpda
if not "%JPDA_TRANSPORT%" == "" goto gotJpdaTransport
set JPDA_TRANSPORT=dt_socket
:gotJpdaTransport
if not "%JPDA_ADDRESS%" == "" goto gotJpdaAddress
set JPDA_ADDRESS=8000
:gotJpdaAddress
if not "%JPDA_SUSPEND%" == "" goto gotJpdaSuspend
set JPDA_SUSPEND=n
:gotJpdaSuspend
if not "%JPDA_OPTS%" == "" goto gotJpdaOpts
set JPDA_OPTS=-agentlib:jdwp=transport=%JPDA_TRANSPORT%,address=%JPDA_ADDRESS%,server=y,suspend=%JPDA_SUSPEND%
:gotJpdaOpts
shift
:noJpda

还有:

:doStart
shift
if "%TITLE%" == "" set TITLE=Tomcat
set _EXECJAVA=jpda start "%TITLE%" %_RUNJAVA%
if not ""%1"" == ""-security"" goto execCmd
shift
echo Using Security Manager
set "SECURITY_POLICY_FILE=%CATALINA_BASE%\conf\catalina.policy"
goto execCmd

然后,在Eclipse上,我用Tomcat安装创建了一个服务器,并选择了“使用Tomcat安装(控制Tomcat安装)”:

enter image description here

在服务器上,我已经设置了变量“ jpda”:

enter image description here

现在,我已经按照catalina.bat中指定的参数创建了一个调试配置:

enter image description here

但是当我通过按“以调试模式启动服务器”按钮从eclipse运行服务器并尝试连接时,出现此错误:

enter image description here

我做错了什么?我被困住了...

感谢和问候。

2 个答案:

答案 0 :(得分:1)

您不需要安装Tomcat和插件。

  1. 创建具有依赖项的maven项目:
<project xmlns="http://maven.apache.org/POM/4.0.0"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.itranswarp.learnjava</groupId>
    <artifactId>web-embedded-hello</artifactId>
    <version>1.0-SNAPSHOT</version>
    <packaging>war</packaging>
    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <maven.compiler.source>11</maven.compiler.source>
        <maven.compiler.target>11</maven.compiler.target>
        <java.version>11</java.version>
        <tomcat.version>9.0.26</tomcat.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.apache.tomcat.embed</groupId>
            <artifactId>tomcat-embed-core</artifactId>
            <version>${tomcat.version}</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>org.apache.tomcat.embed</groupId>
            <artifactId>tomcat-embed-jasper</artifactId>
            <version>${tomcat.version}</version>
            <scope>provided</scope>
        </dependency>
    </dependencies>
</project>
  1. 编写main()以使用当前的webapp启动tomcat:
import java.io.File;

import org.apache.catalina.Context;
import org.apache.catalina.WebResourceRoot;
import org.apache.catalina.startup.Tomcat;
import org.apache.catalina.webresources.DirResourceSet;
import org.apache.catalina.webresources.StandardRoot;

public class Main {

    public static void main(String[] args) throws Exception {
        Tomcat tomcat = new Tomcat();
        tomcat.setPort(Integer.getInteger("port", 8080));
        tomcat.getConnector();
        Context ctx = tomcat.addWebapp("", new File("src/main/webapp").getAbsolutePath());
        WebResourceRoot resources = new StandardRoot(ctx);
        resources.addPreResources(
                new DirResourceSet(resources, "/WEB-INF/classes", new File("target/classes").getAbsolutePath(), "/"));
        ctx.setResources(resources);
        tomcat.start();
        tomcat.getServer().await();
    }
}
  1. 您可以在IDE中设置断点并像普通的Java应用程序一样进行调试。

答案 1 :(得分:0)

好吧,我真的不知道发生了什么,但是我确实在服务器选项卡上单击了右键> Clean Tomcat Work Directory ...,然后在“以调试模式启动服务器”上启动了它,现在可以了。

我将帖子留给可能有相同问题的人,因为他/她可以在此处按图片或代码查看所有步骤。

致谢。