当我尝试重定向到另一个页面时,我收到此异常java.lang.IllegalStateException: Cannot call sendRedirect() after the response has been committed
我提到了this和this,但没有针对我的问题的特定解决方案(代码)
我无法在此行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)
提前致谢..
答案 0 :(得分:0)
从堆栈跟踪中,您似乎已设置了可能重定向到响应的过滤器。如果已设置过滤器,请检查是否从过滤器发送了某种响应。
答案 1 :(得分:0)
尝试切换最后两行并添加return
。
resp.sendRedirect("jsp/success.jsp");
entityManager.getTransaction().commit();
return;
}
答案 2 :(得分:0)
你的案子中的罪魁祸首是这一行:
super.doPost(req, resp);
这是响应。因此例外。
答案 3 :(得分:-1)
我只是通过从Servlet类中删除此行super.doPost(req, resp);
来解决它。
对任何人都有帮助。