有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

我有一个从远程服务器下载的已编译的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文件的内容,因为我正在使用的IDE中有这样的功能,但这些类处于只读模式。但是我无法编译MyServlet文件(无法转换MyServlet.javaMyServlet.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的东西,但是如果我需要导入项目中已经存在的类呢?我想它会变得有点乱

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

我的想法是构建一个单独的Spring Boot应用程序,但是它将位于不同的端口,并且需要进行一次性身份验证(这意味着,当用户在应用程序之间切换时,我不能要求用户再次登录)

我使用的是java-8,应用程序部署在tomcat-7上(如果有用的话)


共 (1) 个答案

  1. # 1 楼答案

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

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