java - 我无法将 Tomcat webapp 配置为能够在 Eclipse 上进行调试

标签 java eclipse debugging tomcat web-applications

我在这里阅读了很多帖子和互联网上的教程,但我无法从我的 Eclipse 连接到 Tomcat 上的 Web 应用程序来调试我的代码。

按照一些帖子和教程,我修改了 catalina.bat(我在 Windows 7 上)以启动 Debug模式:

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

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

enter image description here

我做错了什么?我卡住了……

感谢和问候。

最佳答案

您不需要安装 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 应用程序一样进行调试。

关于java - 我无法将 Tomcat webapp 配置为能够在 Eclipse 上进行调试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51926763/

相关文章:

java - 放大 Canvas 中的点,所有内容都基于某个点

c++ - 是否有针对 C++14 或更高版本的标准化回溯和其他调试实用程序的计划?

visual-studio - 在Visual Studio监 window 口中展平继承的成员?

使用eclipse的Android multidex支持库

java - 关于Java Eclipse导出功能的问题

java - 如何在 Eclipse 中以 Debug模式运行外部工具

java - 在 @Size 中使用 Spring @Value

java - Java 格式的 JFileChooser 路径

java - 我应该如何修复我的代码以便返回正确的输出,即 & 而不是问号?

GStreamer 的 Java 处理问题