java.lang.IllegalStateException:提交响应后无法转发
我知道这里已经讨论过至少一百万次了,但是每个servlet在调用forward()之前都会重定向或刷新输出。我有同样的问题,但我没有做任何与输出。我的servlet只接受请求参数并提交到数据库,并在请求上设置一个属性。然后,它将请求转发给jsp,jsp显示属性。我在Tomcat7上使用Servlet3.0。下面是我的servlet doPost方法,后面是转发到的jsp:java.lang.IllegalStateException:提交响应后无法转发,java,jsp,servlets,Java,Jsp,Servlets,我知道这里已经讨论过至少一百万次了,但是每个servlet在调用forward()之前都会重定向或刷新输出。我有同样的问题,但我没有做任何与输出。我的servlet只接受请求参数并提交到数据库,并在请求上设置一个属性。然后,它将请求转发给jsp,jsp显示属性。我在Tomcat7上使用Servlet3.0。下面是我的servlet doPost方法,后面是转发到的jsp: @Override protected void doPost(HttpServletRequest req, Ht
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
super.doPost(req, resp);
DAOFactory daoFactory = DAOFactory.getFactory();
daoFactory.getCompanyDAO().beginTransaction();
Company company = new Company();
company.setName(req.getParameter("companyName"));
company.setContactEmail(req.getParameter("companyEmail"));
company.setContactPhone(new Long(req.getParameter("companyMobile")));
company.setAddressLine1(req.getParameter("companyAddressLine1"));
company.setAddressLine2(req.getParameter("companyAddressLine2"));
company.setCity(req.getParameter("companyCity"));
company.setZipcode(Integer.parseInt(req.getParameter("companyZip")));
company.setState(req.getParameter("companyState"));
company = daoFactory.getCompanyDAO().save(company);
daoFactory.getCompanyDAO().commitTransaction();
Employee owner = new Employee();
owner.setFirstname(req.getParameter("ownerFirstName"));
owner.setLastname(req.getParameter("ownerLastName"));
owner.setEmail(req.getParameter("ownerEmail"));
owner.setMobileNum(new Long(req.getParameter("ownerCellPhone")));
owner.setZipcode(Integer.parseInt(req.getParameter("ownerZip")));
owner.setRole("Employer");
owner.setCompany(company);
daoFactory.getEmployeeDAO().beginTransaction();
owner = daoFactory.getEmployeeDAO().save(owner);
daoFactory.getEmployeeDAO().commitTransaction();
company.addEmployee(owner);
company.setOwnerId(owner.getId());
daoFactory.getCompanyDAO().beginTransaction();
company = daoFactory.getCompanyDAO().save(company);
daoFactory.getCompanyDAO().commitTransaction();
req.setAttribute("company", company);
RequestDispatcher rd = getServletConfig().getServletContext().getRequestDispatcher("/jsp/companyConfirmation.jsp");
rd.forward(req, resp);
}
JSP:
在此处插入标题
公司被成功拯救
公司名称:${Company.name}
我相信我可能错过了一些非常琐碎的事情。我无法理解它是什么,尤其是在转发请求之前,我没有向输出写入任何内容时
PS:我还试着放一个返回代码>语句在转发后,但没有更改
谢谢 您应该删除super.doPost(req,resp)
方法调用。HTTPServlet中doPost方法的默认实现返回HTTP 405状态代码,意思是“不支持方法”,这是已提交的响应。因此,您不能将请求转发给其他jsp
这是RequestDispatcher.forward(ServletRequest req,ServletResponse resp)
方法描述的一部分:“应该在响应提交到客户端之前(在刷新响应正文输出之前)调用forward”。如果响应已提交,则此方法将抛出IllegalStateException。在转发之前,响应缓冲区中未提交的输出将自动清除。” 您应该删除super.doPost(req,resp)
方法调用。HTTPServlet中doPost方法的默认实现返回HTTP 405状态代码,意思是“不支持方法”,这是已提交的响应。因此,您不能将请求转发给其他jsp
这是RequestDispatcher.forward(ServletRequest req,ServletResponse resp)
方法描述的一部分:“应该在响应提交到客户端之前(在刷新响应正文输出之前)调用forward”。如果响应已提交,则此方法将抛出IllegalStateException。在转发之前,响应缓冲区中未提交的输出将自动清除。” super.doPost()正在执行的代码是什么?是super.doPost()导致了问题。谢谢你的提示。super.doPost()执行的代码是什么?是super.doPost()导致了这个问题。谢谢你的提示,成功了!谢谢你的提示,成功了!谢谢你的提示。
<%@ 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>
<h3>The Company was saved successfully</h3>
<p>
Company name: ${company.name}
</p>
</body>
</html>