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.java
到MyServlet.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 楼答案
如果您计划继续进行更多更改,并且在您的情况下确实允许反编译类,我认为最简单的解决方案是创建一个新项目,反编译所有现有类,并将它们添加到新项目中
如果是一次性更改,可以解压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文件中