【问题标题】:Do I need servlets for server-side Java programming?我需要 servlet 来进行服务器端 Java 编程吗?
【发布时间】:2013-04-11 18:05:33
【问题描述】:

我需要编写一个小型服务器来处理来自 Android 应用程序的请求。 (用户向服务器发送一个数字,服务器对从每个用户接收到的数字进行一些数学运算 - 比如说平均值 - 并返回它)。

我刚刚阅读了 Oracle (http://docs.oracle.com/javase/tutorial/networking/sockets/clientServer.html) 的这个简单介绍。

它解释了如何让服务器监听特定的门。普通java,无需特殊应用(如Tomcat)。

我知道人们通常使用“servlet”(使用 Tomcat)来完成这类事情。这是为什么?有什么优势?我不能像那个简单教程中描述的那样编写一个示例服务器,并让它始终在计算机上运行吗?

【问题讨论】:

  • Servlet 在Tomcat 中运行。 Tomcat 是一个 HTTP 服务器。原始套接字就是这样。
  • @DarkCthulhu 将多线程添加到原始套接字服务器很简单。 (正确)实现 HTTP 协议并非易事。
  • 同意。在任何情况下都没有必要重新发明轮子。
  • 我不认为“多线程”和“琐碎”属于同一个句子。
  • @duffymo 点了。但是有这么多个已建立的模式来实现这种多线程。

标签: java tomcat servlets


【解决方案1】:

使用套接字非常简单。一开始。

您创建了您的服务器类,将其绑定到一个端口,然后就可以离开了。

在 cmets 中遇到的第一个障碍是多线程。但是一个简单的生产者/消费者模式将很快为您解决这个问题。

您将遇到的下一个问题是协议

  • 谁先说话?

  • 你如何回应?

  • 如何处理无效请求?

  • 如果流在请求期间崩溃会发生什么?

  • 您是为每个请求打开一个新套接字,还是客户端保留一个套接字并写入多个请求?

  • 也许您想要某种非阻塞 IO?

这就是 HTTP 的用武之地,它是一种通过 TCP/IP 进行通信的协议(实际上可以通过任何东西,您可以使用纸片和自行车)。它定义了上述所有问题(以及更多问题)的答案。

因此,您运行一个网络服务器(tomcat、glassfish),它会处理原始套接字并发送正确的信息。

servlet 是一种抽象,当 Tomcat 建立连接并协商压缩、加密等时,它会将请求传递给 servlet。

servlet 不必担心原始套接字,它会读取请求并写入响应。

值得指出的是,HTTP 并不是唯一的协议,它只是碰巧用于网络浏览的一种协议。也是网络服务器使用的那个。

【讨论】:

  • +1 用于 HTTP 上的纸张和自行车。看到这种情况发生会很有趣。另外,如果您授予此类许可,我将在将来引用它。
【解决方案2】:

您不需要 servlet。

Servlet 很有帮助,因为它们为您管理套接字处理,但缺点是您需要一个容器(例如 Tomcat)来运行您的 servlet。你可能想看看Netty,它真的是为做你所说的工作而设计的。

【讨论】:

  • 您在直接处理套接字时可能会遇到防火墙问题。
  • 您可以让 Netty 处理对端口 80 或 443 的请求 - 这样不会出现防火墙问题。
  • 没有理由不能使用端口 80 或 443。使用 Netty,您可以创建自己的协议或使用内置协议,例如 HTTP。
  • Play Framework 使用 Netty,使用起来非常简洁。它还内置了对 Akka 的支持。我更喜欢这种非 servlet 方法。
【解决方案3】:

Servlet 是 Java 中处理 HTTP 协议的标准方式。

如果您想使用 HTTP 进行客户端-服务器通信并且您想在服务器端使用 Java,那么您应该使用 servlet。

Servlet 是一种使用 Java 在 Internet 中进行通信的简单而有效的解决方案。根据您的需要,rancidfishbreath 建议的 Netty 是一个有效的替代方案,但我推荐使用 Tomcat 的 servlet,因为它是一个更简单的解决方案。必须使用 Tomcat 不是问题:它轻巧且免费。

由于 bmorris591 已经解释的原因,放弃使用原始套接字的想法。

【讨论】:

  • 如果你愿意,Netty 可以处理 HTTP。与其说是协议,不如说是非阻塞 IO。
【解决方案4】:

您可能希望将 Java 以外的其他东西视为服务器端解决方案。也许Node.jsPHP 甚至Ruby on Rails 可能是一个更好的、没有花里胡哨的选择。我可能会列出 100 多个选项(Python、Django 等,等等),它们比尝试学习 Java 和 Servlet 以及随之而来的所有东西要简单得多。您不一定需要让 Java 应用程序与 Java 应用程序对话,并且有很多选项可以让简单的 HTTP 服务器运行自定义解决方案,而无需大量学习曲线。

【讨论】:

  • 我认为 Ruby on Rails 和 Django 会更复杂,特别适合功能齐全的网站。不是这样吗?
  • 我发现 Ruby on Rails 非常简单。根据我的记忆(3 年多以前),它非常类似于 PHP,具有大量的自动代码生成功能。但是,关键是您根本不需要 Java。找到一些简单的东西并使用它。如果你想坚持使用 Java,也有一些工具,比如 Spring Roo,可以生成所有样板代码,并为你提供一个相当不错的工作开端。
  • 问题具体:for server-side Java programming.
  • 他已经知道Java语法,他只需要学习servlet,不需要学习Java和servlet。
  • 从询问他是否需要 Servlet 的上下文来看,听起来 OP 并不是 100% 适应 Java。此外,“Java 语法”大多类似于 C,与许多其他语言相同。如果有一个更易于使用、编码更少并提供 OP 所需的解决方案,那么值得一提。我并不是要劝说 OP 停止使用 Java,但是非常熟悉 Java 的开发人员通常不会问诸如“您是否需要 Servlet 来进行服务器端 Java 编程”之类的问题。这不像 Servlet 是新的或任何东西。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多