RequestDispatcher에 대해 배울 때 기본 코드를 작성하고 있습니다. 나는 rd.forward()가 호출 될 때 경로 (이 경우 다른 서블릿)에 명명 된 자원으로 제어 (및 응답 처리)가 전달된다는 것을 알고 있습니다. 그런데 왜이 코드가 이전에 out.write() 문으로 인해 IllegalStateException을 던지지 않았습니까?RequestDispatcher - 응답이 커밋되는 시점은 언제입니까?
내가 정말로 묻는 것은, 언제 어떻게 이러한 out.write() 문이 커밋 되었습니까?
감사합니다, 제프
public class Dispatcher extends HttpServlet{
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws IOException, ServletException{
response.setContentType("text/plain");
PrintWriter out = response.getWriter();
out.write("In Dispatcher\n");
String modeParam = request.getParameter("mode");
String path = "/Receiver/pathInfo?fruit=orange";
RequestDispatcher rd = request.getRequestDispatcher(path);
if(rd == null){
out.write("Request Dispatcher is null. Please check path.");
}
if(modeParam.equals("forward")){
out.write("forwarding...\n");
rd.forward(request, response);
}
else if(modeParam.equals("include")){
out.write("including...\n");
rd.include(request, response);
}
out.flush();
out.close();
}
}
알아보기 다음과 같이 코드의 끝 부분을 수정하면 왜 예외가 throw되지 않습니다. \t'out.flush(); \t \t out.write ("예외 코드?"); \t \t out.close(); –
플러시가 전에 호출 된 경우 예외가 throw됩니다. – Tala
. 감사합니다. Tala. 전달 된 모든 항목이 이미 삭제 된 것을 잊지 마세요. Tala의 게시물을보십시오. –