[4장 연습문제]
01. forward와 include 액션 태그의 차이점을 간단히 설명하시오.
forward: 외부파일이 실행되면 전에 출력버퍼의 저장 내용이 모두 삭제되고 forward태그로 설정된 페이지로 제어가 넘어간다.
include: 외부 파일이 실행된 후 원래의 JSP페이지로 제어를 반환함. 그리고 그 실행내용이 원래의 JSP페이지의 출력 버퍼에 저장되어 출력된다.
02. include 액션 태그와 include 디렉티브 태그의 차이점을 설명하시오.
include 액션 태그
- 화면 레이아웃의 일부분을 모듈화할 때 주로 사용한다.
- 동적 페이지에 사용한다.
- request 기본 내장 객체나 param 액션 태그를 이용하여 파라미터를 전달한다.
include 디렉티브 태그
- 다수의 JSP웹 페이지에서 공통으로 사용하는 코드나 저작권 같은 문장을 포함하는 경우 사용한다.
- 정적 페이지에 사용한다.
- 페이지 내의 변수를 선언한 후 변수에 값을 저장한다.
03. 자바빈즈를 작성하는 기법을 예를들어 설명하시오.
-> 06번
04. forward 액션 태그를 이용하여 다음 조건에 맞게 JSP애플리케이션을 만들고 실행 결과를 확인하시오.
1. forward.jsp파일을 생성합니다.
- <h4> 태그에 '구구단 출력하기'를 작성합니다.
- forward 액션 태그로 구구단을 출력하는 forward_data.jsp 파일로 이동하도록 작성합니다.
- param 액션 태그로 숫자 5를 출력하는 forward_data.jsp 파일에 전달하도록 작성합니다.
2. forward_data.jsp 파일을 생성합니다.
- 전달받은 숫자 5의 구구단을 출력하도록 작성합니다.
3. 웹 브라우저에 http://localhost:8080/Exercise/ch04/forward.jsp를 입력하여 실행 결과를 확인합니다.
코드
1. forward.jsp
1 2 3 4 5 6 7 8 9 10 11 12 13 | <html> <head> <title>Action Tag</title> </head> <body> <h4>구구단 출력하기</h4> <!--위 문장이 나오지 않아야 정상 --> <jsp:forward page="forward_data.jsp"> <jsp:param name="num" value="5"/> </jsp:forward> </body> </html> | cs |
파라미터를 넘길 때 정수형으로 넘겨주면 오류가 떠서 string으로 받고 형변환하여 구현했습니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <html> <head> <title>Action Tag</title> </head> <body> <% String number=request.getParameter("num"); int num = Integer.parseInt(number); for(int i=1;i<=9;i++) { out.println(num+"*"+i+"="+num*i+"<br>"); } %> </body> </html> | cs |
05. include 액션 태그를 이용하여 다음 조건에 맞게 JSP애플리케이션을 만들고 실행 결과를 확인하시오.
1. include.jsp파일을 생성합니다.
- <h4> 태그에 '구구단 출력하기'를 작성합니다.
- include 액션 태그로 구구단을 출력하는 include_data.jsp 파일로 이동하도록 작성합니다.
- param 액션 태그로 숫자 5를 출력하는 include_data.jsp 파일에 전달하도록 작성합니다.
2. include_data.jsp 파일을 생성합니다.
- 전달받은 숫자 5의 구구단을 출력하도록 작성합니다.
3. 웹 브라우저에 http://localhost:8080/Exercise/ch04/include.jsp를 입력하여 실행 결과를 확인합니다.
코드
1. include.jsp
1 2 3 4 5 6 7 8 9 10 11 12 | <%@ page contentType="text/html; charset=UTF-8"%> <html> <head> <title>Action Tag</title> </head> <body> <h4>구구단 출력하기</h4> <jsp:include page="include_data.jsp" flush="false"> <jsp:param name="num" value="5"/> </jsp:include> </body> </html> | cs |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | <%@ page contentType="text/html; charset=UTF-8"%> <html> <head> <title>Action Tag</title> </head> <body> <% String number=request.getParameter("num"); int num = Integer.parseInt(number); for(int i=1;i<=9;i++) { out.println(num+"*"+i+"="+num*i+"<br>"); } %> </body> </html> | cs |
06. 다음 조건에 맞게 JSP애플리케이션을 만들고 실행 결과를 확인하시오.
1. src폴더에 ch04.com.dao 패키지로 GuGuDan클래스를 생성하여 곱셈을 계산하는 process()메소드를 작성합니다.
2. useBean.jsp파일을 생성합니다.
- useBean 액션 태그에 GuGuDan 클래스를 사용하도록 작성합니다.
- <h4> 태그에 '구구단 출력하기'를 작성합니다.
- 숫자5에 대해 GuGuDan 클래스의 process() 메소드를 호출하여 구구단을 출력합니다.
- 웹 브라우저에 http://localhost:8080/Exercise/ch04/useBean.jsp를 입력하여 실행결과를 확인합니다.
코드
1. useBean.jsp
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | <%@ page contentType="text/html; charset=UTF-8"%> <html> <head> <title>Action Tag</title> </head> <body> <h4>구구단 출력하기</h4> <jsp:useBean id="func" class="ch04.com.dao.GuGuDan"/> <%int arr[]=func.process(5); for(int i=0;i<9;i++) { out.println(5+"*"+(i+1)+"="+arr[i]+"<br>"); } %> </body> </html> | cs |
2. ch04.com.dao 패키지
5을 인자로 받아서 배열에 구구단 결과값을 저장한 뒤 배열을 통 째로 반환했습니다.
1 2 3 4 5 6 7 8 9 10 11 12 | package ch04.com.dao; public class GuGuDan { public int[] process(int n) { int arr[]=new int[9]; for(int i=1;i<=9;i++) arr[i-1]=n*i; return arr; } } | cs |
07. 다음 조건에 맞게 도서 웹 쇼핑몰을 위한 웹 애플리케이션을 만들고 실행 결과를 확인하시오.
1. 생성된 BookMarket프로젝트를 사용합니다.
2. src 폴더에 dto 패키지를 생성하고 이 패키지에 Book 클래스를 생성합니다.
- 멤버 변수, 생성자, setter/getter() 메소드를 선언합니다.(146p참고)
3. src폴더에 dao패키지를 생성하고 이 패키지에 BookRepository 클래스를 생성합니다.
- 멤버변수 ArrayList<Book>객체 타입의 listOfBooks를 선언합니다.
- 기본 생성자를 생성하고 여기에 멤버 변수를 초기화하도록 값을 설정합니다.
- 상품 목록을 가져오는 ArrayList<Book> 객체 타입의 getAllBooks() 메소드를 작성합니다.
4. WebContent 폴더에 books.jsp 파일을 생성하고 자바빈즈 BookRepository 클래스를 이용하여 상품 목록을 출력합니다.
5. 웹 브라우저에 http://localhost:8080/BookMarket/books.jsp를 입력하여 실행결과를 확인합니다.
코드
1. dto 패키지- Book 클래스
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 | package dto; public class Book implements java.io.Serializable{ private String booktId;//도서 id private String name; //도서이름 private Integer unitPrice;// 가격 private String description;//설명 private String author; private String publisher;//출판사 private String category;//분류 private long unitsInStock;//재고 수 private long totalPages;//페이지 수 private String releaseDate;//출판일(월/년) private String condition; //신상품 중고품 재생품 public Book() { super(); // TODO Auto-generated constructor stub } public Book(String booktId, String name, Integer unitPrice) { this.booktId = booktId; this.name = name; this.unitPrice = unitPrice; } public String getBooktId() { return booktId; } public void setBooktId(String booktId) { this.booktId = booktId; } public String getAuthor() { return author; } public void setAuthor(String author) { this.author = author; } 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 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; } } | cs |
2. dao패키지- BookRepository클래스
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 | package dao; import java.util.ArrayList; import dto.Book; import dto.Product; public class BookRepository { ArrayList<Book>listOfBooks=new ArrayList<Book>(); public BookRepository(){ Book book1=new Book("Num1","HTML5+CSS",15000); book1.setDescription("워드나 PPT문서를 만들수 있나요? 그러면 문제 없습니다. 지금 바로 웹페이지에 도전하세요."); book1.setCategory("Hello Coding"); book1.setPublisher("한빛미디어"); book1.setAuthor("황재호"); Book book2=new Book("Num2","쉽게 배우는 자바 프로그래밍",27000); book2.setDescription("객체 지향의 핵심과 자바의 현대적 기능을 다루면서 초보자가 쉽게 학습할 수 있습니다."); book2.setCategory("IT모바일"); book2.setPublisher("한빛아카데미"); book2.setAuthor("우종중"); Book book3=new Book("Num3","스프링4 입문",27000); book3.setDescription("스프링은 단순히 사용 방법만 익히는것보다 아키텍쳐를 이해하는게 중요합니다!"); book3.setCategory("IT모바일"); book3.setPublisher("한빛미디어"); book3.setAuthor("하세가와 유이치,오오노 와타루,토키 코헤이(권은철,전민수)"); listOfBooks.add(book1); listOfBooks.add(book2); listOfBooks.add(book3); } public ArrayList<Book> getAllProducts(){ return listOfBooks; } } | cs |
3. welcome.jsp
4장 쇼핑몰 프로젝트의 코드를 응용하여 다음과 같이 작성할 수 있습니다.
반복문 대괄호 위치, 개행처리, 책 목록 간 간격의 "------"표시, 레이아웃 사이즈 조절 등 많은 문법 표현을 알 수 있었습니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 | <%@ page contentType="text/html; charset=UTF-8"%> <%@ page import="java.util.ArrayList" %> <%@ page import="dto.Book" %> <jsp:useBean id="BookDAO" class="dao.BookRepository" scope="session"/> <html> <head> <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/css/bootstrap.min.css"> <title>Welcome</title> </head> <body> <nav class="navbar navbar-expand navbar-dark bg-dark"> <div class="container"> <div class="navbar-header"> <a class="navbar-brand" href="./welcome.jsp">Home</a> </div> </div> </nav> <%! String greeting="도서 목록";%> <div class="jumbotron"> <div class="container"> <h1 class="display-3"> <%=greeting %> </h1> </div> </div> <%ArrayList<Book> listOfBooks=BookDAO.getAllProducts(); %> <div class="container"> <div class="col" align="left"> <%for(int i=0;i<listOfBooks.size();i++){ Book book=listOfBooks.get(i); %> <div class="col-lg"> <h4>[<%=book.getCategory() %>]</h4><p> <p><%=book.getDescription()%> <p><%=book.getAuthor() %>|<%=book.getPublisher() %>|<%=book.getUnitPrice() %> </div> <hr> <%} %> </div> <footer class="container"> <p>© BookMarket</p> </footer> </body> </html> | cs |
'쉽게 배우는 JSP 웹 프로그래밍' 카테고리의 다른 글
쉽게 배우는 JSP 웹 프로그래밍 [6장] 연습문제 (1) | 2020.10.11 |
---|---|
쉽게 배우는 JSP 웹 프로그래밍 [5장] 연습문제 (0) | 2020.10.10 |
쉽게 배우는 JSP 웹 프로그래밍 [3장] 연습문제 (0) | 2020.10.01 |
쉽게 배우는 JSP 웹 프로그래밍 [2장] 연습문제 (0) | 2020.10.01 |
쉽게 배우는 JSP 웹 프로그래밍 [1장] 연습문제 (0) | 2020.09.30 |