{ JSP } JSP_2

주요 개념

RequestDispatcher

RequestDispatcher는 서블릿 API의 인터페이스로, 요청을 서버 내의 다른 자원(예: 다른 서블릿, JSP 페이지, HTML 파일 등)으로 전달하여 추가 처리나 렌더링을 수행할 수 있게 해줍니다.

사용 예시:

RequestDispatcher dispatcher = request.getRequestDispatcher("/anotherPage.jsp");
dispatcher.forward(request, response);

사용 시점:

  • 사용자가 요청한 페이지와 같은 서버 내의 다른 페이지로 요청을 전달하고자 할 때
  • 요청과 응답 객체를 계속 유지하고 싶을 때

sendRedirect

sendRedirect는 클라이언트에게 다른 URL로 리다이렉트하도록 지시하는 메소드입니다. 클라이언트의 브라우저가 새로운 URL로 요청을 보내게 됩니다.

사용 예시:

response.sendRedirect("/anotherPage.jsp");

사용 시점:

  • 사용자가 요청한 페이지와는 다른 URL로 클라이언트를 이동시키고자 할 때
  • 이전 요청의 상태나 데이터가 필요하지 않을 때

차이점 요약

  • RequestDispatcher는 서버 내에서 요청을 전달하는 방식으로, 클라이언트의 브라우저는 요청의 변경을 알지 못합니다. 요청과 응답 객체는 포워딩된 자원에서도 계속 사용할 수 있습니다.
  • sendRedirect는 클라이언트의 브라우저가 새로운 URL로 요청을 보내도록 지시하는 방식으로, 클라이언트의 브라우저는 URL의 변경을 인식합니다. 요청과 응답 객체는 새로 생성되며 이전 요청의 데이터는 유지되지 않습니다.

예제 코드 - POST 요청 처리 (getRequestDispatcher 사용)

	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
	    request.setCharacterEncoding("UTF-8");

	    // 문자열을 Date 객체로 변환하기 위해 SimpleDateFormat 객체 생성
	    SimpleDateFormat tool = new SimpleDateFormat("yyyy-MM-dd");
	    Date birth = null;

	    try {
	        // 'birth' 파라미터를 Date 객체로 변환
	        birth = tool.parse(request.getParameter("birth"));
	    } catch(ParseException e) {
	        e.printStackTrace();
	    }

	    // 요청(request) 객체에 "birth"라는 이름으로 birth 값을 설정
	    request.setAttribute("birth", birth);

	    // 취미를 저장할 Map
	    Map<String, String> hobbyMap = new HashMap<>();
	    hobbyMap.put("1", "볼링");
	    hobbyMap.put("2", "펜타스톰");
	    hobbyMap.put("3", "철권");

	    // 선택된 hobby 데이터를 저장할 문자열 변수 초기화
	    String hobbyData = "";
	    // 요청 파라미터에서 'hobby' 값을 배열로 가져옴
	    String[] hobbies = request.getParameterValues("hobby");

	    // 'hobby' 파라미터가 존재하고 비어있지 않은 경우
	    if(hobbies != null && hobbies.length != 0) {
	        // 선택된 취미 키를 hobbyData에 추가
	        for(String key : hobbies) {
	            hobbyData += key + " ";
	        }
	    } else {
	        hobbyData += "선택없음.";
	    }

	    // 최종적으로 hobby 데이터를 요청 객체에 추가
	    request.setAttribute("hobbyData", hobbyData);

	    // area 목록을 저장할 Map 객체 생성 및 초기화
	    Map<String, String> areaMap = new HashMap<>();
	    areaMap.put("1", "서울");
	    areaMap.put("2", "경기");
	    areaMap.put("3", "인천");
	    areaMap.put("4", "강원");

	    // 요청 파라미터에서 'area' 값을 가져옴
	    String area = request.getParameter("area");
	    // 선택된 areaData 데이터를 요청 객체에 추가
	    request.setAttribute("areaData", areaMap.get(area));

	    // 입력 폼 결과 페이지로 포워드
	    request.getRequestDispatcher("/inputFormResult.jsp").forward(request, response);
	}
  • 폼 데이터를 처리하고 이를 JSP 페이지로 포워딩 (getRequestDispatcher.forward) 하여 결과를 표시하는 데 사용됩니다.
  • 각 단계에서 데이터를 변환하고, 요청 객체에 데이터를 설정하여 JSP 페이지에서 쉽게 접근할 수 있도록 합니다.