`
不死_战士
  • 浏览: 4361 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Can't sendRedirect() after data has committed to the client.

阅读更多
转载。。。。。。。。。。。。

resin下

response.sendRedirect("XXX");

在压力测试下会报出

java.lang.IllegalStateException: Can't sendRedirect() after data has committed to the client.



以前也碰到过这个问题,gg找了下,大都说是因为在sendRedirect前调用了out.flush();

实际上没有调用,一般也很少会去掉用out.flush();



然后碰到一个搜索结果说是在resin下,如果sendRedirect后不跟return;会出这个问题(确实没加!!)

遂全部加上return,重新测试,果然不出异常了!!



这是为什么呢?



终于找到一种说法

    应该是你在做登陆时用户名和密码判断后,做的页面跳转有问题,按照异常来理解,应该是服务器已经返回了状态200或者404或者其他的状态码,但是又执行了重定向的代码,返回302状态码。服务器同一次相应应该只返回一种状态,建议最后把你的登陆判断逻辑完整的发上来看看

原来,response.sendRedirect执行后,应用服务器还是会执行接下去的代码的,所以一般都可以通过return语句中断

如果没有中断,而且接下去又有返回状态码的语句时,就会报这个错



写个例子测试下



response.sendRedirect(request.getAttribute("ROOT").toString() + "/");

response.sendRedirect(request.getAttribute("ROOT").toString() + "/");



执行后果然报错



之所以正常情况下不能重现,而压力测试下才会出现这问题, 我想纯属巧合吧, 压力测试有些操作不走流程, 逻辑上碰巧满足连着2次sendRedirect.
分享到:
评论

相关推荐

    Cannot forward after response has been committed

    "Cannot forward after response has been committed" 是一个在Java Web开发中常见的错误,通常与Servlet、Filter或控制器逻辑有关。这个错误表明服务器已经完成了对HTTP响应的处理,并将其发送到客户端,然后试图...

    Jsp利用response.sendRedirect、cookie传参

    ### JSP中利用`response.sendRedirect`与Cookie进行参数传递 #### 概述 在Web开发中,特别是使用Java Server Pages(JSP)进行网站构建时,数据的传递是至关重要的。其中,`response.sendRedirect`方法和Cookie...

    JSP Simple Examples

    One of the strong features of java is that it is follows a OOPs concept, and one of the feature of OOP in java is that, we can assign a subclass object or variable to the variable of the superclass ...

    sendRedirect()和forward()

    sendRedirect()和forward()方法的区别 sendRedirect()和forward()方法都是Servlet编程中常用的方法,它们可以将客户端的请求重定向或转发到其他的资源,如Servlet、JSP页面或HTML文件中。但是,这两个方法之间存在...

    servlet2.4doc

    The doFilter method of the Filter is called by the container each time a request/response pair is passed through the chain due to a client request for a resource at the end of the chain. doGet...

    jsp response.sendRedirect()用法详解.docx

    jsp response.sendRedirect()用法详解 jsp response.sendRedirect()函数是JSP中一种常用的重定向方法,它可以将用户重定向到指定的页面。下面我们将详细介绍jsp response.sendRedirect()函数的用法和实现原理。 ...

    jsp response.sendRedirect不跳转的原因分析及解决.docx

    ### jsp response.sendRedirect不跳转的原因分析及解决 #### 一、问题背景 在进行Web应用开发的过程中,经常需要使用到服务器端重定向的技术。在Java Server Pages (JSP) 技术中,`response.sendRedirect()` 是一...

    JSP三种跳转方式 超级好的范例

    java.lang.IllegalStateException: Can't sendRedirect() after data has been committed to the client. ``` 解决办法是在进行任何输出之前先检查是否需要重定向。 #### 二、`response.setHeader("Location", "")`...

    实践考核类课二 选课系统

    * @param response the response send by the server to the client * @throws ServletException if an error occurred * @throws IOException if an error occurred */ public void doPost(HttpServletRequest...

    forward PK sendredirect

    相比之下,`response.sendRedirect("转的页面")`是Java Servlet API中的一个方法,它会告诉浏览器发送一个新的GET请求到指定的URL。这是一个客户端的跳转,服务器返回一个HTTP状态码302(暂时重定向)和Location头,...

    Servlet跳转方式sendReDirect

    在Servlet中,有两种主要的跳转方式:`RequestDispatcher.forward()`和`ServletResponse.sendRedirect()`。这两种方法在处理客户端请求时有不同的行为和应用场景。 1. `RequestDispatcher.forward()` - `forward()...

    jsp response.sendRedirect不跳转的原因分析及解决

    对于如何进行页面跳转以及如何解决跳转中出现的问题,response.sendRedirect()是其中一种常用的方法。然而,在实际使用时,开发者可能会遇到response.sendRedirect()不跳转的情况。以下是对这个问题的原因分析及解决...

    jsp跳转getRequestDispatcher()和sendRedirect()的区别.docx

    ### jsp跳转getRequestDispatcher()和sendRedirect()的区别 在Java Web开发中,经常会遇到页面间的跳转操作,其中两种常见的方法是`getRequestDispatcher()`和`sendRedirect()`。这两种方式虽然都能实现页面跳转,...

    forward-sendRedirect

    在Java Web开发中,"forward-sendRedirect"是一个关键的概念,主要涉及到Servlet和JSP之间的页面跳转技术。这里我们将深入探讨这两个方法的工作原理及其在实际应用中的差异。 首先,我们来了解一下`forward()`方法...

    sendredirect()和forward()方法的区别_xyy511的专栏-CSDN博客.mht

    sendredirect()和forward()方法的区别_xyy511的专栏-CSDN博客.mht

    数据库测试test.sql

    response.sendRedirect(request.getContextPath()+"/admin/login.jsp"); } public void register(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //...

    java 中sendredirect()和forward()方法的区别

    Java 中 sendRedirect() 和 forward() 方法的区别 Java 中的 sendRedirect() 和 forward() 方法都是用于页面跳转的,但是它们之间存在着一些关键的区别。 1. 跳转方式 sendRedirect() 方法可以将请求重定向到任何...

    response_sendRedirect和request_getRequestDispatcher()_forward的区别.

    而sendRedirect方法可以让你重定向到任何URL。 表单form的action="/uu";sendRedirect("/uu");表示相对于服务器根路径。如http://localhost:8080/Test应用(则提交至http://localhost:8080/uu); Forward代码中的"/uu...

    Ajax请求session超时处理流程

    response.sendRedirect(response.encodeRedirectURL(this.loginUrl + java.net.URLEncoder.encode(backToUrl, "UTF-8"))); } ajaxDone.jsp页面 ;charset=UTF-8" pageEncoding="UTF-8"%> { statusCode:${status...

Global site tag (gtag.js) - Google Analytics