【问题标题】:java.lang.IllegalStateException: Cannot call sendRedirect() after the response has been committed at or.apache.catalina.connector.ResponseFacade [duplicate]java.lang.IllegalStateException:在 or.apache.catalina.connector.ResponseFacade 提交响应后无法调用 sendRedirect() [重复]
【发布时间】:2014-08-22 00:20:56
【问题描述】:

当我尝试重定向到另一个页面时,我收到此异常 java.lang.IllegalStateException: Cannot call sendRedirect() after the response has been committed

我提到了thisthis,但我的问题没有具体的解决方案(代码)

我无法在这一行重定向到 success.jsp resp.sendRedirect("jsp/success.jsp");

这是我的 servlet 代码:

import java.io.IOException;

import javax.persistence.EntityManager;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.gk.gms.java.EntityManagerProvider;
import com.gk.gms.pojoclasses.Customer;
import com.gk.gms.pojoclasses.Manufacturer;
import com.gk.gms.pojoclasses.ServiceProvider;

public class RegistrationServlet extends HttpServlet {

    private static final long serialVersionUID = 1L;

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp)
            throws ServletException, IOException {
        super.doPost(req, resp);

        String firstName = req.getParameter("firstname");
        String lastName = req.getParameter("lastname");
        String userName = req.getParameter("username");
        String password = req.getParameter("password");
        String mailId = req.getParameter("mail");
        String userType = req.getParameter("usertype");

        EntityManager entityManager = EntityManagerProvider.getEntityManager();
        entityManager.getTransaction().begin();

        if (userType.equals("customer")) {
            Customer customer = new Customer();
            customer.setFirstname(firstName);
            customer.setLastname(lastName);
            customer.setUsername(userName);
            customer.setPassword(password);
            customer.setMail(mailId);
            entityManager.persist(customer);

        }
        if (userType.equals("service_provider")) {
            ServiceProvider serviceprovider = new ServiceProvider();
            serviceprovider.setFirstname(firstName);
            serviceprovider.setLastname(lastName);
            serviceprovider.setUsername(userName);
            serviceprovider.setPassword(password);
            serviceprovider.setMail(mailId);
            entityManager.persist(serviceprovider);
        }
        if (userType.equals("manufacturer")) {
            Manufacturer manufacturer = new Manufacturer();
            manufacturer.setFirstname(firstName);
            manufacturer.setLastname(lastName);
            manufacturer.setUsername(userName);
            manufacturer.setPassword(password);
            manufacturer.setMail(mailId);
            entityManager.persist(manufacturer);
        }

        entityManager.getTransaction().commit();
         resp.sendRedirect("jsp/success.jsp"); // problem with this line
    }
}

这是我的jsp:

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Insert title here</title>
</head>
<body BACKGROUND="../images/background.jpg">
    <HR COLOR=#BB055E>
    <font color="red" >
    ------------SUCCESSFULLY ADDED------------</marquee> 

    </font>
</body>
</html>

Logcat:

Jul 01, 2014 5:56:12 PM org.hibernate.service.jdbc.connections.internal.DriverManagerConnectionProviderImpl configure
INFO: HHH000402: Using Hibernate built-in connection pool (not for production use!)
Jul 01, 2014 5:56:12 PM org.hibernate.service.jdbc.connections.internal.DriverManagerConnectionProviderImpl configure
INFO: HHH000115: Hibernate connection pool size: 20
Jul 01, 2014 5:56:12 PM org.hibernate.service.jdbc.connections.internal.DriverManagerConnectionProviderImpl configure
INFO: HHH000006: Autocommit mode: true
Jul 01, 2014 5:56:12 PM org.hibernate.service.jdbc.connections.internal.DriverManagerConnectionProviderImpl configure
INFO: HHH000401: using driver [com.mysql.jdbc.Driver] at URL [jdbc:mysql://localhost:3306/gms]
Jul 01, 2014 5:56:12 PM org.hibernate.service.jdbc.connections.internal.DriverManagerConnectionProviderImpl configure
INFO: HHH000046: Connection properties: {user=root, password=****, autocommit=true, release_mode=auto}
Jul 01, 2014 5:56:12 PM org.hibernate.dialect.Dialect <init>
INFO: HHH000400: Using dialect: org.hibernate.dialect.MySQLDialect
Jul 01, 2014 5:56:12 PM org.hibernate.engine.transaction.internal.TransactionFactoryInitiator initiateService
INFO: HHH000268: Transaction strategy: org.hibernate.engine.transaction.internal.jdbc.JdbcTransactionFactory
Jul 01, 2014 5:56:12 PM org.hibernate.hql.internal.ast.ASTQueryTranslatorFactory <init>
INFO: HHH000397: Using ASTQueryTranslatorFactory
Jul 01, 2014 5:56:12 PM org.hibernate.tool.hbm2ddl.SchemaUpdate execute
INFO: HHH000228: Running hbm2ddl schema update
Jul 01, 2014 5:56:12 PM org.hibernate.tool.hbm2ddl.SchemaUpdate execute
INFO: HHH000102: Fetching database metadata
Jul 01, 2014 5:56:12 PM org.hibernate.tool.hbm2ddl.SchemaUpdate execute
INFO: HHH000396: Updating schema
Jul 01, 2014 5:56:12 PM org.hibernate.tool.hbm2ddl.TableMetadata <init>
INFO: HHH000261: Table found: gms.complaint
Jul 01, 2014 5:56:12 PM org.hibernate.tool.hbm2ddl.TableMetadata <init>
INFO: HHH000037: Columns: [complaintdescription, complaintid, customerid, manufacturerid, soluntiondescription, complainttype]
Jul 01, 2014 5:56:12 PM org.hibernate.tool.hbm2ddl.TableMetadata <init>
INFO: HHH000108: Foreign keys: [manid, custid]
Jul 01, 2014 5:56:12 PM org.hibernate.tool.hbm2ddl.TableMetadata <init>
INFO: HHH000126: Indexes: [primary, complaintid_unique, cusid, manid, custid]
Jul 01, 2014 5:56:12 PM org.hibernate.tool.hbm2ddl.TableMetadata <init>
INFO: HHH000261: Table found: gms.customer
Jul 01, 2014 5:56:12 PM org.hibernate.tool.hbm2ddl.TableMetadata <init>
INFO: HHH000037: Columns: [mail, username, lastname, firstname, password, cid]
Jul 01, 2014 5:56:12 PM org.hibernate.tool.hbm2ddl.TableMetadata <init>
INFO: HHH000108: Foreign keys: []
Jul 01, 2014 5:56:12 PM org.hibernate.tool.hbm2ddl.TableMetadata <init>
INFO: HHH000126: Indexes: [primary, cid_unique]
Jul 01, 2014 5:56:12 PM org.hibernate.tool.hbm2ddl.TableMetadata <init>
INFO: HHH000261: Table found: gms.customer_info
Jul 01, 2014 5:56:12 PM org.hibernate.tool.hbm2ddl.TableMetadata <init>
INFO: HHH000037: Columns: [id, serviceproviderid, customerid, productid, manufacturerid]
Jul 01, 2014 5:56:12 PM org.hibernate.tool.hbm2ddl.TableMetadata <init>
INFO: HHH000108: Foreign keys: [serviceproviderfk, manufacturerfk, productfk, customerfk]
Jul 01, 2014 5:56:12 PM org.hibernate.tool.hbm2ddl.TableMetadata <init>
INFO: HHH000126: Indexes: [serviceproviderfk, manufacturerfk, productfk, primary, customerfk, id_unique]
Jul 01, 2014 5:56:12 PM org.hibernate.tool.hbm2ddl.TableMetadata <init>
INFO: HHH000261: Table found: gms.manufacturer
Jul 01, 2014 5:56:12 PM org.hibernate.tool.hbm2ddl.TableMetadata <init>
INFO: HHH000037: Columns: [mail, username, lastname, firstname, mid, password]
Jul 01, 2014 5:56:12 PM org.hibernate.tool.hbm2ddl.TableMetadata <init>
INFO: HHH000108: Foreign keys: []
Jul 01, 2014 5:56:12 PM org.hibernate.tool.hbm2ddl.TableMetadata <init>
INFO: HHH000126: Indexes: [primary, mid_unique]
Jul 01, 2014 5:56:12 PM org.hibernate.tool.hbm2ddl.TableMetadata <init>
INFO: HHH000261: Table found: gms.service_provider
Jul 01, 2014 5:56:12 PM org.hibernate.tool.hbm2ddl.TableMetadata <init>
INFO: HHH000037: Columns: [mail, sid, username, lastname, firstname, password]
Jul 01, 2014 5:56:12 PM org.hibernate.tool.hbm2ddl.TableMetadata <init>
INFO: HHH000108: Foreign keys: []
Jul 01, 2014 5:56:12 PM org.hibernate.tool.hbm2ddl.TableMetadata <init>
INFO: HHH000126: Indexes: [sid_unique, primary]
Jul 01, 2014 5:56:12 PM org.hibernate.tool.hbm2ddl.SchemaUpdate execute
INFO: HHH000232: Schema update complete
Jul 01, 2014 5:56:12 PM org.hibernate.ejb.internal.EntityManagerFactoryRegistry addEntityManagerFactory
WARN: HHH000436: Entity manager factory name (gadget) is already registered.  If entity manager will be clustered or passivated, specify a unique value for property 'hibernate.ejb.entitymanager_factory_name'
Hibernate: 
    insert 
    into
        customer
        (firstname, lastname, mail, password, username) 
    values
        (?, ?, ?, ?, ?)
Jul 01, 2014 5:56:12 PM org.apache.catalina.core.StandardWrapperValve invoke
SEVERE: Servlet.service() for servlet [RegistrationServlet] in context with path [/gadgetmonitoringsystem] threw exception
java.lang.IllegalStateException: Cannot call sendRedirect() after the response has been committed
    at org.apache.catalina.connector.ResponseFacade.sendRedirect(ResponseFacade.java:483)
    at com.gk.gms.servlet.RegistrationServlet.doPost(RegistrationServlet.java:65)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:647)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
    at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123)
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100)
    at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:953)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:409)
    at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1044)
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:607)
    at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:313)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603)
    at java.lang.Thread.run(Thread.java:722)

提前谢谢..

【问题讨论】:

  • resp.sendRedirect("jsp/success.jsp");之后添加return
  • @NikhilTalreja 试过但没用.. :(
  • 尝试切换这两行并添加returnentityManager.getTransaction().commit();resp.sendRedirect("jsp/success.jsp");

标签: java jsp servlets


【解决方案1】:

从堆栈跟踪看来,您已经设置了一个过滤器,该过滤器可能会重定向到响应。如果您设置了过滤器,请检查是否有某种响应从过滤器发送。

【讨论】:

  • 感谢您的重播,对不起,我没有得到您..但我没有设置任何过滤器..
  • 确保响应没有从 servlet 以外的任何其他地方重定向。还可以尝试删除浏览器的缓存副本。
【解决方案2】:

尝试切换最后两行并添加return

resp.sendRedirect("jsp/success.jsp");
entityManager.getTransaction().commit();
return;
}

【讨论】:

    【解决方案3】:

    你的罪魁祸首是这一行:

    super.doPost(req, resp);
    

    这是提交响应。因此例外。

    【讨论】:

    • 是的,我找到了。谢谢...
    【解决方案4】:

    我只是通过从我的 Servlet 类中删除这一行 super.doPost(req, resp); 来解决它。

    愿它对任何人都有帮助。

    【讨论】:

    • 检查您的答案是否已接受,以便系统“认为”它已解决。
    猜你喜欢
    • 1970-01-01
    • 2012-09-23
    • 2013-12-17
    • 2016-06-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多