[6장 연습문제]


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

1. request 내장 객체

2. 자주 사용되는 메소드: getParameter(String name)

-> 요청 파라미터 이름이 name인 값을 전달받고, 요청 파라미터 값이 없으면 null을 반환합니다.


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


1.response 내장 객체

2. 메소드: sendRedirect(String url)

-> 설정한 URL 페이지로 강제 이동합니다.


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


out 내장 객체


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


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

- input 태그내에 text 유형을 이용하여 아이디, 비밀번호, 항목을 작성합니다.

- form 태그의 action 속성 값은 request_process.jsp로, method 속성 값은 get으로 작성합니다.

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

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

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


<코드>

1. request.jsp

1
2
3
4
5
6
7
8
9
10
11
12
13
<%@ page language="java" contentType="text/html; charset=UTF-8"%>
<html>
<head>
<title>Implicit Objects</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>
cs


2. request_process.jsp

getQueryString() 메소드를 이용하여 웹 브라우저 주소의 "?" 이후의 문자열을 출력합니다.

1
2
3
4
5
6
7
8
9
<%@ page language="java" contentType="text/html; charset=UTF-8"%>
<html>
<head>
<title>Implicit Objects</title>
</head>
<body>
    전송된 요청 파라미터:<%=request.getQueryString() %>
</body>
</html>
cs


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

     

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

- response 내장 객체의 setHeader() 메소드를 이용하여 5초마다 페이지를 갱신하도록 작성합니다.

- java.util.Calendar 클래스를 이용하여 현재 시간을 출력하도록 작성합니다.

- <Google 홈페이지로 이동하기>를 클릭하면 response_data.jsp 파일을 연결하도록 작성합니다.

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

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

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


<코드>

1. response.jsp

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<%@page import="java.util.Calendar"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<title>Implicit Objects</title>
</head>
<body>
<p> 현재 시간은 <%=java.util.Calendar.getInstance().getTime()%>
 
    <%
        response.setIntHeader("Refresh",5);
    %>
<p> <a href="./response_data.jsp"> Google 홈페이지로 이동하기</a>
</body>
</html>
cs


2. response_data.jsp

1
2
3
4
5
6
7
8
9
10
11
<%@ page language="java" contentType="text/html; charset=UTF-8"%>
<html>
<head>
<title>Implicit Objects</title>
</head>
<body>
    <%
        response.sendRedirect("http://www.google.com");
    %>
</body>
</html>
cs


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


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

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

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

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

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

- 자바빈즈 BookRepository를 이용하여 도서 상세 정보를 출력합니다.

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


<코드 설명 전에>

*구현을 위해 4장연습문제에서의 몇 가지 사항들을 수정 및 추가 했습니다.


1. home화면 모듈화(menu.jsp, footer.jsp)

(home 버튼을 누르면 home화면이 출력되어야 합니다.)

2. BookRepository.jsp의 기본 세팅 값 중 재고수, 총 페이지수, 총판일 값 데이터 각각 추가

3. 상품 상세 정보를 가져오는 메소드 추가(BookRepository.jsp)

4. 도서 목록 페이지(products.jsp)에 책 설명서 옆에 "상세정보" 버튼 만들기

5. 제품 상세 정보 페이지(product.jsp) 만들기

6.request내장객체로 사용자가 요청한 도서id를 전달받아 자바빈즈BookRepository에서 도서정보를 얻어오는 코드작성(product.jsp)

7. 버튼 중 ">>" 특수 문자 생성 : "&raquo" 작성

ex) "상세 정보 >>" 버튼 생성

1
2
 <a href="./product.jsp?id=<%=book.getBookId() %>"
                class="btn btn-secondary rold="button">상세 정보 &raquo</a>
cs

<실행 화면>
1. 최초 실행 화면(products.jsp)



2. home 버튼 클릭 시 
3. 각 도서 목록의 상세 정보 페이지


4. 상세 도서 정보 페이지에서 "도서 주문" 버튼 클릭 시
-> 변화 없음(아직 구현 X)

5. 상세 도서 정보 페이지에서 "도서목록" 버튼 클릭 시
-> 최초 실행 화면

<코드>
수정, 추가한 사항이 많아서 모든 소스코드를 올렸습니다.

1. dao 패키지- BookRepository.java
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
package dao;
import java.util.ArrayList;
import dto.Book;
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("황재호");
        book1.setTotalPages(268);
        book1.setUnitsInStock(1500);
        book1.setReleaseDate("2018/03/07");
        
        Book book2=new Book("Num2","쉽게 배우는 자바 프로그래밍",27000);
        book2.setDescription("객체 지향의 핵심과 자바의 현대적 기능을 다루면서 초보자가 쉽게 학습할 수 있습니다.");
        book2.setCategory("IT모바일");
        book2.setPublisher("한빛아카데미");
        book2.setAuthor("우종중");
        book2.setTotalPages(308);
        book2.setUnitsInStock(2000);
        book2.setReleaseDate("2016/09/01");
        
        Book book3=new Book("Num3","스프링4 입문",27000);
        book3.setDescription("스프링은 단순히 사용 방법만 익히는것보다 아키텍쳐를 이해하는게 중요합니다!");
        book3.setCategory("IT모바일");
        book3.setPublisher("한빛미디어");
        book3.setAuthor("하세가와 유이치,오오노 와타루,토키 코헤이(권은철,전민수)");
        book3.setTotalPages(189);
        book3.setUnitsInStock(3000);
        book3.setReleaseDate("2019/05/03");
        listOfBooks.add(book1);
        listOfBooks.add(book2);
        listOfBooks.add(book3);
    }
    public ArrayList<Book> getAllProducts(){
        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;
    }
}
 
cs

2. dto 패키지- Book.java
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 bookId;//도서 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.bookId = booktId;
        this.name = name;
        this.unitPrice = unitPrice;
    }
 
    public String getBookId() {
        return bookId;
    }
    public void setBookId(String booktId) {
        this.bookId = 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

3. menu.jsp
1
2
3
4
5
6
7
<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>
cs

4. footer.jsp 
1
2
3
<footer class="container">
    <p>&copy; BookMarket</p>
</footer>
cs

5. welcome.jsp
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
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
     <%@ page import="java.util.Date" %>
    
<!DOCTYPE html>
<html>
<head>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.2/css/bootstrap.min.css">
<title>Welcome</title>
</head>    
<body>
 
<%@ include file="menu.jsp" %>
<%! String greeting="웹 쇼핑몰에 오신 것을 환영합니다.";
String tagline="Welcome to Web Market!";
%>
<%-- 대형 전광판을 의미함 jumbtron --%>
<div class="jumbotron">
    <div class="container">
        <h1 class="display-3">
        <%=greeting %>
        </h1>
    </div>
</div>
<%--센터에  출력되는    --%>
<div class="container">
    <div class="text-center">
        <h3>
            <%=tagline %>
        </h3>
        <%
        response.setIntHeader("Refresh", 5);
    Date daynew java.util.Date();
    String am_pm;
    int hour=day.getHours();
    int min=day.getMinutes();
    int second=day.getSeconds();
    if(hour/12==0)
        am_pm="AM";
    else am_pm="PM";
    hour=hour-12;
    String CT=hour+":"+min+":"+second+" "+am_pm;
    out.println("현재 접속 시각:" +CT+"\n");
%>
    </div>
    <hr>
</div>
<%@ include file="footer.jsp" %>
</body>
</html>
cs

6. products.jsp
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
<%@ 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="L">
            <%for(int i=0;i<listOfBooks.size();i++){
                Book book=listOfBooks.get(i);
            %>
            <div class="col-lg">
                <h4>[<%=book.getCategory() %><%=book.getName() %></h4><p>
                <p><%=book.getDescription()%>
                 <a href="./product.jsp?id=<%=book.getBookId() %>"
                class="btn btn-secondary rold="button">상세 정보 &raquo</a>
                <p><%=book.getAuthor() %>|<%=book.getPublisher() %>|<%=book.getUnitPrice() %>원
            </div>
            <hr>
            <%} %>            
        </div> 
<jsp:include page="footer.jsp"/>
</body>
</html>
cs

7. product.jsp
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
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ page import="dto.Book" %>
<jsp:useBean id="productDAO" class="dao.BookRepository" scope="session"/>
<html>
<head>
<link rel="stylesheet"
    href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/css/bootstrap.min.css">
<title>상품 상세 정보</title>
</head>
<body>
    <jsp:include page="menu.jsp"/>
    <div class="jumbotron">
        <div class="container">
            <h1 class="display-3">상품 정보</h1>
        </div>
    </div>
    <%
        String id=request.getParameter("id");
    Book book=productDAO.getBookById(id);
    %>
    <div class="container">
        <div class="row">
            <div class="col-md-6">
                <h3><%=book.getName()%></h3>
                <p><%=book.getDescription()%>
                <p><b>도서 코드:</b><span class="badge badge-danger">
                
                <%=book.getBookId() %></span>
                <p><b>출판사</b> : <%=book.getPublisher()%>
                <p><b>저자</b> : <%=book.getAuthor() %>
                <p><b>재고수</b> : <%=book.getUnitsInStock() %>
                <p><b>총 페이지수</b> : <%=book.getTotalPages() %>
                <p><b>출판일</b> : <%=book.getReleaseDate() %>
                <h4><%=book.getUnitPrice()%></h4>
                <p> <a href="#" class="btn btn-info"> 도서 주문&raquo</a>
                 <a href="./products.jsp" class="btn btn-secondary">도서 목록 &raquo</a>
            </div>
                        
        </div> 
        <hr>
    </div>
    <jsp:include page="footer.jsp"/>
</body>
</html>
</body>
</html>
cs






+ Recent posts