Java+Tomcat:使用已部署的 WAR 文件继续开发(手头没有源代码)

Java+Tomcat: Continuing development with deployed WAR file (without source code on hand)

我有一个从远程服务器下载的已编译 war 文件。我可以 运行 在本地应用程序。问题是我没有源代码,所有 java 个文件都已经编译 .class 个文件。

现在我想为现有项目添加一些新功能。该应用程序很旧,它使用 web.xml 文件来声明 servlet。例如:

    <servlet>
        <servlet-name>ServletOne</servlet-name>
        <servlet-class>path.to.ServletOne</servlet-class>
    </servlet>
    <servlet>
        <servlet-name>ServletTwo</servlet-name>
        <servlet-class>path.to.ServletTwo</servlet-class>
    </servlet>
...

我尝试在 web.xml 文件中添加一个新的 servlet 路径,例如:

    <servlet>
        <servlet-name>ServletOne</servlet-name>
        <servlet-class>path.to.ServletOne</servlet-class>
    </servlet>
    <servlet>
        <servlet-name>ServletTwo</servlet-name>
        <servlet-class>path.to.ServletTwo</servlet-class>
    </servlet>
    <servlet>
        <servlet-name>MyServlet</servlet-name>
        <servlet-class>path.to.MyServlet</servlet-class>
    </servlet>
...

然后我在 path.to.MyServlet 下添加了一个新的 .java 文件,并将另一个(已编译)servlet 中的所有代码复制粘贴到我的新 servlet class 中(我可以看到内容.class 个文件,因为我正在使用的 IDE 中有这样的功能,但是那些 class 文件处于只读模式。但是我无法编译 MyServlet文件(无法将 MyServlet.java 转换为 MyServlet.class。因为 class 的其余部分已经编译(.class 格式,而不是 .java)和所有 import 代码无效(MyServlet 看不到其他文件)。

这是我在尝试 javac MyServlet.java:

时遇到的错误之一
error: package javax.servlet.http does not exist
import javax.servlet.http.HttpServlet;

当然我可以使用 javac -cp path/to/tomcat/servlet-api.jar MyServlet.java 之类的东西,但是如果我需要导入项目中已经存在的 class 怎么办?它会变得有点乱,我想...

在没有源代码的情况下继续开发的最有机的方式是什么?

我在想的是构建一个单独的 Spring 启动应用程序,但是它将在不同的端口中并且需要进行一次身份验证(意思是,我不能要求用户再次登录当 he/she 在应用程序之间切换时)。

我正在使用 java-8,应用程序部署在 tomcat-7(如果有帮助)

如果您计划不断进行更多更改,并且如果在您的情况下确实允许反编译 classes,我认为最简单的解决方案是创建一个新项目,反编译所有现有项目classes,并将它们添加到新项目中。

如果是一次性更改,你可以解压war文件,将解压后的WEB-INF/classes目录添加到你正在编译的新文件的class路径中(对于例如,javac -cp path/to/tomcat/servlet-api.jar:path/to/unzipped-warfile/WEB-INF/classes MyServlet.java),然后将新编译的class添加到WEB-INF/classes并重新打包成war文件。