http://bootstrapk.com/components/#dropdowns
s09_dropdownMenu.html 생성<!DOCTYPE html>
<html lang="ko">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width,initial-scale=1.0">
<title>bootstrap</title>
<link rel="stylesheet" href="../css/bootstrap.min.css" type="text/css">
</head>
<body>
	<div class="container">
		<h4>드롭다운</h4>
		<div class="dropdown">
			<a href="#" class="dropdown-toggle" data-toggle="dropdown">Dropdown <b class="caret"></b></a> <!-- caret 클래스는 작은 역삼각형을 추가함 -->
			<ul class="dropdown-menu">
				<li><a href="#">Action</a></li>
				<li><a href="#">Product</a></li>
				<li><a href="#">Info</a></li>
				<li class="divider"></li>
				<li><a href="#">About</a></li>
			</ul>
		</div>
	</div>
	<script type="text/javascript" src="../js/jquery-3.6.0.min.js"></script>
	<script type="text/javascript" src="../js/bootstrap.min.js"></script>
</body>
</html>
http://bootstrapk.com/components/#navbar
s10_navbar.html 생성<!DOCTYPE html>
<html lang="ko">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width,initial-scale=1.0">
<title>bootstrap</title>
<link rel="stylesheet" href="../css/bootstrap.min.css" type="text/css">
</head>
<body>
	<div class="container">
		<h4>기본 형태</h4>
		<nav class="navbar navbar-default">
			<div class="navbar-header">
				<a class="navbar-brand" href="#">Star</a> <!-- 사이트명 -->
			</div>
			<ul class="nav navbar-nav"> <!-- 메뉴 -->
				<li class="active"><a href="#">Home</a></li>
				<li><a href="#">Game</a></li>
				<li><a href="#">Setting</a></li>
			</ul>
		</nav>
		
		<h4>드롭다운</h4>
		<nav class="navbar navbar-default">
			<div class="navbar-header">
				<button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-ex1-collapse"> <!-- class는 스타일 부여, data- 속성은 JavaScript와 연동되어 기능 부여 -->
					<span class="sr-only">Toggle navigation</span> <!-- 화면에는 렌더링되지 않고 소스 및 스크린 리더에서만 확인 가능한 문구 -->
					<span class="icon-bar"></span> <!-- 토글 버튼에 표시될 바 -->
					<span class="icon-bar"></span>
					<span class="icon-bar"></span>
				</button>
				<a class="navbar-brand" href="#">Star</a> <!-- 사이트명 -->
			</div>
			<div class="collapse navbar-collapse navbar-ex1-collapse"> <!-- data-target과 연동되어 토글 버튼을 눌렀을 때 collapse될 메뉴 -->
				<ul class="nav navbar-nav"> <!-- 메뉴 -->
					<li class="active"><a href="#">Home</a></li>
					<li><a href="#">About</a></li>
					<li class="dropdown">
						<a href="#" class="dropdown-toggle" data-toggle="dropdown">Dropdown <b class="caret"></b></a>
						<ul class="dropdown-menu">
							<li><a href="#">Product</a></li>
							<li><a href="#">Shopping</a></li>
							<li><a href="#">Contact</a></li>
							<li><a href="#">Info</a></li>
							<li><a href="#">Service</a></li>
						</ul>
					</li>
				</ul>
			</div>
		</nav>
		
		<h4>검색</h4>
		<nav class="navbar navbar-default">
			<div class="navbar-header">
				<button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-ex2-collapse"> <!-- data-target은 페이지 내에서 unique해야 함 -->
					<span class="sr-only">Toggle navigation</span>
					<span class="icon-bar"></span>
					<span class="icon-bar"></span>
					<span class="icon-bar"></span>
				</button>
				<a href="#" class="navbar-brand">Star</a> <!-- 사이트명 -->
			</div>
			
			<div class="collapse navbar-collapse navbar-ex2-collapse"> <!-- data-target과 연동되어 토글 버튼을 눌렀을 때 collapse될 메뉴 -->
				<ul class="nav navbar-nav"> <!-- 메뉴 -->
					<li><a href="#">Home</a></li>
					<li class="active"><a href="#">About</a></li>
					<li class="dropdown">
						<a href="#" class="dropdown-toggle" data-toggle="dropdown">Dropdown <b class="caret"></b></a>
						<ul class="dropdown-menu">
							<li><a href="#">Product</a></li>
							<li><a href="#">Service</a></li>
							<li><a href="#">Contact</a></li>
							<li><a href="#">Global</a></li>
						</ul>
					</li>
				</ul>		
				<form class="navbar-form navbar-right"> <!-- 검색 창을 네비게이션 바 오른쪽에 표시 -->
					<div class="form-group">
						<input type="text" class="form-control" placeholder="search">
					</div>
					<button type="submit" class="btn btn-default">Submit</button>
				</form>
			</div>
		</nav>
	</div>
	<script type="text/javascript" src="../js/jquery-3.6.0.min.js"></script>
	<script type="text/javascript" src="../js/bootstrap.min.js"></script>
</body>
</html>
http://bootstrapk.com/components/#pagination
s11_pagination.html 생성<!DOCTYPE html>
<html lang="ko">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width,initial-scale=1.0">
<title>bootstrap</title>
<link rel="stylesheet" href="../css/bootstrap.min.css" type="text/css">
</head>
<body>
	<div class="container">
		<h4>기본 페이지네이션</h4>
		<ul class="pagination">
			<li><a href="#">«</a></li> <!-- « -->
			<li><a href="#">1</a></li>
			<li><a href="#">2</a></li>
			<li><a href="#">3</a></li>
			<li><a href="#">4</a></li>
			<li><a href="#">5</a></li>
			<li><a href="#">»</a></li> <!-- » -->
		</ul>
		<h4>비활성화 그리고 활성화</h4>
		<ul class="pagination">
			<li class="disabled"><a href="#">«</a></li> <!-- « -->
			<li class="active"><a href="#">1 <span class="sr-only">(current)</span></a></li>
			<li><a href="#">2</a></li>
			<li><a href="#">3</a></li>
			<li><a href="#">4</a></li>
			<li><a href="#">5</a></li>
			<li><a href="#">»</a></li> <!-- » -->
		</ul>
		<h4>크기</h4>
		<ul class="pagination pagination-lg"> <!-- 큰 크기 -->
			<li><a href="#">1</a></li>
			<li><a href="#">2</a></li>
		</ul>
		<ul class="pagination"> <!-- 기본 크기 -->
			<li><a href="#">1</a></li>
			<li><a href="#">2</a></li>
		</ul>
		<ul class="pagination pagination-sm"> <!-- 작은 크기 -->
			<li><a href="#">1</a></li>
			<li><a href="#">2</a></li>
		</ul>
		
		<h4>페이지 기본 예제</h4>
		<ul class="pager">
			<li><a href="#">Previous</a></li>
			<li><a href="#">Next</a></li>
		</ul>
	</div>
	<script type="text/javascript" src="../js/jquery-3.6.0.min.js"></script>
	<script type="text/javascript" src="../js/bootstrap.min.js"></script>
</body>
</html>
http://bootstrapk.com/components/#alerts
s12_alert.html 생성<!DOCTYPE html>
<html lang="ko">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width,initial-scale=1.0">
<title>bootstrap</title>
<link rel="stylesheet" href="../css/bootstrap.min.css" type="text/css">
</head>
<body>
	<div class="container">
		<h4>알림 삭제</h4>
		<div class="alert alert-danger fade in"> <!-- 알림 창 스타일 부여; fade와 in은 사라질 때의 효과 -->
			<button type="button" class="close" data-dismiss="alert">×</button> <!-- 버튼을 누르면 알림 창이 사라지는 기능 부여 -->
			오늘은 황사 때문에 마스크를 꼭 착용해주세요!
		</div>
		
		<h4>알림 메시지</h4>
		<div class="alert alert-success">
			오늘은 <strong>황사</strong> 때문에 마스크를 꼭 착용해주세요!
		</div>
		<div class="alert alert-info">
			오늘은 <strong>황사</strong> 때문에 마스크를 꼭 착용해주세요!
		</div>
		<div class="alert alert-warning">
			오늘은 <strong>황사</strong> 때문에 마스크를 꼭 착용해주세요!
		</div>
	</div>
	<script type="text/javascript" src="../js/jquery-3.6.0.min.js"></script>
	<script type="text/javascript" src="../js/bootstrap.min.js"></script>
</body>
</html>
http://bootstrapk.com/javascript/#modals
s13_modal.html 생성<!DOCTYPE html>
<html lang="ko">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width,initial-scale=1.0">
<title>bootstrap</title>
<link rel="stylesheet" href="../css/bootstrap.min.css" type="text/css">
</head>
<body>
	<div class="container">
		<h4>모달</h4>	
		<a href="#myModal" class="btn btn-primary" data-toggle="modal">모달 보여주기</a> <!-- 버튼을 누르면 모달 창이 나타남; 부모 영역 클릭시 모달 창은 사라짐 -->
		
		<!-- Modal -->
		<div class="modal fade" id="myModal">
			<div class="modal-dialog">
				<div class="modal-content">
					<div class="modal-header">
						<button type="button" class="close" data-dismiss="modal">×</button>
						<h3 id="myModalLabel">Modal Header</h3>
					</div>
					<div class="modal-body">
						<p>Modal Content</p>
					</div>
					<div class="modal-footer">
						<button class="btn" data-dismiss="modal">Close</button>
						<button class="btn btn-primary">Save Changes</button>
					</div>
				</div>
			</div>
		</div>
	</div>
	<script type="text/javascript" src="../js/jquery-3.6.0.min.js"></script>
	<script type="text/javascript" src="../js/bootstrap.min.js"></script>
</body>
</html>
s14_modal_login.html 생성<!DOCTYPE html>
<html lang="ko">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width,initial-scale=1.0">
<title>bootstrap</title>
<link rel="stylesheet" href="../css/bootstrap.min.css" type="text/css">
</head>
<body>
	<div class="container">
		<h4>모달 : 로그인 화면</h4>	
		<a href="#Login" class="btn btn-primary" data-toggle="modal">로그인</a> <!-- 버튼을 누르면 모달 창이 나타남; 부모 영역 클릭시 모달 창은 사라짐 -->
		
		<!-- Modal -->
		<div class="modal fade" id="Login">
			<div class="modal-dialog">
				<div class="modal-content">
					<div class="modal-header">
						<button type="button" class="close" data-dismiss="modal">×</button>
						<h3 id="myModalLabel">로그인</h3>
					</div>
					<div class="modal-body">
						<form action="1.jsp" method="post">
							<div class="form-group">
								<label class="sr-only" for="email">아이디</label>
								<input class="form-control" type="text" id="email" placeholder="아이디">
							</div>
							<div class="form-group">
								<label class="sr-only" for="password">비밀번호</label>
								<input class="form-control" type="password" id="password" placeholder="비밀번호">
							</div>
							<input class="btn btn-primary" type="submit" value="로그인">
						</form>
					</div>
				</div>
			</div>
		</div>
	</div>
	<script type="text/javascript" src="../js/jquery-3.6.0.min.js"></script>
	<script type="text/javascript" src="../js/bootstrap.min.js"></script>
	<script type="text/javascript">
		$('#Login').modal(); /* modal() 메서드를 호출하면 화면 실행시 모달 창이 바로 표시됨 */
	</script>
</body>
</html>
http://bootstrapk.com/javascript/#carousel
s14_carousel.html 생성<!DOCTYPE html>
<html lang="ko">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width,initial-scale=1.0">
<title>bootstrap</title>
<link rel="stylesheet" href="../css/bootstrap.min.css" type="text/css">
</head>
<body>
	<div class="container">
		<h4>Carousel</h4>	
		<div class="row">
			<div class="col-md-9">
				<div id="carousel-example-generic" class="carousel slide" data-ride="carousel">
					<!-- Indicators -->
					<ol class="carousel-indicators">
						<li data-target="#carousel-example-generic" data-slide-to="0" class="active"></li>
						<li data-target="#carousel-example-generic" data-slide-to="1"></li>
						<li data-target="#carousel-example-generic" data-slide-to="2"></li>
						<li data-target="#carousel-example-generic" data-slide-to="3"></li>
					</ol>
					
					<!-- 이미지 링크 -->
					<div class="carousel-inner">
						<div class="item active">
							<img src="../images/Koala.jpg" alt="First slide">
							<div class="carousel-caption">
								<h3>Koala</h3>
								<p>Animal World!</p>
							</div>
						</div>
						<div class="item">
							<img src="../images/Lighthouse.jpg" alt="Second slide">
							<div class="carousel-caption">
								<h3>Lighthouse</h3>
								<p>Animal World!</p>
							</div>
						</div>
						<div class="item">
							<img src="../images/Penguins.jpg" alt="Third slide">
							<div class="carousel-caption">
								<h3>Penguins</h3>
								<p>Animal World!</p>
							</div>
						</div>
						<div class="item">
							<img src="../images/Tulips.jpg" alt="Fourth slide">
							<div class="carousel-caption">
								<h3>Tulips</h3>
								<p>Animal World!</p>
							</div>
						</div>
					</div> <!-- end of carousel-inner -->
					
					<!-- Controls -->
					<a class="left carousel-control" href="#carousel-example-generic" data-slide="prev"><span class="glyphicon glyphicon-chevron-left"></span></a>
					<a class="right carousel-control" href="#carousel-example-generic" data-slide="next"><span class="glyphicon glyphicon-chevron-right"></span></a>
				</div>
			</div>
		</div>
	</div>
	<script type="text/javascript" src="../js/jquery-3.6.0.min.js"></script>
	<script type="text/javascript" src="../js/bootstrap.min.js"></script>
</body>
</html>
ch02-sample 생성하고 새 HTML 파일 s01_sample.html 생성<!DOCTYPE html>
<html lang="ko">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width,initial-scale=1.0">
<title>bootstrap</title>
<link rel="stylesheet" href="../css/bootstrap.min.css" type="text/css">
</head>
<body>
	<div class="container">
		<!-- 상단 네비게이션 시작 -->
		<div class="row">
			<nav class="navbar navbar-default">
				<div class="navbar-header">
					<button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-collapse">
					<span class="sr-only">Toggle navigation</span>
					<span class="icon-bar"></span>
					<span class="icon-bar"></span>
					<span class="icon-bar"></span>
					</button>
					<a class="navbar-brand">서울</a>
				</div>
				<!-- 상단 메뉴 -->
				<div class="collapse navbar-collapse">
					<ul class="nav navbar-nav">
						<li class="active"><a href="#">Home</a></li>
						<li><a href="#">Game</a></li>
						<li><a href="#">Setting</a></li>
					</ul>
					<form action="1.jsp" class="navbar-form navbar-right">
						<div class="form-group"> <!-- 여백 제어 -->
							<input type="text" class="form-control" placeholder="search">
						</div>
						<button type="submit" class="btn btn-primary">Submit</button>
					</form>
				</div>
			</nav>
		</div>
		<!-- 상단 네비게이션 끝 -->
		<!-- 점보트론 시작 -->
		<div class="row">
			<div class="jumbotron">
				<h1>Hello, Bootstrap!</h1>
				<p>부트스트랩을 이용해서 다양한 화면을 구성하고 반응형으로 문서를 작성할 수 있습니다. 부트스트랩은 주로 사용되는 버전이 3, 4, 5 버전이며 주기적으로 버전 업이 되기 때문에 향상된 기능을 사용할 수 있습니다.</p>
				<p><a class="btn btn-success btn-lg">Learn more</a></p>
			</div>
		</div>
		<!-- 점보트론 끝 -->
		<!-- 중앙 컨텐츠 시작 -->
		<div class="row">
			<div class="col-sm-6 col-lg-4"> <!-- 데스크탑에서는 가로로 3분할, 태블릿에서는 가로로 2분할, 모바일에서는 세로로 배치됨 -->
				<h2>영화</h2>
				<p>작년에 개봉한 영화는 코로나의 영향으로 관객 수가 많이 줄어들었습니다. 올해 제작된 영화는 관객의 선택을 받기 위해 다양한 시도가 있을 것으로 기대됩니다.</p>
				<p>
					<a href="#" class="btn btn-success">View Details »</a>
				</p>
			</div>
			<div class="col-sm-6 col-lg-4">
				<h2>영화</h2>
				<p>작년에 개봉한 영화는 코로나의 영향으로 관객 수가 많이 줄어들었습니다. 올해 제작된 영화는 관객의 선택을 받기 위해 다양한 시도가 있을 것으로 기대됩니다.</p>
				<p>
					<a href="#" class="btn btn-success">View Details »</a>
				</p>
			</div>
			<div class="col-sm-6 col-lg-4">
				<h2>영화</h2>
				<p>작년에 개봉한 영화는 코로나의 영향으로 관객 수가 많이 줄어들었습니다. 올해 제작된 영화는 관객의 선택을 받기 위해 다양한 시도가 있을 것으로 기대됩니다.</p>
				<p>
					<a href="#" class="btn btn-success">View Details »</a>
				</p>
			</div>
			<div class="col-sm-6 col-lg-4">
				<h2>영화</h2>
				<p>작년에 개봉한 영화는 코로나의 영향으로 관객 수가 많이 줄어들었습니다. 올해 제작된 영화는 관객의 선택을 받기 위해 다양한 시도가 있을 것으로 기대됩니다.</p>
				<p>
					<a href="#" class="btn btn-success">View Details »</a>
				</p>
			</div>
			<div class="col-sm-6 col-lg-4">
				<h2>영화</h2>
				<p>작년에 개봉한 영화는 코로나의 영향으로 관객 수가 많이 줄어들었습니다. 올해 제작된 영화는 관객의 선택을 받기 위해 다양한 시도가 있을 것으로 기대됩니다.</p>
				<p>
					<a href="#" class="btn btn-success">View Details »</a>
				</p>
			</div>
			<div class="col-sm-6 col-lg-4">
				<h2>영화</h2>
				<p>작년에 개봉한 영화는 코로나의 영향으로 관객 수가 많이 줄어들었습니다. 올해 제작된 영화는 관객의 선택을 받기 위해 다양한 시도가 있을 것으로 기대됩니다.</p>
				<p>
					<a href="#" class="btn btn-success">View Details »</a>
				</p>
			</div>
		</div>
		<!-- 중앙 컨텐츠 끝 -->
		<!-- 푸터 시작 -->
		<hr>
		<div>
			<p class="text-center">© 서울</p>
		</div>
		<!-- 푸터 끝 -->
	</div>
	<script type="text/javascript" src="../js/jquery-3.6.0.min.js"></script>
	<script type="text/javascript" src="../js/bootstrap.min.js"></script>
</body>
</html>
s02_sample.html 생성<!DOCTYPE html>
<html lang="ko">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width,initial-scale=1.0">
<title>bootstrap</title>
<link rel="stylesheet" href="../css/bootstrap.min.css" type="text/css">
</head>
<body>
	<!-- 상단 고정 네비게이션 시작 -->
	<div class="navbar navbar-inverse navbar-fixed-top"> <!-- navbar-default는 밝은 색 메뉴 바, navbar-inverse는 어두운 색 메뉴 바; navbar-fixed-top은 메뉴 바를 상단에 고정시킴 -->
		<div class="container"> <!-- container를 navbar 안에 두면 여백 없이 꽉 찬 메뉴 바가 만들어짐 -->
			<div class="navbar-header">
				<button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-collapse">
					<span class="sr-only">Toggle Navigation</span>
					<span class="icon-bar"></span>
					<span class="icon-bar"></span>
					<span class="icon-bar"></span>
				</button>
				<a class="navbar-brand" href="#">Project World</a>
			</div>
			<div class="navbar-collapse collapse">
				<ul class="nav navbar-nav">
					<li class="active"><a href="#">Home</a></li>
					<li><a href="#">Home</a></li>
					<li><a href="#">Home</a></li>
				</ul>
			</div>
		</div>
	</div>
	<!-- 상단 고정 네비게이션 끝 -->
	<!-- 전체 화면 점보트론 시작 -->
	<div class="jumbotron">
		<div class="container"> <!-- container를 jumbotron 안에 두면 여백 없이 꽉 찬 점보트론이 만들어짐 -->
			<h1>Hello, Bootstrap!</h1>
			<p>부트스트랩을 이용해서 다양한 화면을 구성하고 반응형으로 문서를 작성할 수 있습니다. 부트스트랩은 주로 사용되는 버전이 3, 4, 5 버전이며 주기적으로 버전 업이 되기 때문에 향상된 기능을 사용할 수 있습니다.</p>
			<p><a class="btn btn-success btn-lg">Learn more</a></p>
		</div>
	</div>
	<!-- 전체 화면 점보트론 끝 -->
	<div class="container">
		<!-- 중앙 컨텐츠 시작 -->
		<div class="row">
			<div class="col-sm-6 col-lg-4">
				<h2>음악</h2>
				<img src="../images/Lighthouse.jpg" class="img-thumbnail">
				<p>작년에 개봉한 영화는 코로나의 영향으로 관객 수가 많이 줄어들었습니다. 올해 제작된 영화는 관객의 선택을 받기 위해 다양한 시도가 있을 것으로 기대됩니다.</p>
				<p>
					<a href="#" class="btn btn-success">View Details »</a>
				</p>
			</div>
			<div class="col-sm-6 col-lg-4">
				<h2>음악</h2>
				<img src="../images/Lighthouse.jpg" class="img-thumbnail">
				<p>작년에 개봉한 영화는 코로나의 영향으로 관객 수가 많이 줄어들었습니다. 올해 제작된 영화는 관객의 선택을 받기 위해 다양한 시도가 있을 것으로 기대됩니다.</p>
				<p>
					<a href="#" class="btn btn-success">View Details »</a>
				</p>
			</div>
			<div class="col-sm-6 col-lg-4">
				<h2>음악</h2>
				<img src="../images/Lighthouse.jpg" class="img-thumbnail">
				<p>작년에 개봉한 영화는 코로나의 영향으로 관객 수가 많이 줄어들었습니다. 올해 제작된 영화는 관객의 선택을 받기 위해 다양한 시도가 있을 것으로 기대됩니다.</p>
				<p>
					<a href="#" class="btn btn-success">View Details »</a>
				</p>
			</div>
			<div class="col-sm-6 col-lg-4">
				<h2>음악</h2>
				<img src="../images/Lighthouse.jpg" class="img-thumbnail">
				<p>작년에 개봉한 영화는 코로나의 영향으로 관객 수가 많이 줄어들었습니다. 올해 제작된 영화는 관객의 선택을 받기 위해 다양한 시도가 있을 것으로 기대됩니다.</p>
				<p>
					<a href="#" class="btn btn-success">View Details »</a>
				</p>
			</div>
			<div class="col-sm-6 col-lg-4">
				<h2>음악</h2>
				<img src="../images/Lighthouse.jpg" class="img-thumbnail">
				<p>작년에 개봉한 영화는 코로나의 영향으로 관객 수가 많이 줄어들었습니다. 올해 제작된 영화는 관객의 선택을 받기 위해 다양한 시도가 있을 것으로 기대됩니다.</p>
				<p>
					<a href="#" class="btn btn-success">View Details »</a>
				</p>
			</div>
			<div class="col-sm-6 col-lg-4">
				<h2>음악</h2>
				<img src="../images/Lighthouse.jpg" class="img-thumbnail">
				<p>작년에 개봉한 영화는 코로나의 영향으로 관객 수가 많이 줄어들었습니다. 올해 제작된 영화는 관객의 선택을 받기 위해 다양한 시도가 있을 것으로 기대됩니다.</p>
				<p>
					<a href="#" class="btn btn-success">View Details »</a>
				</p>
			</div>
		</div>
		<!-- 중앙 컨텐츠 끝 -->
		<!-- 푸터 시작 -->
		<hr>
		<div id="footer">
			<p class="text-center">© Project World</p>
		</div>
		<!-- 푸터 끝 -->
	</div>
	<script type="text/javascript" src="../js/jquery-3.6.0.min.js"></script>
	<script type="text/javascript" src="../js/bootstrap.min.js"></script>
</body>
</html>
웹 서버(WS)
클라이언트
웹 서버
웹 어플리케이션 서버(WAS)
DB
클라이언트(=브라우저)는 URL을 통해 웹 서버에 HTML을 요청(request)
웹 서버는 클라이언트의 요청을 웹 어플리케이션 서버(=WAS)에 전달
웹 어플리케이션 서버는 (DB로부터 데이터를 받아) Servlet과 JSP로 HTML을 생성 후 웹 서버에 전달
웹 서버는 클라이언트에 HTML을 응답(response)
Tomcat이 웹 서버와 웹 어플리케이션 서버를 모두 담당할 수도 있지만, Tomcat 자체는 WAS 특화이므로 상용 서비스에는 웹 서버와 WAS를 분리하여 사용
url로 데이터 보내면 컨테이너가 감지해서 객체에 담아서 보냄...
servletMain 입력 후 Next-Next-Generate web.xml depolyment descriptor 선택 후 Finishsrc/main/webapp 폴더 오른쪽 클릭하고 새 JSP 파일 index.jsp 생성<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Hello JSP!</title>
</head>
<body>
Hello JSP!
</body>
</html>
bin
bin 폴더를 사용하지 않고 이클립스에서 제어conf
liblogs
temp
webapps
work
src/main/java 폴더 오른쪽 클릭하고 새 패키지 kr.web.ch01 생성 후 새 클래스 HelloWorld 생성
package kr.web.ch01;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.annotation.WebServlet;
import javax.servlet.ServletException;
import java.io.IOException;
import java.io.PrintWriter;
// HttpServlet 클래스를 상속시키면 클라이언트가 주소를 통해 해당 서블릿을 호출하고, 호출된 서블릿은 HTML을 생성해서 클라이언트로 전송
@WebServlet("/helloworld") // 주소 매핑; 기본적으로는 가상 폴더 servlet 하위에 패키지명.클래스명 형식으로 HTML이 생성되는데, 이러한 기본 주소는 보안에 취약하여 Tomcat에서 호출을 허용하지 않음
public class HelloWorld extends HttpServlet {
	
	// HTML을 생성하는 메서드 정의
	@Override public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // Tomcat의 웹 컨테이너가 객체를 생성하여 인자로 전달
		// 문서 타입 및 캐릭터셋 지정
		response.setContentType("text/html;charset=utf-8");
		
		// HTML 출력을 위한 출력 스트림 생성
		PrintWriter out = response.getWriter();
		out.println("<html>");
		out.println("<head><title>Hello Servlet!</title></head>");
		out.println("<body>");
		out.println("처음 작성하는 Servlet입니다.");
		out.println("</body>");
		out.println("</html>");
		out.close(); // 자원 정리
	}
}
NowServlet 생성package kr.web.ch01;
import java.io.IOException;
import java.io.PrintWriter;
import java.text.SimpleDateFormat;
import java.util.Date;
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("/now") // 주소 매핑
public class NowServlet extends HttpServlet { // URL로 요청하면 해당 서블릿이 동작
	// HttpServlet의 doGet 재정의
	@Override
	public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		Date now = new Date();
		SimpleDateFormat sf = new SimpleDateFormat("yyyy년 MM월 dd일 a hh:mm:ss");
		
		// 문서 타입 및 캐릭터셋 지정
		response.setContentType("text/html;charset=utf-8");
		
		// HTML 출력을 위한 출력 스트림 생성
		PrintWriter out = response.getWriter();
		out.println("<html>");
		out.println("<head><title>현재 날짜와 시간</title></head>");
		out.println("<body>");
		out.println("현재 날짜와 시간 : " + sf.format(now));
		out.println("</body>");
		out.println("</html>");
		out.close();
	}
}
HundredServlet 생성package kr.web.ch01;
import java.io.IOException;
import java.io.PrintWriter;
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("/hundred")
public class HundredServlet extends HttpServlet {
	/*
	 * [실습 문제] 1부터 100까지의 합 출력(반복문 활용)
	 * [출력 예시] 1부터 100까지의 합 : 5050
	 */
	@Override
	public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		int sum = 0;
		for(int i=1;i<=100;i++) {
			sum += i;
		}
		
		response.setContentType("text/html;charset=utf-8");
		
		PrintWriter out = response.getWriter();
		out.println("<html>");
		out.println("<head><title>1부터 100까지의 합</title></head>");
		out.println("<body>");
		out.println("1부터 100까지의 합 : " + sum);
		out.println("</body>");
		out.println("</html>");
		out.close();
	}
}