【问题标题】:Http Post in JAVAJAVA 中的 Http 发布
【发布时间】:2011-12-09 03:15:39
【问题描述】:

我以前没有使用过 HTTP post/get,我办公室即将开展的项目是基于 java 中的 http post/get。它基本上是基于客户端 - 服务器的应用程序。客户将发布一些信息,我需要获取该信息并处理字符串,反之亦然。这个项目必须在 J2SE 上开发。您可以假设这类似于 JMS 队列消息处理的东西。我用谷歌搜索了信息,但大部分信息都是针对 Web 应用程序的,我的应该像消息队列一样工作。有人可以解释我如何做到这一点或指出我可以从哪里获得一些有用的信息。

谢谢 阿伦

【问题讨论】:

  • 您真的需要使用 HTTP,还是您自己的自定义协议可以? (即,您可以同时控制客户端和服务器吗?)

标签: java http post get


【解决方案1】:

好吧,如果您不需要专门使用严格的 HTTP,并且只需要使用 Java SE(而不是 Java EE,它排除了 Servlet、JSP、JMS 等),那么您可能需要调查 @ 987654321@ 和 Socket 类。

服务器

您的服务器需要侦听 TCP 端口(例如,端口 8080) - 通常您会选择介于 1025 和 65,535 之间的端口号,但是如果您尝试使用具有默认端口的已定义服务,那么用那个。 但是请注意,在 unix 上,为了监听低于 1024 的任何端口,我相信你需要是 root。 传统上,端口 80 用于 HTTP。

要监听这个端口,你需要在你的代码中添加这样的东西:

ServerSocket srvSocket = new ServerSocket(8080);
Socket socket = srvSocket.accept();

这几乎是最基本的代码,它会导致您的应用程序等待连接到端口 8080。一旦连接,您可以通过询问返回的 @987654326 为连接的客户端获取 InputStreamOutputStream @ 对象,允许您从客户端读取内容,并将这些请求插入队列中。这个队列可以被其他线程处理。

客户

为了让您的客户端连接到服务器,您需要使用基于以下示例的内容:

Socket connection = new Socket("server.domain.com", 8080);
OutputStream output = connection.getOutputStream();

然后,您可以将您对服务器的请求写入OutputStream(如果您期望得到响应,则从getInputStream() 返回的InputStream 中读取)

提供的代码非常基本,但它应该让您大致了解如何进行。如果您想使用真正的 HTTP,您甚至可以使用此方法,但是如果是这种情况,使用一些预制库可能是一个更好的主意(尽管您可能不需要 HTTP 规范中定义的所有功能本身)。

无论如何,我希望这能为您提供一个良好的构建起点。

【讨论】:

  • 套接字非常适合简单的东西,但如果您需要按顺序处理所有消息的队列行为,则需要非常小心。
  • 同意,但是使用套接字、队列等正是编写 MUD 的方式(这是我的大部分 ServerSocket 经验的来源)。只要您将来自套接字的请求包装在某种对象中(例如,HttpServletRequest,它在 JEE 中对 OP 不可用),那么对这些对象进行排队应该是相当简单的。与大多数事情一样,这将取决于相关开发人员的技能和经验。我们只能回答被问到的问题。
  • 我也经常使用套接字——它们在大多数情况下都能正常工作。好贴。我现在就给你一个赞成票。
  • 一个小修正。在我的上一封邮件中, HTTP 已修改为 HTTPS 。所以也必须包含 ssl 安全性。
  • 好的,在这种情况下,我建议您遵循 Martin 的建议,将 Jetty 嵌入到您的应用程序中 - 这是一段很棒的代码,使用起来绝对轻而易举!
【解决方案2】:

Jetty 是一种流行的网络服务器,旨在轻松嵌入到应用程序中。

它的HTTP server component 可以在您的应用程序中运行并通过分派到您的自定义代码来响应请求。

Jetty 还具有一个 HTTP client,您可以在客户端使用它来发送请求。

这是一个相当大的话题,我无法发布完整的指南,但Jetty's documentation 通常质量很高,应该是一个很好的起点。

【讨论】:

  • Jetty 对于服务器来说是一个很好的答案。不必担心 J2SE 与 J2SE 之间的区别。其他的东西。 Jetty 将在您的 J2SE JVM 中正常运行。如果您不想将额外的库部署到客户端(例如使用 Jetty http 客户端),您可以只使用 Java 标准库进行 http post。此处示例:stackoverflow.com/questions/2793150/…
  • 感谢您的信息。我会调查的!!
【解决方案3】:

我建议你从学习 HTTP 协议的基础开始。这个article 是一个很好的开始。在您了解了基础知识后,请按照this article 了解如何以编程方式与 HTTP 服务器进行通信(读/写)。之后,Google 就是你的朋友了。

【讨论】:

    【解决方案4】:

    如果您不局限于 J2SE,您可以使用Servlets 来管理 HTTP 的 POST/GET 方法。评估是否可能,否则您将重新发明轮子

    【讨论】:

      【解决方案5】:

      我也有一个主要的 SE 背景。在客户端,编写 get/post 非常容易。或者你可以谷歌查找源代码。我发现使用 REST 简单易懂。在服务器端,有很多选择,我的经验非常有限。我使用标准 JEE6 编写了服务器,它并不太痛苦,但听起来这不是你的选择。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-07-17
        • 1970-01-01
        • 2011-04-27
        • 2017-12-10
        • 2017-06-28
        • 1970-01-01
        • 2023-03-09
        • 1970-01-01
        相关资源
        最近更新 更多