JSP_basic. Servlet과 forward로 데이터를 화면에 출력하기(RequestDispatcher)

dwanGim·2022년 4월 14일
0

JSP_basic

목록 보기
11/15

forward

지금껏 response.sendRedirect로 페이지를 이동할 때

데이터가 같이 전송되지 않아서 애를 먹었습니다.

세션이나 쿠키를 통해 가져오거나

post, get 방식이 아니면 사용자의 데이터를 얻을 수 없어서

많은 코드를 추가로 작성해야했습니다.

forward는 그런 불편함을 없애줍니다.

보내고 싶은 데이터를 request.setAttribute("저장명", 자료);

형식으로 저장하고 forward를 하면

저장된 데이터들을 RequestDispatcher로 선언해둔 목적지 주소를 향해

모두 보내줍니다.

forward 활용 코드

포워드를 한번 활용해보기 위해

src 폴더의 내부에 forwardPracForm과 forwardPracRs 라는 jsp파일들을 추가했습니다.

<body>
	<!--  http://localhost:8181/MyFirstWeb/hi을 목적지로 하는 폼을 만들어봅시다.
 -->
<div class="container">
	<div class="col-sm-10">
		<form action="http://localhost:8181/MyFirstWeb/hi">
			<input type="text" name="CF" placeholder="센터 포워드를 입력" class="form form-control-lg"><br/>
			<input type="text" name="DP" placeholder="딥플메를 입력" class="form form-control-lg"><br/>
			<input type="text" name="TG" placeholder="타겟맨을 입력" class="form form-control-lg"><br/>
			<input type="submit" value="확인" class="btn btn-success mb-2">
		</form>
	</div>
</div>	
</body>

포워드라고 하면 축구의 공격수가 생각나서

센터 포워드, 딥라잉 플레이메이커, 타겟맨을 입력받는 폼을 만들어 보았습니다.

다음은 forwardPracRs.jsp의 body태그입니다.

<body>

		센터 포워드는 누구인가요? : ${CF }<br/>
		딥라잉 플레이메이커는 누구인가요? : ${DP }<br/>
		타겟맨은 누구인가요? : ${TG }<br/>


</body>

EL을 사용해 화면에 출력하도록 작성했습니다.

이제 get방식으로 접근할

hi.java 서블릿의 doGet()메서드에 다음과 같은 코드를 작성하겠습니다.

	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub

		String CF = request.getParameter("CF");
		String DP = request.getParameter("DP");
		String TG = request.getParameter("TG");
		
		request.setAttribute("CF", CF);
		request.setAttribute("DP", DP);
		request.setAttribute("TG", TG);
		
		RequestDispatcher dp = request.getRequestDispatcher("/servletForm/forwardPracRs.jsp");
		
		dp.forward(request, response);
	}

포워딩의 절차는 다음과 같습니다.

첫번째, request.getParameter()를 이용해 form에서 전달된 데이터를 CF, DP, TG라는 이름으로 저장했습니다.

두번째, 보내고 싶은 데이터를 request.setAttribute("저장명", 자료); 형식으로 저장합니다.

	request.setAttribute("CF", CF);
	request.setAttribute("DP", DP);
	request.setAttribute("TG", TG);
	

의 형식으로 위에서 작성되었습니다.

세번째, RequestDispatcher 를 생성합니다.

	RequestDispatcher dp = request.getRequestDispatcher("/servletForm/forwardPracRs.jsp");
    

의 형식으로 위에서 작성되었습니다.

네번째, forward(request, response); 선언.

forward(request, response); 실행하면 페이지가 넘어가면서 변수들(데이터)도 함께 갑니다.

김기태 감독님의 동행 야구처럼 선언해둔 데이터면 어떤 데이터도 두고 가지 않아요.

redirect가 데이터 동행없이 페이지만 이동했던 것에 비하면 정말 편리합니다.

완성된 코드를 실행해봅시다.

타겟맨엔 레반돞
딥라잉플레이메이커에는 메시
타겟맨에는 호날두를 출전시켰습니다.

확인을 누르면 hi.java 서블릿을 거쳐서

forwardPracRs.jsp의 body태그가

화면에 출력되는 결과값이 나올 겁니다.

정말 고맙게도 결과가 예상대로 나왔습니다.

기초적인 코드들을 잘 수행해준 eclipse에게 감사하는 마음으로

복습을 잘해야겠습니다.

일단은 여기까지 입니다.

profile
배울 게 참 많네요.

0개의 댓글