我是否需要 servlet 来进行服务器端 Java 编程?

2022-09-04 07:02:28

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

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

它解释了如何让服务器在特定门上侦听。普通的java,不需要特殊的应用程序(如Tomcat)。

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


答案 1

使用套接字非常简单。起先。

你创建你的服务器类,你让它绑定到一个端口,然后你离开。

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

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

  • 谁先说话?

  • 你如何回应?

  • 如何处理无效请求?

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

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

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

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

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

servlet是一个抽象,当Tomcat有一个连接并且它已经协商压缩,加密等时,它会将请求传递给servlet。

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

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


答案 2

您不需要 servlet。

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


推荐