2012.03.26 15:46
홍보배너링크
홍보배너링크 내게 무한한 굴욕감과 상실감을 맛보게 한 에러다!
아... 이 에러 진짜 잡는데 완전 뻘짓... 영어가 후달리니 힘들었다는...

우선 에러명은 제목처럼
java.lang.IllegalStateException: Cannot forward after response has been committed.

에러를 발생시킨 소스를 살펴보자. (TServlet.java)

error happend source:
@Override
	protected void doPost(HttpServletRequest req, HttpServletResponse resp)
			throws ServletException, IOException {
		// TODO Auto-generated method stub
        super.doPost(req ,resp);
		resp.setContentType("text/html");
		req.setCharacterEncoding("utf-8");
		if(req.getRequestURL().indexOf("jstlTest")>-1){
			jstlTest(req,resp);
		}
	}

	private void jstlTest(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		// TODO Auto-generated method stub
		System.out.println("여긴 오는데");
		String returnPage = "/WEB-INF/jsp/jstlTest.jsp";
			
		RequestDispatcher rd = req.getRequestDispatcher(returnPage);
		req.setAttribute("msg", "hello");
		
		rd.forward(req, resp);
	}

index.jsp에서 jstlTest.jsp페이지로 포워딩 하는데 발생했다.

원인은 대략 구글링 결과.
This error means that your servlet code is trying to forward after it has already starting writing the output to the client.
영어다....

이 외에도 여러가지 고마운 답변들이 많이 있었으나 모두 영어다.
내 소스에 빗대어 짧게 의역해보자면 이렇다.

이 에러는 페이지를 포워드 하기 이전에 응답객체에 의해 이미 페이지가 작성되었다. 라는 소리 같은데...

위소스에서 해결방법은 소스 한 줄만 지우면 된다.
이미 소스를 보고 파악한 사람도 있을지 모르겠다.
범인은 요놈이다.
super.doPost(req, resp);

아마 자동으로 소스가 생성되면서 조상의 생성자를 호출하는놈이 에러를 낸 모양이다.

과감히 지워주자! 이 나쁜!!!..xx!!

에러와 싸워주신 내 두뇌님 수고하셨습니다.
그리고 고맙습니다. Google에 계신 영어님.
신고
크리에이티브 커먼즈 라이선스
Creative Commons License
홍보배너링크
Posted by 신나는 뒤벨로퍼 Imovator

티스토리 툴바