如何在 Java Servlet 中执行 DELETE 和 PUT 方法

How to execute DELETE and PUT methods in Java Servlets

我正在寻找 运行 Java Servlet 的 PUT 和 DELETE 方法。总的来说,我有一个带有 Web 控件 (WAR) 的简单应用程序,该应用程序与控制简单库列表的 EJB 项目相连。 对于每个 CRUD 操作,我想使用不同的不同方法:

但是我用 post 方法通过简单的形式创建,读取(列表)是通过在 URL 地址(没有形式)中简单地输入 GET 来执行的,但我不知道怎么能我将 put 和 delete 用于他们的目的。

不幸的是,我找到的在线资源没有回答这个问题,但我只是好奇如何使用 id。

我假设通过例如删除/Servlet/:libraryId(没有任何主体),通过相同的 URL 模式更新(具有更新的模式)。 doPut()doDelete() 应该只是 运行 EJB 中的适当操作。

无法在 HTML 级别上创建表单提交中的 DELETE 请求(它是 always GET 或 POST,除非您开始编写自己的浏览器来处理您提出的那种非标准 HTML),您所能做的就是提交一个值(取自隐藏字段、单选按钮等),表示在 doPost()doGet() 服务器上的处理程序。

但是http上的DELETE没有什么特别的protocol level. The whole request is just a sequence of bytes, where the first few定义方法(PUT,GET,DELETE,PATCH ...),然后是space

就您的服务器而言,您甚至可以使用 web sockets to accept connections and create responses to self defined fantasy methods. If you're using servlets, you have doPut(), doGet() and doDelete() available anyway. To handle other http methods you'd have to override the 方法。

在客户端 Angular 的 HttpClient allows for all three methods that you need, you could use jquery's ajax, or there's again the web socket approach 在客户端也是如此,只要浏览器一起玩。

如果是Java客户,又是web sockets (but you'd want to send some valid http request instead of "Hello", as done in the example¹.), and the Apache HttpClient,一看就知道了。

至于测试,有一些可用的浏览器扩展可以让您编写 PUT 和 GET 以外的请求,SoapUi as a tool is very popular, IntelliJ even has a http client,允许您将完整的请求键入纯文本。

¹ 如果您的 hand crafted server 同意这样的 "Hello" 协议,那也没关系。它只是不是 http.


由于问题中存在相当多的混淆,事实证明,我想进一步推广这个想法,用 webSockts 编写自己的 Http client/server。你已经为套接字的东西准备好了例子,所以这很容易。

但更有趣的是,您处于构建 http 的原始 tcp/ip 级别,所有这些框架重定向(servlet 等)都消失了,您只剩下一个基本上是文本(好吧,字节流),这就是 http 请求。所有的魔法都消失了,事情显而易见而且简单,只是 as specified.