当前位置: 首页 > 知识库问答 >
问题:

java.lang.IllegalStateExcture:提交响应后无法转发

连德义
2023-03-14

我知道这里已经讨论过至少一百万次了,但是每个servlet在调用forward()之前都会重定向或刷新输出。我有同样的问题,但我没有做任何与输出。我的servlet只接受请求参数并提交到数据库,并在请求上设置一个属性。然后,它将请求转发给jsp,jsp显示属性。我在Tomcat7上使用Servlet3.0。下面是我的servlet doPost方法,后面是转发到的jsp:

@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:

<%@ 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>

我相信我可能错过了一些非常琐碎的事情。我无法理解它是什么,尤其是在转发请求之前,我没有向输出写入任何内容时。

PS:我还试着放一个返回 语句在转发后,但没有更改。

谢谢!


共有1个答案

公孙阳文
2023-03-14

您应该删除super.doPost(req, resp)方法调用。HTTPServlet的doPost方法的默认实现返回HTTP 405状态代码,意思是“不支持方法”,这是已提交的响应。因此,您不能将您的请求转发给其他jsp。

这是请求Dispatcher.forward(ServletRequest req, ServletResp)方法描述的一部分:转发应该在响应提交给客户端之前调用(在响应体输出被刷新之前)。如果响应已经提交,则此方法抛出IllegalStateExcure。响应缓冲区中的未提交输出在转发前自动清除”。

 类似资料:
  • 我使用过滤器来确定请求的页面是否具有有效的会话。 这是我的密码<代码>网络。xml: 过滤器类别: 我有一个登录页面,用于检查用户是否有效。如果用户有效,则将控制转移到此servlet。 这在没有过滤器的情况下可以工作,但是当我将控件转发到“//showuserImages.jsp”时,过滤器会显示一个错误。

  • 在我的应用程序中执行一些操作时,我得到了 Java . lang . illegalstateexception无法调用sendError() 当我再次重新加载页面时,它会正常工作一段时间,但一段时间后它再次显示相同的异常。我如何克服这个异常? 以下是例外: 支柱.xml

  • 你好,Hibernate和Jackson有问题。有两个POJO 为Spring Security集成而设计的用户及其角色。 还有一个控制器,通过Jackson从用户Json生成。With方法 当此方法返回不带null字段的用户时,将抛出: 当我添加@OneTo很多时,这个问题就出现了(mep dBy="user", cascade=CascadeType. ALL, fetch=FetchType

  • 问题内容: 我是JSF的新手,正在构建使用Facelets创建的应用程序。 这是我的模板 master.xhtml MasterSearch.xhtml MasterSearch.java这是一个bean faces-config.xml 现在,当我运行此代码(实际上是masterp.xhtml)时,它显示出完美的输出并加载了Accuratley,但它在控制台中引发了异常,即 而且我认为由于这个原

  • 问题内容: 我正在尝试使用以下代码将值从servlet传递到jsp页面: 当我运行页面时,我得到: 错误: 我尝试使用: 但是我遇到了同样的错误。 如何解决这个错误? 问题答案: 您已经在catch代码块中转发了响应: 因此,您不能再次调用: 因为它已经转发(提交)。 因此,您可以做的是:保留一个字符串以分配需要转发响应的位置。