首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为我的代码获取IllegalStateException的消息"getOutputStream()已经为此响应调用了“

为我的代码获取IllegalStateException的消息"getOutputStream()已经为此响应调用了“
EN

Stack Overflow用户
提问于 2019-07-08 05:05:32
回答 1查看 519关注 0票数 1

问题

每当我试图使用JSP提交表单时,都会出现以下错误。我希望根据来自表单的输入(在ChangePassword.html中)更新哈希表中的值,并使用JSP(ChangePasswordJSP.jsp)页面打印一些输出,然后将请求和响应传递给另一个JSP页面。

java.lang.IllegalStateException:已经为此响应调用了getOutputStream()

我需要用JSP(不使用servlet)来完成,我使用Netbeans作为IDE,Glassfish-5作为服务器。

ChangePassword.html

代码语言:javascript
复制
<html>
    <!-- Form to change the password, takes in User Id and current password. -->

    <head>
        <title>Change Password </title>
    </head>
    <body bgcolor="#FDF5E6">
        <h3> Change Password </h3>
        <form name="myForm" action="ChangePasswordJSP.jsp" method="post">
            <label>User Name: </label>
            <input type="text" id="uName" name="uName" required/>
            <br>
            <br>
            <label>Old Password: </label>
            <input type="password" id="oldPass" name="oldPass" required/>
            <br>
            <br>
            <label>New Password: </label>
            <input type="password" id="newPass" name="newPass" required/>
            <br>
            <br>
            <label>Confirm New Password: </label>
            <input type="password" id="confirmNewPass" name="confirmNewPass" required/>
            <br>
            <br>
            <br>
            <button type="submit" value="Submit" >Submit</button>
            <button type="reset" value="Reset">Reset</button>
        </form>
    </body>
</html>

ChangePasswordJSP.jsp

代码语言:javascript
复制
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<%@page import="java.util.Hashtable"%>
<%@page import="javax.servlet.http.HttpSession"%>
<%--<%@ page trimDirectiveWhitespaces="true" %>--%>

<!DOCTYPE html>
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>JSP Page</title>
    </head>
    <body>

        <%! Hashtable users = new Hashtable(); %>
        <%!
            public void init() {
                users.put("ann", "aaa");
                users.put("john", "jjj");
                users.put("mark", "mmm");
            }
        %>
        <%
            session = request.getSession();
            if (session.getAttribute("users") == null) {
                session.setAttribute("users", users);
            }
            String userName = request.getParameter("uName");
            String oldPassword = request.getParameter("oldPass");
            String newPassword = request.getParameter("newPass");
            String confirmNewPassword = request.getParameter("confirmNewPass");

            if (users != null && newPassword.equals(confirmNewPassword) && users.get(userName).equals(oldPassword)) {
                out.println("<h3>Password Changed Successfully. </h3>");
                users.put(userName, newPassword);
                request.getSession().setAttribute("users", users);
                //  request.getRequestDispatcher("/LoginServlet").forward(request, response);

            } else {
                //Password unsuccessful.
                out.println("<h3>Password Unsuccessful</h3>");
            }

            out.println("</body>");
            out.println("</html>");
            request.getRequestDispatcher("/index.html").include(request, response);
        %>



    </body>
</html>

玻璃鱼服务器日志

代码语言:javascript
复制
Warning:   StandardWrapperValve[jsp]: Servlet.service() for servlet jsp threw exception
java.lang.IllegalStateException: getOutputStream() has already been called for this response
    at org.apache.catalina.connector.Response.getWriter(Response.java:695)
    at org.apache.catalina.connector.ResponseFacade.getWriter(ResponseFacade.java:180)
    at org.apache.jasper.runtime.JspWriterImpl.initOut(JspWriterImpl.java:195)
    at org.apache.jasper.runtime.JspWriterImpl.flushBuffer(JspWriterImpl.java:188)
    at org.apache.jasper.runtime.PageContextImpl.release(PageContextImpl.java:240)
    at org.apache.jasper.runtime.JspFactoryImpl.internalReleasePageContext(JspFactoryImpl.java:185)
    at org.apache.jasper.runtime.JspFactoryImpl.releasePageContext(JspFactoryImpl.java:137)
    at org.apache.jsp.ChangePasswordJSP_jsp._jspService(ChangePasswordJSP_jsp.java:118)
    at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:111)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:750)
    at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:411)
    at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:473)
    at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:377)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:750)
    at org.apache.catalina.core.StandardWrapper.service(StandardWrapper.java:1540)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:217)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:119)
    at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:611)
    at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:550)
    at com.sun.enterprise.web.WebPipeline.invoke(WebPipeline.java:99)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:114)
    at org.apache.catalina.connector.CoyoteAdapter.doService(CoyoteAdapter.java:332)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:199)
    at com.sun.enterprise.v3.services.impl.ContainerMapper$HttpHandlerCallable.call(ContainerMapper.java:463)
    at com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:168)
    at org.glassfish.grizzly.http.server.HttpHandler.runService(HttpHandler.java:206)
    at org.glassfish.grizzly.http.server.HttpHandler.doHandle(HttpHandler.java:180)
    at org.glassfish.grizzly.http.server.HttpServerFilter.handleRead(HttpServerFilter.java:242)
    at org.glassfish.grizzly.filterchain.ExecutorResolver$9.execute(ExecutorResolver.java:119)
    at org.glassfish.grizzly.filterchain.DefaultFilterChain.executeFilter(DefaultFilterChain.java:284)
    at org.glassfish.grizzly.filterchain.DefaultFilterChain.executeChainPart(DefaultFilterChain.java:201)
    at org.glassfish.grizzly.filterchain.DefaultFilterChain.execute(DefaultFilterChain.java:133)
    at org.glassfish.grizzly.filterchain.DefaultFilterChain.process(DefaultFilterChain.java:112)
    at org.glassfish.grizzly.ProcessorExecutor.execute(ProcessorExecutor.java:77)
    at org.glassfish.grizzly.nio.transport.TCPNIOTransport.fireIOEvent(TCPNIOTransport.java:539)
    at org.glassfish.grizzly.strategies.AbstractIOStrategy.fireIOEvent(AbstractIOStrategy.java:112)
    at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy.run0(WorkerThreadIOStrategy.java:117)
    at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy.access$100(WorkerThreadIOStrategy.java:56)
    at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy$WorkerThreadRunnable.run(WorkerThreadIOStrategy.java:137)
    at org.glassfish.grizzly.threadpool.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:593)
    at org.glassfish.grizzly.threadpool.AbstractThreadPool$Worker.run(AbstractThreadPool.java:573)
    at java.lang.Thread.run(Thread.java:748)
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-07-08 05:12:02

做以下工作:

  • response.getOutputStream(),而不是默认的名为out的打印器。
  • 调用request.getRequestDispatcher("/index.html").include(request, response);后关闭输出流

修改后的ChangePasswordJSP.jsp代码

代码语言:javascript
复制
<%
            session = request.getSession();
            ServletOutputStream ot = response.getOutputStream();
            if (session.getAttribute("users") == null) {
                session.setAttribute("users", users);
            }
            String userName = request.getParameter("uName");
            String oldPassword = request.getParameter("oldPass");
            String newPassword = request.getParameter("newPass");
            String confirmNewPassword = request.getParameter("confirmNewPass");

            if (users != null && newPassword.equals(confirmNewPassword) && users.get(userName).equals(oldPassword)) {
                ot.println("<h3>Password Changed Successfully. </h3>");
                users.put(userName, newPassword);
                request.getSession().setAttribute("users", users);
                //  request.getRequestDispatcher("/LoginServlet").forward(request, response);

            } else {
                //Password unsuccessful.

                ot.println("<h3>Password Unsuccessful</h3>");
            }

            ot.println("</body>");
            ot.println("</html>");
            request.getRequestDispatcher("/index.html").include(request, response);
            ot.close();
        %>
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56928689

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档