doGet 方法完成后 Servlet 是否返回响应?

2023-12-11

显然,doGet方法的返回类型为 void,因此,它不返回任何内容。从这个意义上说,我使用“返回”一词来表示将响应发送回请求它的客户端。

我正在尝试实现一个长轮询 Servlet。在我有想要发回的内容之前不发送响应是有益的。因此,在 doGet 方法中,我将连接的用户 ID 和 AsyncContext 添加到映射中:

private ConcurrentMap<String, AsyncContext> contexts = new ConcurrentHashMap<>();
//...in the doGet method when I need to add the context...
contexts.put(userId, context);

然后,当我有东西要发回时,我可以检索适当的上下文并写入其响应输出流:

AsyncContext context = contexts.get(userId);
PrintWriter writer = context.getResponse().getWriter();
writer.write("something to send to the client");

但是,客户似乎从未收到回复。查看浏览器开发者控制台中的“网络”选项卡,我可以看到 GET 请求已发送,然后返回(状态为 200)。这发生在我实际寄回东西之前。这让我相信 doGet 方法完成后会返回响应。也许正因为如此,在此之后,由于连接未打开,因此无法向客户端发送任何内容。

doGet 方法执行完成后是否将响应发送给客户端?如果是这种情况,如何保持连接打开以获得长轮询效果?


回答我自己的问题:Does the doGet method send the response to the client once the method is finished executing?

是的,当 doGet (或任何 HttpServlet 方法,例如:doGet、doPost 等)方法完成执行时,它将响应发送回客户端。

If this is the case, how can I keep the connection open for a long-polling effect?

使用异步 Servlet(我正在使用它,但是,我发现我的特定问题一定在其他地方,但这些答案仍然与所提出的问题相关)。在 ServletRequest 对象上调用 startAsync 方法,如下所示:

AsyncContext context = request.startAsync(request, response);

“这将通知 Web 容器,在请求调用结束时,它应该释放处理线程并保持连接打开,以便其他线程写入响应并结束连接。”参考链接。

另外,我将添加针对我的特定问题(客户端未收到响应)的解决方案,因为在我的 Servlet 中,我没有调用 AsyncContext 对象上的完整方法:

asyncContext.complete();
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

doGet 方法完成后 Servlet 是否返回响应? 的相关文章

随机推荐

  • 具有多个图像的 Pod

    创建一个名为 xyz 的 pod 其中包含一个容器 用于在其中运行以下每个映像 指定的映像可能在 1 到 4 个之间 nginx redis Memcached consul 问题不太清楚 但假设您希望一个 Pod 具有多个容器 下面是可以
  • 错误:结果不是以下位置的数据框:

    我正在尝试在相当大的数据框上运行拟合函数 该数据框由名为的变量分组 big group and small group 特别是 我试图获得每个的预测和 coefs 值small group代替big group 也就是说 我试图将这些新列添
  • 有没有什么好的方法来加密C#桌面应用程序[重复]

    这个问题在这里已经有答案了 可能的重复 保护 NET 代码免遭逆向工程 我们只是用C winforms开发一个应用程序 有什么好的加密方法可以帮助我们防止盗版吗 我看到有些软件可能需要硬件支持来保护其软件 如何实现 提前致谢 好吧 你在这里
  • 不读取模型[关闭]

    Closed 这个问题需要调试细节 目前不接受答案 我正在用Python编写一个程序 我想连接GPT4ALL 以便该程序像GPT聊天一样工作 仅在我的编程环境中本地运行 为此 我已经安装了 GPT4All 13B snoozy ggmlv3
  • 在 javascript 警报中编写 php

    我用以下方式在JS中编写PHP alert echo Error login 关联一个xml 用symfony翻译成两种语言 但现在不起作用 我该如何解决 您缺少引号alert call alert
  • Ruby on Rails - 将模型中的字段添加到另一个模型的表单上

    我有两个型号Contract and Addendum 合同has many addendums和附录belongs to contract 创建新合同时 将自动创建新的附录 但需要一些额外的元素来创建新的附录 如何添加字段value 这是
  • Pandas 中的顺序组内枚举

    假设我有以下数据框 date A B C D 0 2014 03 20 1 561714 0 979202 0 454935 0 629215 1 2014 03 20 0 390851 0 045697 1 683257 0 771027
  • 将引用(工具>引用)与 VBA 代码(宏)连接

    我想使用 VBA 代码以编程方式将一些引用连接到我的 VBA 项目 即无需使用 工具 gt 引用 手动设置引用 这可能吗 例如 Microsoft Office 12 0 对象库 您没有提到 Office 应用程序 在 MS Access
  • 使用 malloc 时出错

    I pass char input from main to processInExp 函数 然后我再次传递它processInExp 功能为getInput 函数在读取文件时动态分配它 Inside getInput 功能input检查时
  • 为什么 ASP.NET 网站没有 Designer.cs?

    如果我们在 Visual Studio 中创建 ASP NET Web 应用程序 我们可以看到每个 aspx 文件都会有一个关联的自动生成的 aspx designer cs 文件 但对于 ASP NET 网站 每个 aspx 文件只有一个
  • 如何屏蔽具有 RepeatVector() 层的 LSTM 自动编码器中的输入?

    我一直在尝试使用 LSTM 自动编码器获取向量序列的向量表示 以便我可以使用 SVM 或其他此类监督算法对序列进行分类 数据量阻止我使用完全连接的密集层进行分类 我的输入的最短大小是 7 个时间步长 最长的序列是 356 个时间步长 因此
  • _vscprintf 在 Android 上等效吗?

    vscprintf在 Android 上不可用 还vsprintf NULL fmt ap 不起作用 产生段错误 因此似乎无法计算 vsnprintf 成功所需的缓冲区大小 Android sources表明 android log pri
  • “304 Not Modified”到底是如何工作的?

    304 Not Modified 响应是如何生成的 浏览器如何判断HTTP请求的响应是否为304 是浏览器设置的还是服务器发送的 如果由服务器发送 服务器如何知道缓存中可用的数据 以及如何将304设置为图像 我的猜测 如果它是由浏览器生成的
  • Git pre-commit hook:使用 -a 标志提交时如何获取添加/修改的文件

    当我使用 git commit a 提交我的工作时 预提交挂钩中的 git diff diff filter ACM name only cached 无法获取 git 将添加的文件 那么对于这种情况 正确的解决方案是什么 这里的问题是gi
  • 如何禁用/启用对话框负积极按钮?

    请查看下面的自定义对话框 我在对话框上有一个编辑文本字段 如果文本字段为空 我想禁用positiveButton 我可以为文本字段获取 charListener 但我不确定如何设置positivebutton禁用或启用该侦听器 正负按钮的参
  • Apache Flink:如何在摄取时间模式下获取事件的时间戳?

    我想知道是否可以使用Flink的摄取时间模式来获取记录的时间戳 考虑以下 flink 代码示例 https github com apache flink blob master flink examples flink examples
  • 在启用安全管理命令后,Glassfish 5 将无法启动

    输入enable secure admin 命令后 我无法运行 Glassfish 5 我有明确的操作系统 Ubutntu 服务器 16 04 然后我安装 java 8 并下载 zip 文件中的 glassfish 服务器 可能是什么问题呢
  • 如何使用 Graph-API 在 Facebook 中搜索特定位置的所有用户

    我有一个项目 我必须在 Facebook 上搜索所有人 特定位置 然后对数据应用进一步的过滤器 我的问题和问题是 如何使用 Graph API 获取初始数据 我知道这是可能的 使用 Facebook 本身的搜索字段 只需输入 所有居住在 的
  • 如何使用表面视图在用户不知情的情况下捕获图像?

    我想从 Android 相机捕获图像 但用户不知情 public class Capture extends Activity public Uri fileUri public String filepath1 public static
  • doGet 方法完成后 Servlet 是否返回响应?

    显然 doGet方法的返回类型为 void 因此 它不返回任何内容 从这个意义上说 我使用 返回 一词来表示将响应发送回请求它的客户端 我正在尝试实现一个长轮询 Servlet 在我有想要发回的内容之前不发送响应是有益的 因此 在 doGe