[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

2. forward_data.jsp

파라미터를 넘길 때 정수형으로 넘겨주면 오류가 떠서 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

2. include_data.jsp
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>&copy; BookMarket</p>
</footer>
</body>
</html>
cs





 




+ Recent posts