java - 非法状态异常 : getOutputStream() has already been called for this response

标签 java jquery ajax jsp spring-mvc

我有一个包含表格的 JSP 页面。在页面加载时,表格将被填充。我还有每 X 秒一次的 ajax 调用,它必须刷新表格内容。

加载时,内容按预期填充。但是在 ajax 调用期间,它失败并出现以下错误:

Jul 31, 2014 3:17:16 PM org.apache.catalina.core.StandardWrapperValve invoke
SEVERE: Servlet.service() for servlet [SpringDispatcherServlet] in context with path        [/sample] threw exception [java.lang.IllegalStateException: getOutputStream() has    already been called for this response] with root cause
java.lang.IllegalStateException: getOutputStream() has already been called for this    response
at org.apache.catalina.connector.Response.getWriter(Response.java:638)
at org.apache.catalina.connector.ResponseFacade.getWriter(ResponseFacade.java:214)
at javax.servlet.ServletResponseWrapper.getWriter(ServletResponseWrapper.java:105)
at javax.servlet.ServletResponseWrapper.getWriter(ServletResponseWrapper.java:105)
at org.springframework.security.web.context.SaveContextOnUpdateOrErrorResponseWrapper.getWriter(SaveContextOnUpdateOrErrorResponseWrapper.java:109)
at org.apache.jasper.runtime.JspWriterImpl.initOut(JspWriterImpl.java:125)
at org.apache.jasper.runtime.JspWriterImpl.flushBuffer(JspWriterImpl.java:118)
at org.apache.jasper.runtime.PageContextImpl.release(PageContextImpl.java:190)

我检查了关于这个问题的现有问题,但没有用。我没有在代码中使用 scriplet。

JSP代码:

$(document)
    .ready(
        function() {
            var performAjax = function() {
                $
                .ajax({
                    method : 'get',
                    contentType: 'application/json',
                    dataType: "json",
                    url : "${pageContext.request.contextPath}/refresh",
                    success : function(data) {
                        alert("got something");
                    },
                    error : function(e) {
                        alert('Error: ' + e);
                    }
                });
            }
        setInterval(performAjax, 15000);
    });

Controller 代码:

@RequestMapping(value = "/refresh")
public @ResponseBody
RefresingModel refresh(ModelMap modelMap,
    HttpSession session) {
        return refreshService.getUpdatedData();
    }

最佳答案

不要在 JQuery 中使用 out 对象。它是 JSP 中用于 OutputStream 的隐式对象:

$(document)
        .ready(
                function() {
                    var performAjax = function() {
                        $
                                .ajax({
                                    method : 'get',
                                    contentType: 'application/json',
                                    dataType: "json",
                                    url : "${pageContext.request.contextPath}/refresh",
                                    success : function(data) {
                                        alert("got something");

                                    },
                                    error : function(e) {
                                        alert('Error: ' + e);

                                    }
                                });
                    }
                    setInterval(performAjax, 15000);
                }); 

关于java - 非法状态异常 : getOutputStream() has already been called for this response,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25056207/

相关文章:

java - Java 中的 AtomicLong 是用来做什么的?

java - JPA 映射接口(interface)

javascript - jquery 函数调用 asp 函数仅在内联时有效

javascript - 函数在运行内部操作之前返回值

javascript - 固定可滚动 div 内的 anchor

java - 如何将16色值转换为32色值?

java - 如何将 ASCII 转换为 int?

javascript - 嵌套的 UI Accordion ?

javascript - 根据当前页面以不同颜色突出显示主菜单中的链接

通过 AJAX GET 调用加载后,jQuery 脚本未加载