본문 바로가기
교재 실습/자바 웹 개발 워크북

28. 리다이렉트

by Jint 2022. 1. 24.

회원정보를 등록 후 그 결과를 출력하지 않고 즉시 회원 목록 화면으로 이동하게 하는 방법을 리다이렉트(Redirect)라고 한다. 리다이렉트 정보는 응답 헤더에 설정한다.

@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

	...
	//SQL문 서버에 보냄
	stmt.executeUpdate();
    
	/* 리다이렉트는 HTML을 출력하지 않음. 즉, 웹 브라우저로 본문을 보내지 않음.
	response.setContentType("text/html; charset=UTF-8");
	PrintWriter out = response.getWriter();
	//out.println("<html><head><title>회원등록결과</title></head>");
	out.println("<html><head><title>회원등록결과</title>");
	//meta태그를 이용한 리프래시
	out.println("<meta http-equiv='Refresh' content='1; url=list'>");
	out.println("</head>");
	out.println("<body>");
	out.println("<p>등록 성공입니다!</p>");
	out.println("</body></html>");
	*/
    
	//리다이렉트를 이용한 리프래시
	response.sendRedirect("list");
	...
    
}

리다이렉트를 요구하는 HttpServletResponse 클래스의 sendRedirect()는 클라이언트로 본문을 출력하지 않기 때문에 HTML을 출력하는 코드는 모두 제거한다. 만약 제거하지 않더라도 클라이언트로 보내지 않기 때문에 아무런 소용이 없다. sendRedirect()에 넘기는 URL이 '/'로 시작하지 않기 때문에 상대 주소로 계산되어 list가 가리키는 URL은 /member/list이다.

 

크롬의 DevTools를 켠 뒤 톰캣 서버를 재시작하고 회원 등록 입력폼에 회원정보를 등록한다(그림 1).

그림 1 (회원 정보 등록)

회원 정보 등록 후 결과 화면 없이 곧 바로 회원 목록 화면으로 이동한다. 등록한 회원정보가 마지막 행에 출력된 것을 볼 수 있다(그림 2).

그림 2 (회원 목록 화면)

DevTools의 Network 탭을 확인하여 HTTP 통신 목록의 /member/add의 응답 내용을 확인한다(그림 3).

그림 3 (/member/add의 응답 내용)

응답 상태 코드가 200이 아닌 302로 되어있다. 응답의 의미는 '요청한 자원이 다른 URL로 이동되었으니 Location 헤더에 있는 주소로 다시 요청하라.'는 뜻이다. Location 헤더에 이동할 페이지의 URL이 있다. 응답 본문도 없다.

 

이렇게 작업 결과를 출력하지 않고 즉시 다른 페이지로 이동하기 원한다면 '리다이렉트'를 사용하고, 잠깐이나마 작업 결과를 출력하고 다른 페이지로 이동하기를 원한다면 '리프래시'를 사용한다.

 

참고도서 : https://freelec.co.kr/book/1674/

 

[열혈강의] 자바 웹 개발 워크북

[열혈강의] 자바 웹 개발 워크북

freelec.co.kr

댓글