반응형

# 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>
  • 결과물

반응형

+ Recent posts