为什么Java Web应用程序包含一系列带有main()方法的类?

为什么Java Web应用程序包含一系列带有main()方法的类?,java,jakarta-ee,Java,Jakarta Ee,我正在试图解开一个承包商的(当然是未注释的)代码,该代码在我当前的工作中在我之前(我目前没有访问权限),我发现了三段代码,我觉得很奇怪,希望有人能告诉我为什么会这样做,因为我找不出任何有效的理由,所以我希望其他人能给我提供线索:) 该应用程序的结构是一个JavaWeb应用程序,有一堆JSP和一些servlet。相当标准的东西。。。直到我遇到了四个类,它们是这个应用程序应该做什么的关键。这些类不扩展HTTPServlet,而是包含main()方法。为了使事情更加混乱,这些类在项目中的任何地方都没有

我正在试图解开一个承包商的(当然是未注释的)代码,该代码在我当前的工作中在我之前(我目前没有访问权限),我发现了三段代码,我觉得很奇怪,希望有人能告诉我为什么会这样做,因为我找不出任何有效的理由,所以我希望其他人能给我提供线索:)

该应用程序的结构是一个JavaWeb应用程序,有一堆JSP和一些servlet。相当标准的东西。。。直到我遇到了四个类,它们是这个应用程序应该做什么的关键。这些类不扩展
HTTPServlet
,而是包含
main()
方法。为了使事情更加混乱,这些类在项目中的任何地方都没有被引用。这就好像它们只是为了避免创建新项目而被转储到包含它们的包中


简而言之,我的问题是:是否有正当理由在web应用程序中包含包含
main()
方法的类?

它们可以是应用程序这些部分的独立单元测试?

不是真正有效的,但我见过有人将测试代码放在主方法中。在开发类时,这很方便,但是现在有这么多的单元测试框架可供选择,这是毫无意义的


(嗯,我很想问你是否在我的老公司工作,但从其他回答来看,这是一种比我想象的更常见的坏做法。)

我认为没有什么好的原因,但原因可能是它被用作单元测试的一种形式?

带代码的主要方法?这意味着类所有者在内部进行测试

可能是出于测试目的,可能是在构建或部署过程中执行的代码(手动调用或从Ant脚本调用),也可能是通过反射从应用程序代码调用的(这将非常可怕)


为什么不简单地看一下这些类的代码,看看它的作用并从中得出结论呢?

我能想到的唯一实际原因是,它们被称为命令行进程来执行某些功能。除此之外,它们听起来可疑,应该被移除以确保安全。如果没有其他问题,它将阻止他们混淆下一个人。

我的web应用程序中有一个main方法。它生成样本数据并将其写入数据库

它需要使客户能够测试我的应用程序。我给他发送了一个应用程序,他设置了数据库的相应配置信息,然后他运行这个main方法来生成示例数据。之后,他可以运行应用程序并对其进行测试


(也有嵌入式HSQL DB,但他希望有可能用他的DB测试应用程序)。

除了其他人所说的,即它们是测试之外,我还看到了作为执行代码的简单方式使用的主要方法,除了加载整个web框架之外。

我在基于服务器的应用程序中看到了一些主要方法,这些方法用于批处理。我们的应用程序需要很多批处理,我们没有在应用程序服务器中运行这些批处理,而是从Control-M服务器运行这些批处理。这比编写我们自己的代码来做报告、调度等要容易得多


当然,那些带有main方法的类总是在一个名为batch的包中;-)

我想你在回答你自己的问题:

这就好像它们只是为了避免创建新项目而被转储到包含它们的包中

最可能的原因是,如果代码不是测试代码

简而言之,我的问题是:在web应用程序中包含包含main()方法的类是否有正当理由

这是我在使用JAX-WSRI时有时会做的事情,我在类(将部署在war中)上添加一个main方法,以使用Sun的嵌入式服务器发布我的端点

@WebService()
public class HelloWebService {
    public String sayHello(String name) {
        return "Hi" + name;
    }
    public static void main(String ... args) {
        HelloWebService h = new HelloWebService();
        Endpoint endpoint = Endpoint.publish("http://localhost:8081/hello", h);
    }
}

我发现它在处理客户机时很有用。因此,开发的易用性可能是另一个“理由”。

这实际上取决于代码做了什么才能确定。非正统并不意味着无效。也就是说,除了所有其他好的猜测之外,我还要补充一点,它们可能是webapp的命令行原型。它们还可能提供对webapp类中实现的服务的命令行访问。如果你想要一个更明确的答案,张贴或解释相关课程的内容。