当前位置: 首页 > 面试题库 >

我是否需要刷新servlet输出流?

养俊驰
2023-03-14
问题内容

我是否需要从HttpServletResponse“刷新”输出流?

我已经从看到了,应该关闭servlet输出流吗?我不需要关闭它,但是尚不清楚是否需要冲洗它。我也应该从容器中得到吗?

protected void doGet(HttpServletRequest request, HttpServletResponse response) 
   throws ServletException, IOException {
   byte[] response = getResponse();
   String responseType = getResponseType();

   response.setContentLength(response.length);
   response.setContentType(responseType);
   response.getOutputStream().write(response);
   response.getOutputStream().flush(); // yes/no/why?
}

问题答案:

不用了 servletcontainer将为您刷新并关闭它。顺便说一句,关闭已经隐式调用了flush。

另请参阅Servlet 3.1规范的 5.6章:

关闭响应后,容器必须立即将响应缓冲区中的所有剩余内容刷新到客户端。以下事件表明该servlet已满足该请求,并且将关闭响应对象:

  • serviceservlet方法的终止。
  • 响应的setContentLengthsetContentLengthLong方法中指定的内容量大于零,并已写入响应中。
  • sendError方法被调用。
  • sendRedirect方法被调用。
  • 上的complete方法AsyncContext被调用。

通常,仅当您在同一流上有多个写入器并且要切换写入器(例如,具有二进制/字符数据混合的文件)时,或者要保持流指针处于打开状态时,在仍然运行Servlet服务的同时调用flush通常是有益的不确定的时间(例如日志文件)。



 类似资料:
  • 当我知道observable在组件/类超出作用域之前肯定会完成(使用或通知)时,我还需要取消订阅它以防止内存泄漏吗?换句话说,是否自动完成/错误的可观察清理,这样我就不用担心了?

  • 问题内容: 我有一个非常简单的文件: 而且有效。 但是,当我删除元素时,应用程序看不到实体(所有类都带有注释)。 是否有自动扫描类的机制? 问题答案: 你可以使用 该文件定义了一个名为的持久性单元,它使用JTA感知数据源。所述和元素指定管持久类:实体类,可嵌入类和超类映射。该元素指定JAR文件都包含持久化类管理的打包持久单元可见,而该class元素明确命名持久化类管理。 对于,也可以进行设置和配置

  • 在Xamarin网站上,它说: 最低操作系统版本为Windows 7。Xamarin。Forms Windows支持需要Windows 8.1和Xamarin。Forms UWP支持需要Windows 10 这是否意味着如果我想在Android和iOS应用程序的Xamarin.FormsAPI中使用UI控件和XAML,我需要有Windows 10?还是只有当我想将我的应用程序部署到Windows手

  • 当我从VScode中检查飞镖和颤振版本时,它显示 Dart VM版本:2.7.0(12月6日星期五16:26:512019+0100)在“Windows_x64”上 null

  • 在我最近的遭遇中,我试图实现在前端安全存储的JWT令牌。我以前的方法是在易受XSS攻击的sessionStorage中存储以及。现在,当过期时,我将调用endpoint来获取新的 之后,我们更改实现以防止XSS和CSRF。接下来,Local存储与Cookie 建议将访问令牌存储在内存中,并将刷新令牌存储在cookie中。所以从FE,我们无法访问cookie。(HTTPOnly cookie)和 现

  • 随着新的工具栏小部件的引入和AppCompat(android.support.v7.widget.Toolbar)版本的推出,是否还需要调用setSupportActionbar(工具栏)?或者调用setSupportActionbar有什么好处吗;现在我们可以设置标题、子标题、导航图标、导航图标单击侦听器(getSupportActionBar()。直接在工具栏上设置DisplayHomeAs