对于我的 Web 应用程序,我正在考虑使用 Spring 框架。最初,我想有不同的操作,如创建用户或登录,但现在我必须向其他应用程序公开一些功能。我应该创建一个我从我的应用程序调用的 Web 服务,其他人也这样做,还是从 Spring 创建一个操作,然后让其他人调用该 Web 服务?似乎我应该尽量减少调用某些东西的不同方式,但是调用与我的主应用程序在同一应用程序服务器上运行的 Web 服务是否有意义?从性能的角度来看,这是个坏主意吗?
更新
我担心 Tomcat 无法在端口 80 上同时提供静态或动态页面(因此用户可以访问 www.example.com/welcome.jsp 而不是 www.example.com:8080/welcome .jsp),以及一个网络服务,但我想这并不重要,因为两者都只是作为来自 Tomcat 的请求提供的。我猜这意味着我必须将 Tomcat 更改为在端口 80 上运行,并且其他应用程序将可以通过此端口访问 Web 服务。或者我可以让 Tomcat 在端口 8080 上运行,并将 Apache 放在 Tomcat 前面的端口 80 上,Apache 将为 Tomcat 提供请求。对吗?
最佳答案
我会将通用业务逻辑放在“业务服务”中,并且:
- 从您的网络应用程序中的操作调用它
- 将其公开为其他应用程序的网络服务
对我来说,这种方法没有什么不好的,而且用 Spring 实现它非常简单和干净。实际上,我会发现仅将此业务服务公开为 Web 服务并从 Web 应用程序调用它很丑陋(而且我很确定这在 Web 应用程序端实现起来会更加复杂)。您有不同的“使用上下文”,只需为它们公开足够的接口(interface)即可。
(编辑:我正在回答作为下面评论发布的 OP 的问题)
您可以在同一个 WAR 中部署 Web 应用程序和 Web 服务(但这只是一种部署选择,您可以将业务逻辑打包在一个 JAR 中并在多个 WAR 中使用它)。关于端口,我不确定是否理解您的问题。传统上,您将在应用程序服务器前面使用 Web 服务器(例如 Apache)。如果你不这样做,你总是可以选择在端口 80 上运行你的应用程序服务器。实际上,在这两种情况下你都可以自由使用你想要的任何端口。使用端口 80 很方便。
是的,您的更新是正确的。
关于java - 创建用于内部应用程序的 Web 服务并将其公开给其他人,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1647239/