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

时间:2010-06-04 12:26:32

标签: java java-ee

我正在尝试解开一个承包商的代码(当然是未注释的)代码,这个代码在我当前的演出之前(我目前无法访问)我和我遇到了三段代码发现奇怪,并希望有人可能会告诉我为什么这可能已经完成,因为我无法提出任何有效的理由,我希望其他人可能会提示我:)。

应用程序的结构是一个Java Web应用程序,有一堆JSP和一些servlet。非常标准的东西......直到我遇到了四个类,这些类对于这个应用程序应该做的事情至关重要。这些类不会扩展HTTPServlet,而是包含main()方法。为了使事情更加混乱,类不会在项目的任何位置引用。就好像它们只是被倾倒在包含的包中以避免创建一个新项目?

我的简洁形式的问题是:是否有正当理由让网络应用中包含main()方法的类?

11 个答案:

答案 0 :(得分:7)

不是真正有效的,但我看到人们将测试代码放在主要方法中。在开发课程时很方便,但是现在有很多单元测试框架可供选择,这一点毫无意义。

(嗯。我很想问你是否在我的老公司工作,但从其他答复判断,这是一个比我想象的更常见的不良做法。)

答案 1 :(得分:3)

我认为你在回答自己的问题:

  

就好像它们只是被丢弃在包含的包中以避免创建新项目?

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

答案 2 :(得分:1)

可以用于测试目的,可以是在构建或部署期间执行的代码(手动调用或从Ant脚本调用),也可以通过反射从应用程序代码调用它们(这将非常糟糕)。

为什么不简单地查看这些类的代码以查看它的作用并从那里得出结论?

答案 3 :(得分:1)

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

答案 4 :(得分:0)

它们可能是应用程序那些部分的独立单元测试吗?

答案 5 :(得分:0)

我认为没有良好的原因,但 原因可能是它被用于单位测试的形式?

答案 6 :(得分:0)

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

答案 7 :(得分:0)

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

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

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

答案 8 :(得分:0)

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

答案 9 :(得分:0)

我已经看到基于服务器的应用程序中的主要方法,其中那些方法用于批处理。我们的应用程序需要相当多的批次,我们没有在应用服务器中运行这些批次,而是从Control-M服务器运行。这比编写我们自己的代码来进行报告,调度......更容易。

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

答案 10 :(得分:0)

  

我的简洁形式的问题是:有没有合理的理由让包含Web应用程序中包含的main()方法的类?

在使用JAX-WS RI时,我有时会这样做,我在类上添加一个main方法(将在war中部署),以使用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);
    }
}

我觉得在客户端工作时很有用。因此,易于开发可能是另一个“理由”。