我们需要升级旧的Web应用程序以在GlassFish3而不是Tomcat下运行,以便获得EAR部署(选择Glassfish是因为它是引用JEE6实现)不幸的是,很快发现确保用户登录的机制无法正常工作,并提示getWriter()已被调用(这很可能是正确的),我无法弄清楚原因。我们的方法是对完整的JSP文件集进行过滤器检查用户是否已登录,如果没有,则使用filterChain.doFilter(servletRequest,servletResponse);重定向到登录页面;。用户状态(包括凭据)存储在session范围内的所谓Controller对象中,该对象由登录验证Java代码设置
在方法service()中,我们使用PrintWriterout=res.getWriter();请告诉我它如何返回PrintWriter类对象,然后连接到浏览器并将数据发送到浏览器。 最佳答案 它不会建立到浏览器的连接——浏览器已经建立了到服务器的连接。它要么缓冲你在内存中写入的内容,然后在请求结束时传输数据,要么确保所有header都已写入网络连接,然后返回一个写入数据的PrintWriter直接连接到该网络连接。在缓冲场景中,可能有一个固定的缓冲区大小,如果超过这个大小,到目前为止写入的数据将“刷新”到网络连接。拥有缓冲区的最
在今天下午@work解决了一个问题后,我一直在网上搜索,其中添加到HttpServletResponse的Cookie没有正确反射(reflect)在响应header中,因为我们的Servlet已经检索到响应的PrintWriter(即response.getWriter())在我们添加cookie之前。我现在知道最佳实践规定必须在调用getWriter()之前完成响应header修改(即设置内容类型、添加/编辑Cookie等),但是,我正在寻找的是:为什么?我们一直在猜测为什么检索PrintWriter实际上会卡住响应header,但为什么Servlet规范明确强制执行这一点?
为什么在ServletResponse实例上getWriter()和getOutputStream()都不能被调用? 最佳答案 设计决策。Writer和OutputStream都维护自己的缓冲区。如果您每人创建一个,那么它们的输出将需要以某种方式合并。可能,但更复杂。所以他们决定你必须选择是要基于字符的输出还是二进制输出。 关于java-java中的Servlet——getWriter()和getOutputStream(),我们在StackOverflow上找到一个类似的问题:
我们知道与将文件写入磁盘相关的应用引擎限制。因此,通过i/o拥有动态站点地图的想法对于AppEngine来说似乎有点困难。因此,这里有一些我们希望验证的想法:我们能否有一个servlet来动态生成与google站点地图兼容的xml?如果可能的话,有人可以分享一个例子吗?这样的站点地图能否包含返回适合索引的原始文本数据的动态链接?如果上述情况属实,我们看到的唯一问题是,此类仅用于索引内容的动态URL将出现在搜索结果中。相反,我们希望用户直接登陆网站的主页。关于SEO,鉴于该网站是纯GWT,是否有更好的方法来索引内容? 最佳答案 对于动
在JavaServlet中,可以通过response.getOutputStream()或response.getWriter()访问响应正文。是否应该在写入此OutputStream后调用.close()?一方面,Blochian劝告总是关闭OutputStreams。另一方面,我不认为在这种情况下存在需要关闭的底层资源。套接字的打开/关闭在HTTP级别进行管理,以允许诸如持久连接之类的事情。 最佳答案 通常您不应关闭流。作为servlet请求生命周期的一部分,servlet容器将在servlet完成运行后自动关闭流。例如,如果您