본문으로 바로가기

01 폼 페이지에서 입력된 데이터를 전달하는 요청 파라미터 값을 JSP 페이지로 가져오는 내장 객체는 무엇인지, 그리고 관련된 메소드에 대해 간단히 설명하시오.

  • request 내장 객체
    • getParameter(String name) : 이름이 name인 파라미터 전달받음, 파라미터 없으면 null 반환
    • getParameterValues(String name) : 이름이 name인 파라미터를 배열로 전달받음, 파라미터 없으면 null 반환
    • getParameterNames() : 모든 요청 파라미터의 이름과 값을 Enumeration 객체로 전달받음
    • getParameterMap() : 모든 요청 파라미터의 이름과 값을 Map 객체로 전달받음

02 서버에서 웹 브라우저에 다른 페이지로 강제 이동하도록 명령하는 내장 객체와 관련된 메소드는 무엇인가?

  • response 내장 객체 / sendRedirect() 메소드

03 스크립트 태그의 표현문과 같이 데이터를 출력하는 내장 객체는 무엇인가?

  • out 내장 객체

04 request 내장 객체를 이용하여 다음 조건에 맞게 JSP 애플리케이션을 만들고 실행 결과를 확인하시오.

request.jsp 파일을 생성합니다.

  • input 태그내에 text 유형을 이용하여 아이디, 비밀번호, 항목을 작성합니다.
  • form 태그action 속성 값은 request_process.jsp로, method 속성 값get으로 작성합니다.

request_process.jsp 파일을 생성합니다.

  • request 내장 객체의 getQueryString() 메소드를 이용하여 전송된 요청 파라미터와 값을 출력합니다.

③ 웹 브라우저에 http://localhost:8080/Exercise/ch05/request.jsp를 입력하여 실행 결과를 확인합니다.

코드 - request.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"%>
<html>
<head>
<title>5장 4번문제</title>
</head>
<body>
    <form action="request_process.jsp" method="get">
        <p> 아이디: <input type="text" name="id">
        <p> 비밀번호: <input type="text" name="password">
        <p> <input type="submit" value="전송">
    </form>
</body>
</html>

코드 - request_process.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"%>
<html>
<head>
<title>5장 4번문제</title>
</head>
<body>
    전송된 요청 파라미터:<%=request.getQueryString() %>
</body>
</html>

05 response내장 객체를 이용하여 다음 조건에 맞게 JSP 애플리케이션을 만들고 실행 결과를 확인하시오.

response.jsp 파일을 생성합니다.

  • response 내장 객체의 setHeader() 메소드를 이용하여 5초마다 페이지를 갱신하도록 작성합니다.
  • java.util.Calendar 클래스를 이용하여 현재 시간을 출력하도록 작성합니다.
  • **<Google 홈페이지로 이동하기>**를 클릭하면 response_data.jsp 파일을 연결하도록 작성합니다.

response_data.jsp 파일을 생성합니다.

  • response 내장 객체의 sendRedirect() 메소드를 이용하여 구글 홈페이지로 이동하도록 작성합니다.

③ 웹 브라우저에 http://localhost:8080/Exercise/ch05/response.jsp를 입력하여 실행 결과를 확인합니다.

코드 - response.jsp

<%@page import="java.util.Calendar"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>5장 5번 문제</title>
</head>
<body>
	<%
		response.setIntHeader("Refresh", 5);				// 5초마다 갱신
		Calendar calendar = Calendar.getInstance();
	
		int hour = calendar.get(Calendar.HOUR_OF_DAY);		// 시
		int minute = calendar.get(Calendar.MINUTE);			// 분
		int second = calendar.get(Calendar.SECOND);			// 초
		
		String ap;											// am, pm - 오전, 오후
		
		if (hour > 12) {
			hour -= 12;
			ap = "PM";
		} else {
			ap = "AM";
		}
		String time = hour + ":" + minute + ":" + second + " " + ap;
	%>
	<p>현재 시간: <%= time %></p>
	<a href="./response_data.jsp">Google 홈페이지로 이동하기</a>
</body>
</body>
</html>

코드 - response_data.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%
	response.sendRedirect("https://www.google.com/");
%>

06 다음 조건에 맞게 도서 웹 쇼핑몰을 위한 웹 애플리케이션을 만들고 실행 결과를 확인하시오.

최초 실행 화면
각 도서 목록의 상세 정보 페이지

① 생성된 BookMarket 프로젝트를 사용합니다.

src폴더 내의 BookRepository 클래스에 도서 아이디와 일치하는 도서를 가져오는 getBookById()메소드를 작성합니다.

products.jsp 파일에 도서 아이디에 대한 도서 상세 정보 페이지가 연결되도록 <상세정보> 버튼을 작성합니다.

④ 도서 상세 정보 페이지 product.jsp 파일을 생성합니다.

  • request 내장 객체를 이용하여 도서 아이디를 전달받아 자바빈즈 BookRepository에서 도서 상세 정보를 얻어옵니다.
  • 자바빈즈 BookRepository를 이용하여 도서 상세 정보를 출력합니다.

⑤ 웹 브라우저에 http://localhost:8080/BookMarket/books.jsp를 입력하고 해당 페이지에서 <상세정보>를 클릭하며 결과를 확인합니다.

코드 - Book.java

package vo;

import java.io.Serializable;

public class Book implements Serializable {

	private static final long serialVersionUID = -4274700572038677000L;

	private String bookId; 		    // 책 ID
	private String name;			// 책이름
	private Integer unitPrice; 		// 가격
	private String author;			// 저자
	private String description; 	// 설명
	private String publisher;	    // 출판사
	private String category; 		// 분류
	private long unitsInStock; 		// 재고개수
	private long totalPages; 		// 페이지수
	private String releaseDate;   	// 출판일(월/년)
	private String condition; 		// 신제품
	private String filename;		// 파일명
	private int quantity;			// 장바구니 담는 갯수

	public Book() {}
	public Book(String bookId, String name, Integer unitPrice) {		
		this.bookId = bookId;
		this.name = name;
		this.unitPrice = unitPrice;
	}

	public String getBookId() {
		return bookId;
	}
	public void setBookId(String bookId) {
		this.bookId = bookId;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public Integer  getUnitPrice() {
		return unitPrice;
	}
	public void setUnitPrice(Integer  unitPrice) {
		this.unitPrice = unitPrice;
	}
	public String getAuthor() {
		return author;
	}
	public void setAuthor(String author) {
		this.author = author;
	}
	public String getDescription() {
		return description;
	}
	public void setDescription(String description) {
		this.description = description;
	}
	public String getPublisher() {
		return publisher;
	}
	public void setPublisher(String publisher) {
		this.publisher = publisher;
	}
	public String getCategory() {
		return category;
	}
	public void setCategory(String category) {
		this.category = category;
	}
	public long getUnitsInStock() {
		return unitsInStock;
	}
	public void setUnitsInStock(long unitsInStock) {
		this.unitsInStock = unitsInStock;
	}
	public long getTotalPages() {
		return totalPages;
	}
	public void setTotalPages(long totalPages) {
		this.totalPages = totalPages;
	}
	public String getReleaseDate() {
		return releaseDate;
	}
	public void setReleaseDate(String releaseDate) {
		this.releaseDate = releaseDate;
	}
	public String getCondition() {
		return condition;
	}
	public void setCondition(String condition) {
		this.condition = condition;
	}
	public String getFilename() {
		return filename;
	}
	public void setFilename(String filename) {
		this.filename = filename;
	}
	public int getQuantity() {
		return quantity;
	}
	public void setQuantity(int quantity) {
		this.quantity = quantity;
	}
	
	@Override
	public String toString() {
		return "Book [bookId=" + bookId + ", name=" + name + ", unitPrice=" + unitPrice + ", author=" + author
				+ ", description=" + description + ", publisher=" + publisher + ", category=" + category
				+ ", unitsInStock=" + unitsInStock + ", totalPages=" + totalPages + ", releaseDate=" + releaseDate
				+ ", condition=" + condition + ", filename=" + filename + ", quantity=" + quantity + "]";
	}
	
}

코드 - BookRepository.java

package dao;

import java.util.ArrayList;

import vo.Book;

public class BookRepository{
	
	private ArrayList<Book> listOfBooks = new ArrayList<Book>();
	private static BookRepository instance = new BookRepository();
	public static BookRepository getInstance() {
		return instance;
	}
	
	public BookRepository() {
		Book book1= new Book("ISBN1234","HTML5+CSS3", 15000);
		book1.setAuthor("황재호");
		book1.setDescription("워드나 PPT 문서를 만들 수 있나요? 그러면 문제 없습니다. 지금 바로 웹페이지 제작에 도전해보세요. 지금 당장 컴퓨터가 없어도 괜찮습니다. 코드와 실행 화면이 바로 보여서 눈으로만 읽어도 어떻게 작동하는지 쉽게 파악할 수 있는 것은 기본이고, 중간중간 퀴즈를 추가하여 재미있게 게임하듯 복습할 수 있습니다.");
		book1.setPublisher("한빛미디어");
		book1.setCategory("Hello Coding");
		book1.setUnitsInStock(1000);
		book1.setTotalPages(288);
		book1.setReleaseDate("2018/03/02");
		book1.setFilename("ISBN1234.jpg");
		
		Book book2 = new Book("ISBN1235","쉽게 배우는 자바 프로그래밍", 27000);
		book2.setAuthor("우종중");
		book2.setDescription("객체 지향의 핵심과 자바의 현대적 기능을 충실히 다루면서도초보자가 쉽게 학습할 수 있게 구성했습니다. 시각화 도구를 활용한 개념 설명과 군더더기 없는 핵심 코드를 통해 개념과 구현을 한 흐름으로 학습할 수 있습니다. 또한 ‘기초 체력을 다지는 예제 → 셀프 테스트 → 생각을 논리적으로 정리하며 한 단계씩 풀어 가는 도전 과제 → 스토리가 가미된 흥미로운 프로그래밍 문제’ 등을 통해 프로그래밍 실력을 차근차근 끌어올릴 수 있습니다");
		book2.setPublisher("한빛아카데미");
		book2.setCategory("IT모바일");
		book2.setUnitsInStock(1000);
		book2.setTotalPages(692);
		book2.setReleaseDate("2017/08/02");
		book2.setFilename("ISBN1235.jpg");
		
		Book book3= new Book("ISBN1236","스프링4 입문 ", 27000);
		book3.setAuthor("하세가와 유이치 , 오오노 와타루 , 토키 코헤이(권은철 , 전민수 ) ");
		book3.setDescription("스프링은 단순히 사용 방법만 익히는 것보다 아키텍처를 어떻게 이해하고 설계하는지가 더 중요합니다. 예제를 복사해 붙여넣는 식으로는 실제 개발에서 스프링을 제대로 활용할 수 없습니다. 이 책에서는 웹 애플리케이션의 기초를 다지고 스프링 코어를 살펴보며 클라우드 네이티브 입문까지 다룹니다. 이제 막 실무에 뛰어든 웹 애플리케이션 초급자나 개발 경험은 있지만 스프링은 사용해본 적 없는 분을 대상으로 가능한 한 쉽게 설명합니다 ");
		book3.setPublisher("한빛미디어");
		book3.setCategory("IT모바일");
		book3.setUnitsInStock(1000);
		book3.setTotalPages(520);
		book3.setReleaseDate("2017/11/01");
		book3.setFilename("ISBN1236.jpg");
		
		listOfBooks.add(book1);
		listOfBooks.add(book2);
		listOfBooks.add(book3);
	}
	
	public ArrayList<Book> getAllBooks() {
		return listOfBooks;
	}

	public Book getBookById(String bookId) {
		Book bookById = null;

		for (int i = 0; i < listOfBooks.size(); i++) {
			Book book = listOfBooks.get(i);
			if (book != null && book.getBookId() != null && book.getBookId().equals(bookId)) {
				
				bookById = book;
				break;
			}
		}
		return bookById;
	}
	
	public void addBook(Book book) {
		listOfBooks.add(book);
	}

}

코드 - books.jsp

<%@page import="vo.Book"%>
<%@page import="java.util.ArrayList"%>
<%@page import="dao.BookRepository"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
	<head>
		<link rel="stylesheet" href="./css/bootstrap.min.css" />
		<title>도서 목록</title>
	</head>
	<body>
		<%@ include file="menu.jsp" %>
		<div class="jumbotron">
			<div class="container">
				<h1 class="display-4">도서 목록</h1>
			</div>
		</div>
	      
		<div class="container">	
			<% 
				BookRepository dao = BookRepository.getInstance();
				ArrayList<Book> listOfBook = dao.getAllBooks();
			%>
			<% 
				for(int i = 0; i < listOfBook.size(); i++) {
					Book book = listOfBook.get(i);
			%>
			<div class="row">
				<!--
				<div class="col-md-3" align="center">	
					<img src="${pageContext.request.contextPath }/resources/images/" width="60%">
				</div>
				-->
				<div class="col-md-10">	
					<h5 ><b>[<%= book.getCategory() %>] <%= book.getName() %></b></h5>
					<p style="padding-top: 10px"><%= book.getDescription() %></p> 
					<p><%= book.getAuthor() %> | <%= book.getPublisher() %> | <%= book.getUnitPrice() %> 원</p>
				</div>	
				<div class="col-md-2"  style="padding-top: 60px">						    			 
					<a href="./book.jsp?id=<%= book.getBookId() %>" class="btn btn-secondary" role="button"> 상세정보 &raquo; </a>				
				</div>
			</div>
			<hr />
			<% 
				}
			%>			
		</div>	
		<%@ include file="footer.jsp" %>
	</body>
</html>

코드 - book.jsp

<%@page import="vo.Book"%>
<%@page import="dao.BookRepository"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
	<head>
		<link rel="stylesheet" href="./css/bootstrap.min.css" />
		<title>도서 정보</title>
	</head>
	<body>
		<%@ include file="menu.jsp" %>
		<div class="jumbotron">
			<div class="container">
				<h1 class="display-4">도서 정보</h1>
			</div>
		</div>
		<div class="container">
			<% 
				String id = request.getParameter("id");
				BookRepository dao = BookRepository.getInstance();
				Book book = dao.getBookById(id);
			%>
			<div class="row">
				<!--
				<div class="col-md-4">
					<img src="${pageContext.request.contextPath }/resources/images/" style="width: 100%" />
				</div>
				-->
				<div class="col-md-12">
					<h4><b>[<%= book.getCategory() %>] <%= book.getName() %></b></h4>
					<p><%= book.getDescription() %></p>
					<p><b>도서코드 : </b><span class="badge badge-danger"><%= book.getBookId() %></span></p>
					<p><b>출판사</b> : <%= book.getPublisher() %></p>			
					<p><b>저자</b> : <%= book.getAuthor() %></p>			
					<p><b>재고수</b> : <%= book.getUnitsInStock() %></p>
					<p><b>총 페이지수</b> : <%= book.getTotalPages() %></p>
					<p><b>출판일</b> : <%= book.getReleaseDate() %></p>
					<h4>가격 : <%= book.getUnitPrice() %></h4>
					<form name="addForm" action="./addCart.jsp" method="get">
						<input type="hidden" value="" name="id"/>
						<a href="#" class="btn btn-info" onclick="addToCart()"> 도서주문&raquo;</a> 
						<a href="./cart.jsp" class="btn btn-warning"> 장바구니&raquo;</a> 
						<a href="./books.jsp" class="btn btn-secondary">도서목록 &raquo;</a>
					</form>
				</div>
			</div>
			<hr>
		</div>
		<%@ include file="footer.jsp" %>
	</body>
</html>