반응형
# MVC03_04 redirect 기법을 이용한 페이지 전환 및 데이터 전달 방법
- Controller > View 로 페이지를 전환하는 방법에는 redirect 와 forward 가 존재한다.
## 패키지 생성
- 프로젝트 > src 우 클릭 > New > 패키지 > kr.bit.forward 이름의 패키지 생성
## Servlet 생성
- kr.bit.forward 패키지 우 클릭 > New > Servlet 클릭
- Servlet 이름은 RedirectController > Next > mapping 이름은 /fc.do 후 Next > Service 만 체크 후 Finish
## JSP 생성
- 프로젝트 > WebContent 우 클릭 > New > view 이름의 폴더 생성
- view 폴더 우 클릭 > New > result 이름의 JSP File 생성
## 실습_1
- Controller 에서 View(JSP)로 request.setAttribute 객체 바인딩을 이용 후 reponse.sendRedirect 할 경우.
- Controller는 아래와 같다.
package kr.bit.forward;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@WebServlet("/rc.do")
public class RedirectController extends HttpServlet {
protected void service(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String data = "apple";
// View page(result.jsp)로 data 전달하여 View page에서 출력
// Controller > View 로 페이지를 전환하는 방법
// redirect
request.setAttribute("data", data); // 객체 바인딩
response.sendRedirect("view/result.jsp");
}
}
- JSP는 아래와 같다.
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%
String data = (String)request.getAttribute("data");
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
Controller에서 받은 값 출력 : <%=data%>
</body>
</html>
- 이렇게 하게 되면 객체 바인딩은 되었지만, 페이지를 변경할 때 sendRedirect를 이용하기 때문에 기존의 request, response가 없어지고 다시 브라우저에서 새롭게 JSP가 요청되기 때문에 JSP에서 만들어지는 request, response는 새로운 값으로 기존에 저장된 값을 읽어올 수 없다.
## 실습_2 : get방식=queryString
- get방식=queryString 이용한 방식
- Controller은 아래와 같다.
package kr.bit.forward;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@WebServlet("/rc.do")
public class RedirectController extends HttpServlet {
protected void service(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String data = "apple";
// View page(result.jsp)로 data 전달하여 View page에서 출력
// Controller > View 로 페이지를 전환하는 방법
// redirect
response.sendRedirect("view/result.jsp?data=" + data);
}
}
- JSP는 아래와 같다.
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%
//String data = (String)request.getAttribute("data");
String data = request.getParameter("data");
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
Controller에서 받은 값 출력 : <%=data%>
</body>
</html>
- 이땐 정상적으로 data 값이 출력되지만, 아래와 같이 여러개의 정보를 넘기게 되면 복잡해진다.
package kr.bit.forward;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@WebServlet("/rc.do")
public class RedirectController extends HttpServlet {
protected void service(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String data = "apple";
int age = 45;
String email="aaa@naver.com";
// View page(result.jsp)로 data 전달하여 View page에서 출력
// Controller > View 로 페이지를 전환하는 방법
// redirect
response.sendRedirect("view/result.jsp?data=" + data + "&age=" + age + "&email=" + email);
}
}
# MVC03_05 forward 기법을 이용한 페이지 전환 및 데이터 전달 방법
## Servlet 생성
- kr.bit.forward 패키지 우 클릭 > New > Servlet 클릭
- Servlet 이름은 ForwardController > Next > mapping 이름은 /fc.do 후 Next > Service 만 체크 후 Finish
## JSP 생성
- 프로젝트 > WebContent 우 클릭 > New > view 이름의 폴더 생성
- view 폴더 우 클릭 > New > forward 이름의 JSP File 생성
## 실습
- 객체 바인딩과 forward 이용
- Controller는 아래와 같다.
package kr.bit.forward;
import java.io.IOException;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import kr.bit.model.MemberVO;
@WebServlet("/fc.do")
public class ForwardController extends HttpServlet {
protected void service(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String name = "park";
int age = 45;
String email = "aaaa@gmail.com";
// vo 이용 데이터 담기
MemberVO vo = new MemberVO();
vo.setName(name);
vo.setAge(age);
vo.setEmail(email);
// 객체 바인딩
request.setAttribute("vo", vo);
// forward.jsp
RequestDispatcher rd = request.getRequestDispatcher("view/forward.jsp");
rd.forward(request, response);
}
}
- JSP는 아래와 같다.
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ page import="kr.bit.model.*" %>
<%
MemberVO vo = (MemberVO)request.getAttribute("vo");
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
Controller에서 받은 데이터 출력
이름 : <%=vo.getName() %>
나이 : <%=vo.getAge() %>
이메일 : <%=vo.getEmail() %>
</body>
</html>
- 결과물
반응형
'인프런 강의 학습 > MVC 프레임워크_나프1탄' 카테고리의 다른 글
인프런 MVC 프레임워크는 내손에 36일차 : MVC03_07 MVC 회원관리 흐름도 (0) | 2021.06.15 |
---|---|
인프런 MVC 프레임워크는 내손에 35일차 : MVC03_06 Basic MVC 완성 (0) | 2021.06.15 |
인프런 MVC 프레임워크는 내손에 33일차 : MVC03_01 ~ 03 MVC03(Model2 방식)개요, 포워드(forward) 기법, 요청의뢰와 객체 바인딩 (0) | 2021.06.10 |
인프런 MVC 프레임워크는 내손에 32일차 : MVC02_07 MVC02정리 및 Model 2방식 (0) | 2021.06.09 |
인프런 MVC 프레임워크는 내손에 31일차 : MVC02_05~06 회원리스트 및 삭제 구현 (0) | 2021.06.09 |